Remove std::string usage in PublicMethods.cpp.

BUG=pdfium:488

Review-Url: https://codereview.chromium.org/1936383002
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index a84c093..2b14b77 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -7,7 +7,6 @@
 #include "fpdfsdk/javascript/PublicMethods.h"
 
 #include <algorithm>
-#include <string>
 #include <vector>
 
 #include "core/fxcrt/include/fx_ext.h"
@@ -739,7 +738,7 @@
   int iSepStyle = params[1].ToInt();
   int iNegStyle = params[2].ToInt();
   // params[3] is iCurrStyle, it's not used.
-  std::wstring wstrCurrency(params[4].ToCFXWideString().c_str());
+  CFX_WideString wstrCurrency = params[4].ToCFXWideString();
   FX_BOOL bCurrencyPrepend = params[5].ToBool();
 
   if (iDec < 0)
@@ -812,21 +811,18 @@
 
   // for processing currency string
   Value = CFX_WideString::FromLocal(strValue.AsStringC());
-  std::wstring strValue2 = Value.c_str();
 
   if (bCurrencyPrepend)
-    strValue2 = wstrCurrency + strValue2;
+    Value = wstrCurrency + Value;
   else
-    strValue2 = strValue2 + wstrCurrency;
+    Value = Value + wstrCurrency;
 
   // for processing negative style
   if (iNegative) {
     if (iNegStyle == 0) {
-      strValue2.insert(0, L"-");
-    }
-    if (iNegStyle == 2 || iNegStyle == 3) {
-      strValue2.insert(0, L"(");
-      strValue2.insert(strValue2.length(), L")");
+      Value = L"-" + Value;
+    } else if (iNegStyle == 2 || iNegStyle == 3) {
+      Value = L"(" + Value + L")";
     }
     if (iNegStyle == 1 || iNegStyle == 3) {
       if (Field* fTarget = pEvent->Target_Field()) {
@@ -882,7 +878,6 @@
       }
     }
   }
-  Value = strValue2.c_str();
 #endif
   return TRUE;
 }
@@ -899,19 +894,16 @@
 
   if (params.size() < 2)
     return FALSE;
-  int iSepStyle = params[1].ToInt();
 
-  if (iSepStyle < 0 || iSepStyle > 3)
-    iSepStyle = 0;
   if (!pEvent->m_pValue)
     return FALSE;
+
   CFX_WideString& val = pEvent->Value();
-  CFX_WideString& w_strChange = pEvent->Change();
-  CFX_WideString w_strValue = val;
+  CFX_WideString& wstrChange = pEvent->Change();
+  CFX_WideString wstrValue = val;
 
   if (pEvent->WillCommit()) {
-    CFX_WideString wstrChange = w_strChange;
-    CFX_WideString wstrValue = StrTrim(w_strValue);
+    CFX_WideString wstrValue = StrTrim(wstrValue);
     if (wstrValue.IsEmpty())
       return TRUE;
 
@@ -921,19 +913,17 @@
       pEvent->Rc() = FALSE;
       sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
       Alert(pContext, sError.c_str());
-      return TRUE;
     }
     return TRUE;  // it happens after the last keystroke and before validating,
   }
 
-  std::wstring w_strValue2 = w_strValue.c_str();
-  std::wstring w_strChange2 = w_strChange.c_str();
-  std::wstring w_strSelected;
-  if (-1 != pEvent->SelStart())
-    w_strSelected = w_strValue2.substr(pEvent->SelStart(),
-                                       (pEvent->SelEnd() - pEvent->SelStart()));
-  bool bHasSign = (w_strValue2.find('-') != std::wstring::npos) &&
-                  (w_strSelected.find('-') == std::wstring::npos);
+  CFX_WideString wstrSelected;
+  if (pEvent->SelStart() != -1) {
+    wstrSelected = wstrValue.Mid(pEvent->SelStart(),
+                                 pEvent->SelEnd() - pEvent->SelStart());
+  }
+
+  bool bHasSign = wstrValue.Find(L'-') != -1 && wstrSelected.Find(L'-') == -1;
   if (bHasSign) {
     // can't insert "change" in front to sign postion.
     if (pEvent->SelStart() == 0) {
@@ -943,23 +933,14 @@
     }
   }
 
-  char cSep = L'.';
+  int iSepStyle = params[1].ToInt();
+  if (iSepStyle < 0 || iSepStyle > 3)
+    iSepStyle = 0;
+  const FX_WCHAR cSep = iSepStyle < 2 ? L'.' : L',';
 
-  switch (iSepStyle) {
-    case 0:
-    case 1:
-      cSep = L'.';
-      break;
-    case 2:
-    case 3:
-      cSep = L',';
-      break;
-  }
-
-  bool bHasSep = (w_strValue2.find(cSep) != std::wstring::npos);
-  for (std::wstring::iterator it = w_strChange2.begin();
-       it != w_strChange2.end(); it++) {
-    if (*it == cSep) {
+  bool bHasSep = wstrValue.Find(cSep) != -1;
+  for (FX_STRSIZE i = 0; i < wstrChange.GetLength(); ++i) {
+    if (wstrChange[i] == cSep) {
       if (bHasSep) {
         FX_BOOL& bRc = pEvent->Rc();
         bRc = FALSE;
@@ -968,14 +949,14 @@
       bHasSep = TRUE;
       continue;
     }
-    if (*it == L'-') {
+    if (wstrChange[i] == L'-') {
       if (bHasSign) {
         FX_BOOL& bRc = pEvent->Rc();
         bRc = FALSE;
         return TRUE;
       }
       // sign's position is not correct
-      if (it != w_strChange2.begin()) {
+      if (i != 0) {
         FX_BOOL& bRc = pEvent->Rc();
         bRc = FALSE;
         return TRUE;
@@ -989,20 +970,18 @@
       continue;
     }
 
-    if (!FXSYS_iswdigit(*it)) {
+    if (!FXSYS_iswdigit(wstrChange[i])) {
       FX_BOOL& bRc = pEvent->Rc();
       bRc = FALSE;
       return TRUE;
     }
   }
 
-  std::wstring w_prefix = w_strValue2.substr(0, pEvent->SelStart());
-  std::wstring w_postfix;
-  if (pEvent->SelEnd() < (int)w_strValue2.length())
-    w_postfix = w_strValue2.substr(pEvent->SelEnd());
-  w_strValue2 = w_prefix + w_strChange2 + w_postfix;
-  w_strValue = w_strValue2.c_str();
-  val = w_strValue;
+  CFX_WideString wprefix = wstrValue.Mid(0, pEvent->SelStart());
+  CFX_WideString wpostfix;
+  if (pEvent->SelEnd() < wstrValue.GetLength())
+    wpostfix = wstrValue.Mid(pEvent->SelEnd());
+  val = wprefix + wstrChange + wpostfix;
   return TRUE;
 }
 
@@ -1440,21 +1419,18 @@
   if (wstrMask.IsEmpty())
     return TRUE;
 
-  const size_t wstrMaskLen = wstrMask.GetLength();
-  const std::wstring wstrValue = valEvent.c_str();
-
   if (pEvent->WillCommit()) {
-    if (wstrValue.empty())
+    if (valEvent.IsEmpty())
       return TRUE;
-    size_t iIndexMask = 0;
-    for (const auto& w_Value : wstrValue) {
-      if (!maskSatisfied(w_Value, wstrMask[iIndexMask]))
+
+    FX_STRSIZE iIndexMask = 0;
+    for (; iIndexMask < valEvent.GetLength(); ++iIndexMask) {
+      if (!maskSatisfied(valEvent[iIndexMask], wstrMask[iIndexMask]))
         break;
-      iIndexMask++;
     }
 
-    if (iIndexMask != wstrMaskLen ||
-        (iIndexMask != wstrValue.size() && wstrMaskLen != 0)) {
+    if (iIndexMask != wstrMask.GetLength() ||
+        (iIndexMask != valEvent.GetLength() && wstrMask.GetLength() != 0)) {
       Alert(
           pContext,
           JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str());
@@ -1464,48 +1440,45 @@
   }
 
   CFX_WideString& wideChange = pEvent->Change();
-  std::wstring wChange = wideChange.c_str();
-  if (wChange.empty())
+  if (wideChange.IsEmpty())
     return TRUE;
 
-  size_t iIndexMask = pEvent->SelStart();
-
-  size_t combined_len = wstrValue.length() + wChange.length() -
-                        (pEvent->SelEnd() - pEvent->SelStart());
-  if (combined_len > wstrMaskLen) {
+  CFX_WideString wChange = wideChange;
+  FX_STRSIZE iIndexMask = pEvent->SelStart();
+  FX_STRSIZE combined_len = valEvent.GetLength() + wChange.GetLength() +
+                            pEvent->SelStart() - pEvent->SelEnd();
+  if (combined_len > wstrMask.GetLength()) {
     Alert(pContext,
           JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
     pEvent->Rc() = FALSE;
     return TRUE;
   }
 
-  if (iIndexMask >= wstrMaskLen && (!wChange.empty())) {
+  if (iIndexMask >= wstrMask.GetLength() && !wChange.IsEmpty()) {
     Alert(pContext,
           JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
     pEvent->Rc() = FALSE;
     return TRUE;
   }
 
-  for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++) {
-    if (iIndexMask >= wstrMaskLen) {
+  for (FX_STRSIZE i = 0; i < wChange.GetLength(); ++i) {
+    if (iIndexMask >= wstrMask.GetLength()) {
       Alert(pContext,
             JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
       pEvent->Rc() = FALSE;
       return TRUE;
     }
-    wchar_t w_Mask = wstrMask[iIndexMask];
-    if (!isReservedMaskChar(w_Mask)) {
-      *it = w_Mask;
-    }
-    wchar_t w_Change = *it;
-    if (!maskSatisfied(w_Change, w_Mask)) {
+    FX_WCHAR wMask = wstrMask[iIndexMask];
+    if (!isReservedMaskChar(wMask))
+      wChange.SetAt(i, wMask);
+
+    if (!maskSatisfied(wChange[i], wMask)) {
       pEvent->Rc() = FALSE;
       return TRUE;
     }
     iIndexMask++;
   }
-
-  wideChange = wChange.c_str();
+  wideChange = wChange;
   return TRUE;
 }
 
@@ -1525,13 +1498,8 @@
   if (!pEvent->m_pValue)
     return FALSE;
 
-  std::string cFormat;
-  int iIndex = params[0].ToInt();
-  CFX_WideString& val = pEvent->Value();
-  std::string strSrc = CFX_ByteString::FromUnicode(val).c_str();
-  std::wstring wstrChange = pEvent->Change().c_str();
-
-  switch (iIndex) {
+  const char* cFormat = "";
+  switch (params[0].ToInt()) {
     case 0:
       cFormat = "99999";
       break;
@@ -1539,7 +1507,7 @@
       cFormat = "999999999";
       break;
     case 2:
-      if (strSrc.length() + wstrChange.length() > 7)
+      if (pEvent->Value().GetLength() + pEvent->Change().GetLength() > 7)
         cFormat = "9999999999";
       else
         cFormat = "9999999";
@@ -1550,7 +1518,7 @@
   }
 
   std::vector<CJS_Value> params2;
-  params2.push_back(CJS_Value(CJS_Runtime::FromContext(cc), cFormat.c_str()));
+  params2.push_back(CJS_Value(CJS_Runtime::FromContext(cc), cFormat));
   return AFSpecial_KeystrokeEx(cc, params2, vRet, sError);
 }