Return values instead of out params

This CL updates the IFX_Locale code and subclasses to return
CFX_WideStrings instead of taking out params.

Change-Id: Id03499c68161e809607e73b9d8ec778e24631845
Reviewed-on: https://pdfium-review.googlesource.com/3252
Reviewed-by: Nicolás Peña <npm@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/xfa/fgas/localization/fgas_locale.cpp b/xfa/fgas/localization/fgas_locale.cpp
index 7fddbb4..17aae59 100644
--- a/xfa/fgas/localization/fgas_locale.cpp
+++ b/xfa/fgas/localization/fgas_locale.cpp
@@ -65,26 +65,26 @@
 const wchar_t gs_wsDateSymbols[] = L"DJMEeGgYwW";
 const wchar_t gs_wsConstChars[] = L",-:/. ";
 
-int32_t ParseTimeZone(const wchar_t* pStr, int32_t iLen, FX_TIMEZONE& tz) {
-  tz.tzHour = 0;
-  tz.tzMinute = 0;
+int32_t ParseTimeZone(const wchar_t* pStr, int32_t iLen, FX_TIMEZONE* tz) {
+  tz->tzHour = 0;
+  tz->tzMinute = 0;
   if (iLen < 0)
     return 0;
 
   int32_t iStart = 1;
   int32_t iEnd = iStart + 2;
   while (iStart < iLen && iStart < iEnd)
-    tz.tzHour = tz.tzHour * 10 + pStr[iStart++] - '0';
+    tz->tzHour = tz->tzHour * 10 + pStr[iStart++] - '0';
 
   if (iStart < iLen && pStr[iStart] == ':')
     iStart++;
 
   iEnd = iStart + 2;
   while (iStart < iLen && iStart < iEnd)
-    tz.tzMinute = tz.tzMinute * 10 + pStr[iStart++] - '0';
+    tz->tzMinute = tz->tzMinute * 10 + pStr[iStart++] - '0';
 
   if (pStr[0] == '-')
-    tz.tzHour = -tz.tzHour;
+    tz->tzHour = -tz->tzHour;
 
   return iStart;
 }
@@ -285,10 +285,9 @@
       CFX_WideString wsMonthNameAbbr;
       uint16_t i = 0;
       for (; i < 12; i++) {
-        pLocale->GetMonthName(i, wsMonthNameAbbr, true);
-        if (wsMonthNameAbbr.IsEmpty()) {
+        wsMonthNameAbbr = pLocale->GetMonthName(i, true);
+        if (wsMonthNameAbbr.IsEmpty())
           continue;
-        }
         if (!FXSYS_wcsncmp(wsMonthNameAbbr.c_str(), str + cc,
                            wsMonthNameAbbr.GetLength())) {
           break;
@@ -302,10 +301,9 @@
       CFX_WideString wsMonthName;
       uint16_t i = 0;
       for (; i < 12; i++) {
-        pLocale->GetMonthName(i, wsMonthName, false);
-        if (wsMonthName.IsEmpty()) {
+        wsMonthName = pLocale->GetMonthName(i, false);
+        if (wsMonthName.IsEmpty())
           continue;
-        }
         if (!FXSYS_wcsncmp(wsMonthName.c_str(), str + cc,
                            wsMonthName.GetLength())) {
           break;
@@ -321,10 +319,9 @@
       CFX_WideString wsDayNameAbbr;
       uint16_t i = 0;
       for (; i < 7; i++) {
-        pLocale->GetDayName(i, wsDayNameAbbr, true);
-        if (wsDayNameAbbr.IsEmpty()) {
+        wsDayNameAbbr = pLocale->GetDayName(i, true);
+        if (wsDayNameAbbr.IsEmpty())
           continue;
-        }
         if (!FXSYS_wcsncmp(wsDayNameAbbr.c_str(), str + cc,
                            wsDayNameAbbr.GetLength())) {
           break;
@@ -337,10 +334,9 @@
       CFX_WideString wsDayName;
       int32_t i = 0;
       for (; i < 7; i++) {
-        pLocale->GetDayName(i, wsDayName, false);
-        if (wsDayName == L"") {
+        wsDayName = pLocale->GetDayName(i, false);
+        if (wsDayName == L"")
           continue;
-        }
         if (!FXSYS_wcsncmp(wsDayName.c_str(), str + cc,
                            wsDayName.GetLength())) {
           break;
@@ -402,8 +398,7 @@
                  FX_TIMEZONE tzDiff,
                  IFX_Locale* pLocale) {
   int32_t iMinuteDiff = wHour * 60 + wMinute;
-  FX_TIMEZONE tzLocale;
-  pLocale->GetTimeZone(&tzLocale);
+  FX_TIMEZONE tzLocale = pLocale->GetTimeZone();
   iMinuteDiff += tzLocale.tzHour * 60 +
                  (tzLocale.tzHour < 0 ? -tzLocale.tzMinute : tzLocale.tzMinute);
   iMinuteDiff -= tzDiff.tzHour * 60 +
@@ -545,10 +540,8 @@
         i++;
       }
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'A', '1')) {
-      CFX_WideString wsAM;
-      pLocale->GetMeridiemName(wsAM, true);
-      CFX_WideString wsPM;
-      pLocale->GetMeridiemName(wsPM, false);
+      CFX_WideString wsAM = pLocale->GetMeridiemName(true);
+      CFX_WideString wsPM = pLocale->GetMeridiemName(false);
       if ((cc + wsAM.GetLength() <= len) &&
           (CFX_WideStringC(str + cc, wsAM.GetLength()) == wsAM)) {
         cc += wsAM.GetLength();
@@ -570,9 +563,9 @@
         FX_TIMEZONE tzDiff;
         tzDiff.tzHour = 0;
         tzDiff.tzMinute = 0;
-        if (cc < len && (str[cc] == '-' || str[cc] == '+')) {
-          cc += ParseTimeZone(str + cc, len - cc, tzDiff);
-        }
+        if (cc < len && (str[cc] == '-' || str[cc] == '+'))
+          cc += ParseTimeZone(str + cc, len - cc, &tzDiff);
+
         ResolveZone(hour, minute, tzDiff, pLocale);
       } else {
         const FX_LOCALETIMEZONEINFO* pEnd =
@@ -590,7 +583,7 @@
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) {
       if (str[cc] != 'Z') {
         FX_TIMEZONE tzDiff;
-        cc += ParseTimeZone(str + cc, len - cc, tzDiff);
+        cc += ParseTimeZone(str + cc, len - cc, &tzDiff);
         ResolveZone(hour, minute, tzDiff, pLocale);
       } else {
         cc++;
@@ -737,13 +730,9 @@
       wsMonth.Format(L"%02d", month);
       wsResult += wsMonth;
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) {
-      CFX_WideString wsTemp;
-      pLocale->GetMonthName(month - 1, wsTemp, true);
-      wsResult += wsTemp;
+      wsResult += pLocale->GetMonthName(month - 1, true);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '4')) {
-      CFX_WideString wsTemp;
-      pLocale->GetMonthName(month - 1, wsTemp, false);
-      wsResult += wsTemp;
+      wsResult += pLocale->GetMonthName(month - 1, false);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '1')) {
       uint16_t wWeekDay = GetWeekDay(year, month, day);
       CFX_WideString wsWeekDay;
@@ -751,25 +740,18 @@
       wsResult += wsWeekDay;
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '3')) {
       uint16_t wWeekDay = GetWeekDay(year, month, day);
-      CFX_WideString wsTemp;
-      pLocale->GetDayName(wWeekDay, wsTemp, true);
-      wsResult += wsTemp;
+      wsResult += pLocale->GetDayName(wWeekDay, true);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) {
       uint16_t wWeekDay = GetWeekDay(year, month, day);
-      if (pLocale) {
-        CFX_WideString wsTemp;
-        pLocale->GetDayName(wWeekDay, wsTemp, false);
-        wsResult += wsTemp;
-      }
+      if (pLocale)
+        wsResult += pLocale->GetDayName(wWeekDay, false);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) {
       uint16_t wWeekDay = GetWeekDay(year, month, day);
       CFX_WideString wsWeekDay;
       wsWeekDay.Format(L"%d", wWeekDay ? wWeekDay : 7);
       wsResult += wsWeekDay;
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) {
-      CFX_WideString wsTemp;
-      pLocale->GetEraName(wsTemp, year < 0);
-      wsResult += wsTemp;
+      wsResult += pLocale->GetEraName(year < 0);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '2')) {
       CFX_WideString wsYear;
       wsYear.Format(L"%02d", year % 100);
@@ -895,32 +877,22 @@
       wsMilliseconds.Format(L"%03d", millisecond);
       wsResult += wsMilliseconds;
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'A', '1')) {
-      CFX_WideString wsMeridiem;
-      pLocale->GetMeridiemName(wsMeridiem, !bPM);
-      wsResult += wsMeridiem;
+      wsResult += pLocale->GetMeridiemName(!bPM);
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) {
       wsResult += L"GMT";
-      FX_TIMEZONE tz;
-      pLocale->GetTimeZone(&tz);
+      FX_TIMEZONE tz = pLocale->GetTimeZone();
       if (!bGMT && (tz.tzHour != 0 || tz.tzMinute != 0)) {
-        if (tz.tzHour < 0) {
-          wsResult += L"-";
-        } else {
-          wsResult += L"+";
-        }
+        wsResult += tz.tzHour < 0 ? L"-" : L"+";
+
         CFX_WideString wsTimezone;
         wsTimezone.Format(L"%02d:%02d", FXSYS_abs(tz.tzHour), tz.tzMinute);
         wsResult += wsTimezone;
       }
     } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) {
-      FX_TIMEZONE tz;
-      pLocale->GetTimeZone(&tz);
+      FX_TIMEZONE tz = pLocale->GetTimeZone();
       if (!bGMT && tz.tzHour != 0 && tz.tzMinute != 0) {
-        if (tz.tzHour < 0) {
-          wsResult += L"-";
-        } else {
-          wsResult += L"+";
-        }
+        wsResult += tz.tzHour < 0 ? L"-" : L"+";
+
         CFX_WideString wsTimezone;
         wsTimezone.Format(L"%02d:%02d", FXSYS_abs(tz.tzHour), tz.tzMinute);
         wsResult += wsTimezone;
@@ -1094,7 +1066,7 @@
           tzDiff.tzHour = 0;
           tzDiff.tzMinute = 0;
           if (str[cc] != 'Z')
-            cc += ParseTimeZone(str + cc, len - cc, tzDiff);
+            cc += ParseTimeZone(str + cc, len - cc, &tzDiff);
           ResolveZone(hour, minute, tzDiff, pLocale);
         }
       }
@@ -1323,12 +1295,12 @@
               break;
             }
           }
-          wsSubCategory.clear();
-          if (!pLocale) {
+          if (!pLocale)
             pLocale = m_pLocaleMgr->GetDefLocale();
-          }
+
           ASSERT(pLocale);
-          pLocale->GetNumPattern(eSubCategory, wsSubCategory);
+
+          wsSubCategory = pLocale->GetNumPattern(eSubCategory);
           iDotIndex = wsSubCategory.Find('.');
           if (iDotIndex > 0) {
             iDotIndex += wsPurgePattern.GetLength();
@@ -1447,25 +1419,24 @@
                                 const CFX_WideString& wsPattern,
                                 CFX_WideString& wsValue) {
   wsValue.clear();
-  if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) {
+  if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty())
     return false;
-  }
+
   int32_t dot_index_f = -1;
   uint32_t dwFormatStyle = 0;
   CFX_WideString wsNumFormat;
   IFX_Locale* pLocale =
       GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat);
-  if (!pLocale || wsNumFormat.IsEmpty()) {
+  if (!pLocale || wsNumFormat.IsEmpty())
     return false;
-  }
+
   int32_t iExponent = 0;
-  CFX_WideString wsDotSymbol;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol);
-  CFX_WideString wsGroupSymbol;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
+  CFX_WideString wsDotSymbol =
+      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
+  CFX_WideString wsGroupSymbol =
+      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   int32_t iGroupLen = wsGroupSymbol.GetLength();
-  CFX_WideString wsMinus;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus);
+  CFX_WideString wsMinus = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus);
   int32_t iMinusLen = wsMinus.GetLength();
   int cc = 0, ccf = 0;
   const wchar_t* str = wsSrcNum.c_str();
@@ -1578,8 +1549,8 @@
         ccf--;
       } break;
       case '$': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol);
+        CFX_WideString wsSymbol =
+            pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
         int32_t iSymbolLen = wsSymbol.GetLength();
         cc -= iSymbolLen - 1;
         if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
@@ -1641,8 +1612,8 @@
       case 'v':
         return false;
       case '%': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
+        CFX_WideString wsSymbol =
+            pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
         int32_t iSysmbolLen = wsSymbol.GetLength();
         cc -= iSysmbolLen - 1;
         if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
@@ -1797,9 +1768,8 @@
           ccf++;
         } break;
         case '$': {
-          CFX_WideString wsSymbol;
-          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol,
-                                     wsSymbol);
+          CFX_WideString wsSymbol =
+              pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
           int32_t iSymbolLen = wsSymbol.GetLength();
           if (cc + iSymbolLen > len ||
               FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
@@ -1853,8 +1823,8 @@
         case 'v':
           return false;
         case '%': {
-          CFX_WideString wsSymbol;
-          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
+          CFX_WideString wsSymbol =
+              pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
           int32_t iSysmbolLen = wsSymbol.GetLength();
           if (cc + iSysmbolLen <= len &&
               !FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
@@ -2013,17 +1983,17 @@
           ASSERT(pLocale);
           switch (eCategory) {
             case FX_LOCALECATEGORY_Date:
-              pLocale->GetDatePattern(eSubCategory, wsDatePattern);
-              wsDatePattern = wsTempPattern + wsDatePattern;
+              wsDatePattern =
+                  wsTempPattern + pLocale->GetDatePattern(eSubCategory);
               break;
             case FX_LOCALECATEGORY_Time:
-              pLocale->GetTimePattern(eSubCategory, wsTimePattern);
-              wsTimePattern = wsTempPattern + wsTimePattern;
+              wsTimePattern =
+                  wsTempPattern + pLocale->GetTimePattern(eSubCategory);
               break;
             case FX_LOCALECATEGORY_DateTime:
-              pLocale->GetDatePattern(eSubCategory, wsDatePattern);
-              wsDatePattern = wsTempPattern + wsDatePattern;
-              pLocale->GetTimePattern(eSubCategory, wsTimePattern);
+              wsDatePattern =
+                  wsTempPattern + pLocale->GetDatePattern(eSubCategory);
+              wsTimePattern = pLocale->GetTimePattern(eSubCategory);
               break;
             default:
               break;
@@ -2310,8 +2280,8 @@
     wsSrcNum.TrimRight(L"0");
     wsSrcNum.TrimRight(L".");
   }
-  CFX_WideString wsGroupSymbol;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
+  CFX_WideString wsGroupSymbol =
+      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   bool bNeg = false;
   if (wsSrcNum[0] == '-') {
     bNeg = true;
@@ -2370,9 +2340,8 @@
         break;
       case 'S':
         if (bNeg) {
-          CFX_WideString wsMinusSymbol;
-          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol);
-          wsOutput = wsMinusSymbol + wsOutput;
+          wsOutput =
+              pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
           bAddNeg = true;
         } else {
           wsOutput = L' ' + wsOutput;
@@ -2381,9 +2350,8 @@
         break;
       case 's':
         if (bNeg) {
-          CFX_WideString wsMinusSymbol;
-          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol);
-          wsOutput = wsMinusSymbol + wsOutput;
+          wsOutput =
+              pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
           bAddNeg = true;
         }
         ccf--;
@@ -2396,9 +2364,9 @@
         ccf--;
         break;
       case '$': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol);
-        wsOutput = wsSymbol + wsOutput;
+        wsOutput =
+            pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol) +
+            wsOutput;
       }
         ccf--;
         break;
@@ -2443,9 +2411,8 @@
         }
         break;
       case '%': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
-        wsOutput = wsSymbol + wsOutput;
+        wsOutput =
+            pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent) + wsOutput;
       }
         ccf--;
         break;
@@ -2491,28 +2458,25 @@
       wsOutput += wsSrcNum[i];
     }
     if (dot_index < len) {
-      CFX_WideString wsSymbol;
-      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol);
-      wsOutput += wsSymbol;
+      wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
       wsOutput += wsSrcNum.Right(len - dot_index - 1);
     }
     if (bNeg) {
-      CFX_WideString wsMinusymbol;
-      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol);
-      wsOutput = wsMinusymbol + wsOutput;
+      wsOutput =
+          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
     }
     return false;
   }
   if (dot_index_f == wsNumFormat.GetLength()) {
     if (!bAddNeg && bNeg) {
-      CFX_WideString wsMinusymbol;
-      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol);
-      wsOutput = wsMinusymbol + wsOutput;
+      wsOutput =
+          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
     }
     return true;
   }
-  CFX_WideString wsDotSymbol;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol);
+
+  CFX_WideString wsDotSymbol =
+      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
   if (strf[dot_index_f] == 'V') {
     wsOutput += wsDotSymbol;
   } else if (strf[dot_index_f] == '.') {
@@ -2570,14 +2534,11 @@
         CFX_WideString wsExp;
         wsExp.Format(L"E%+d", exponent);
         wsOutput += wsExp;
-      }
         ccf++;
-        break;
-      case '$': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol);
-        wsOutput += wsSymbol;
-      }
+      } break;
+      case '$':
+        wsOutput +=
+            pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
         ccf++;
         break;
       case 'c':
@@ -2620,22 +2581,18 @@
           bAddNeg = true;
         }
         break;
-      case '%': {
-        CFX_WideString wsSymbol;
-        pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
-        wsOutput += wsSymbol;
-      }
+      case '%':
+        wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
         ccf++;
         break;
-      case '8': {
-        while (ccf < lenf && strf[ccf] == '8') {
+      case '8':
+        while (ccf < lenf && strf[ccf] == '8')
           ccf++;
-        }
         while (cc < len && FXSYS_isDecimalDigit(str[cc])) {
           wsOutput += str[cc];
           cc++;
         }
-      } break;
+        break;
       case ',':
         wsOutput += wsGroupSymbol;
         ccf++;
@@ -2662,10 +2619,8 @@
     }
   }
   if (!bAddNeg && bNeg) {
-    CFX_WideString wsMinusymbol;
-    pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol);
-    wsOutput =
-        wsMinusymbol + wsOutput[0] + wsOutput.Mid(1, wsOutput.GetLength() - 1);
+    wsOutput = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) +
+               wsOutput[0] + wsOutput.Mid(1, wsOutput.GetLength() - 1);
   }
   return true;
 }
diff --git a/xfa/fgas/localization/fgas_locale.h b/xfa/fgas/localization/fgas_locale.h
index 449430b..5d8ddc0 100644
--- a/xfa/fgas/localization/fgas_locale.h
+++ b/xfa/fgas/localization/fgas_locale.h
@@ -59,25 +59,18 @@
   virtual ~IFX_Locale() {}
 
   virtual CFX_WideString GetName() const = 0;
-  virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType,
-                                 CFX_WideString& wsNumSymbol) const = 0;
-  virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const = 0;
-  virtual void GetMonthName(int32_t nMonth,
-                            CFX_WideString& wsMonthName,
-                            bool bAbbr = true) const = 0;
-  virtual void GetDayName(int32_t nWeek,
-                          CFX_WideString& wsDayName,
-                          bool bAbbr = true) const = 0;
-  virtual void GetMeridiemName(CFX_WideString& wsMeridiemName,
-                               bool bAM = true) const = 0;
-  virtual void GetTimeZone(FX_TIMEZONE* tz) const = 0;
-  virtual void GetEraName(CFX_WideString& wsEraName, bool bAD = true) const = 0;
-  virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                              CFX_WideString& wsPattern) const = 0;
-  virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                              CFX_WideString& wsPattern) const = 0;
-  virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType,
-                             CFX_WideString& wsPattern) const = 0;
+  virtual CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const = 0;
+  virtual CFX_WideString GetDateTimeSymbols() const = 0;
+  virtual CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const = 0;
+  virtual CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const = 0;
+  virtual CFX_WideString GetMeridiemName(bool bAM) const = 0;
+  virtual FX_TIMEZONE GetTimeZone() const = 0;
+  virtual CFX_WideString GetEraName(bool bAD) const = 0;
+  virtual CFX_WideString GetDatePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const = 0;
+  virtual CFX_WideString GetTimePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const = 0;
+  virtual CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const = 0;
 };
 
 bool FX_DateFromCanonical(const CFX_WideString& wsDate, CFX_Unitime* datetime);
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
index 218e58b..83f65ed 100644
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
@@ -1168,13 +1168,10 @@
   int32_t second = uniTime.GetSecond();
   int32_t milSecond = uniTime.GetMillisecond();
 
-  FX_TIMEZONE tzLocale;
-  pMgr->GetDefLocale()->GetTimeZone(&tzLocale);
-
   // TODO(dsinclair): See if there is other time conversion code in pdfium and
   //   consolidate.
   int32_t mins = hour * 60 + min;
-  mins -= (tzLocale.tzHour * 60);
+  mins -= (pMgr->GetDefLocale()->GetTimeZone().tzHour * 60);
   while (mins > 1440)
     mins -= 1440;
   while (mins < 0)
@@ -1568,7 +1565,7 @@
 
   CFX_WideString wsFormat;
   if (formatString.IsEmpty())
-    pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(formatString.AsStringC());
 
@@ -1588,10 +1585,7 @@
   int32_t milSecond = uniTime.GetMillisecond();
   int32_t mins = hour * 60 + min;
 
-  FX_TIMEZONE tz;
-  CXFA_TimeZoneProvider provider;
-  provider.GetTimeZone(&tz);
-  mins -= (tz.tzHour * 60);
+  mins -= (CXFA_TimeZoneProvider().GetTimeZone().tzHour * 60);
   while (mins > 1440)
     mins -= 1440;
 
@@ -1942,7 +1936,7 @@
 
   CFX_WideString wsFormat;
   if (szFormat.IsEmpty())
-    pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(szFormat);
 
@@ -1979,7 +1973,7 @@
 
   CFX_WideString wsFormat;
   if (szFormat.IsEmpty())
-    pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(szFormat);
 
@@ -2017,7 +2011,7 @@
 
   CFX_WideString wsFormat;
   if (szFormat.IsEmpty())
-    pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(szFormat);
 
@@ -2055,7 +2049,7 @@
 
   CFX_WideString wsFormat;
   if (szFormat.IsEmpty())
-    pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(szFormat);
 
@@ -2094,7 +2088,7 @@
 
   CFX_WideString wsFormat;
   if (szFormat.IsEmpty())
-    pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
+    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
     wsFormat = CFX_WideString::FromUTF8(szFormat);
 
@@ -2206,12 +2200,10 @@
   if (!pLocale)
     return;
 
-  CFX_WideString strRet;
-  pLocale->GetDatePattern(strStyle, strRet);
+  CFX_WideString strRet = pLocale->GetDatePattern(strStyle);
   if (!bStandard) {
-    CFX_WideString wsSymbols;
-    pLocale->GetDateTimeSymbols(wsSymbols);
-    AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Date);
+    AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
+                             g_sAltTable_Date);
   }
   strFormat = strRet.UTF8Encode();
 }
@@ -2257,12 +2249,10 @@
   if (!pLocale)
     return;
 
-  CFX_WideString strRet;
-  pLocale->GetTimePattern(strStyle, strRet);
+  CFX_WideString strRet = pLocale->GetTimePattern(strStyle);
   if (!bStandard) {
-    CFX_WideString wsSymbols;
-    pLocale->GetDateTimeSymbols(wsSymbols);
-    AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Time);
+    AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
+                             g_sAltTable_Time);
   }
   strFormat = strRet.UTF8Encode();
 }
diff --git a/xfa/fxfa/parser/cxfa_localevalue.cpp b/xfa/fxfa/parser/cxfa_localevalue.cpp
index 189d7d9..a5238d2 100644
--- a/xfa/fxfa/parser/cxfa_localevalue.cpp
+++ b/xfa/fxfa/parser/cxfa_localevalue.cpp
@@ -940,28 +940,26 @@
     }
     n++;
   }
-  if (n == nCount) {
+  if (n == nCount)
     return true;
-  }
-  if (nf == nCountFmt) {
+  if (nf == nCountFmt)
     return false;
-  }
+
   while (nf < nCountFmt && (cf = pFmt[nf]) != L'.') {
     ASSERT(cf == L'z' || cf == L'*');
     ++nf;
   }
   CFX_WideString wsDecimalSymbol;
-  if (pLocale) {
-    pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDecimalSymbol);
-  } else {
+  if (pLocale)
+    wsDecimalSymbol = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
+  else
     wsDecimalSymbol = CFX_WideString(L'.');
-  }
-  if (pFmt[nf] != L'.') {
+
+  if (pFmt[nf] != L'.')
     return false;
-  }
-  if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.') {
+  if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.')
     return false;
-  }
+
   ++nf;
   ++n;
   bLimit = true;
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.cpp b/xfa/fxfa/parser/cxfa_nodelocale.cpp
index 49d55c8..fac3cc3 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.cpp
+++ b/xfa/fxfa/parser/cxfa_nodelocale.cpp
@@ -35,7 +35,7 @@
     case FX_LOCALENUMPATTERN_Integer:
       return g_FX_Integer;
   }
-  return L"";
+  return CFX_WideString();
 }
 
 CXFA_NodeLocale::CXFA_NodeLocale(CXFA_Node* pLocale) : m_pLocale(pLocale) {}
@@ -47,108 +47,89 @@
                                   : nullptr);
 }
 
-void CXFA_NodeLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType,
-                                        CFX_WideString& wsNumSymbol) const {
+CFX_WideString CXFA_NodeLocale::GetNumbericSymbol(
+    FX_LOCALENUMSYMBOL eType) const {
   switch (eType) {
     case FX_LOCALENUMSYMBOL_Decimal:
-      wsNumSymbol = GetSymbol(XFA_Element::NumberSymbols, L"decimal");
-      break;
+      return GetSymbol(XFA_Element::NumberSymbols, L"decimal");
     case FX_LOCALENUMSYMBOL_Grouping:
-      wsNumSymbol = GetSymbol(XFA_Element::NumberSymbols, L"grouping");
-      break;
+      return GetSymbol(XFA_Element::NumberSymbols, L"grouping");
     case FX_LOCALENUMSYMBOL_Percent:
-      wsNumSymbol = GetSymbol(XFA_Element::NumberSymbols, L"percent");
-      break;
+      return GetSymbol(XFA_Element::NumberSymbols, L"percent");
     case FX_LOCALENUMSYMBOL_Minus:
-      wsNumSymbol = GetSymbol(XFA_Element::NumberSymbols, L"minus");
-      break;
+      return GetSymbol(XFA_Element::NumberSymbols, L"minus");
     case FX_LOCALENUMSYMBOL_Zero:
-      wsNumSymbol = GetSymbol(XFA_Element::NumberSymbols, L"zero");
-      break;
+      return GetSymbol(XFA_Element::NumberSymbols, L"zero");
     case FX_LOCALENUMSYMBOL_CurrencySymbol:
-      wsNumSymbol = GetSymbol(XFA_Element::CurrencySymbols, L"symbol");
-      break;
+      return GetSymbol(XFA_Element::CurrencySymbols, L"symbol");
     case FX_LOCALENUMSYMBOL_CurrencyName:
-      wsNumSymbol = GetSymbol(XFA_Element::CurrencySymbols, L"isoname");
-      break;
+      return GetSymbol(XFA_Element::CurrencySymbols, L"isoname");
   }
+  return CFX_WideString();
 }
 
-void CXFA_NodeLocale::GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const {
+CFX_WideString CXFA_NodeLocale::GetDateTimeSymbols() const {
   CXFA_Node* pSymbols =
       m_pLocale ? m_pLocale->GetChild(0, XFA_Element::DateTimeSymbols)
                 : nullptr;
-  wsDtSymbol = pSymbols ? pSymbols->GetContent() : CFX_WideString();
+  return pSymbols ? pSymbols->GetContent() : CFX_WideString();
 }
 
-void CXFA_NodeLocale::GetMonthName(int32_t nMonth,
-                                   CFX_WideString& wsMonthName,
-                                   bool bAbbr) const {
-  wsMonthName = GetCalendarSymbol(XFA_Element::MonthNames, nMonth, bAbbr);
+CFX_WideString CXFA_NodeLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
+  return GetCalendarSymbol(XFA_Element::MonthNames, nMonth, bAbbr);
 }
 
-void CXFA_NodeLocale::GetDayName(int32_t nWeek,
-                                 CFX_WideString& wsDayName,
-                                 bool bAbbr) const {
-  wsDayName = GetCalendarSymbol(XFA_Element::DayNames, nWeek, bAbbr);
+CFX_WideString CXFA_NodeLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
+  return GetCalendarSymbol(XFA_Element::DayNames, nWeek, bAbbr);
 }
 
-void CXFA_NodeLocale::GetMeridiemName(CFX_WideString& wsMeridiemName,
-                                      bool bAM) const {
-  wsMeridiemName =
-      GetCalendarSymbol(XFA_Element::MeridiemNames, bAM ? 0 : 1, false);
+CFX_WideString CXFA_NodeLocale::GetMeridiemName(bool bAM) const {
+  return GetCalendarSymbol(XFA_Element::MeridiemNames, bAM ? 0 : 1, false);
 }
 
-void CXFA_NodeLocale::GetTimeZone(FX_TIMEZONE* tz) const {
-  CXFA_TimeZoneProvider provider;
-  provider.GetTimeZone(tz);
+FX_TIMEZONE CXFA_NodeLocale::GetTimeZone() const {
+  return CXFA_TimeZoneProvider().GetTimeZone();
 }
 
-void CXFA_NodeLocale::GetEraName(CFX_WideString& wsEraName, bool bAD) const {
-  wsEraName = GetCalendarSymbol(XFA_Element::EraNames, bAD ? 1 : 0, false);
+CFX_WideString CXFA_NodeLocale::GetEraName(bool bAD) const {
+  return GetCalendarSymbol(XFA_Element::EraNames, bAD ? 1 : 0, false);
 }
 
-void CXFA_NodeLocale::GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                                     CFX_WideString& wsPattern) const {
+CFX_WideString CXFA_NodeLocale::GetDatePattern(
+    FX_LOCALEDATETIMESUBCATEGORY eType) const {
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
-      wsPattern = GetSymbol(XFA_Element::DatePatterns, L"short");
-      break;
+      return GetSymbol(XFA_Element::DatePatterns, L"short");
     case FX_LOCALEDATETIMESUBCATEGORY_Medium:
     case FX_LOCALEDATETIMESUBCATEGORY_Default:
-      wsPattern = GetSymbol(XFA_Element::DatePatterns, L"med");
-      break;
+      return GetSymbol(XFA_Element::DatePatterns, L"med");
     case FX_LOCALEDATETIMESUBCATEGORY_Full:
-      wsPattern = GetSymbol(XFA_Element::DatePatterns, L"full");
-      break;
+      return GetSymbol(XFA_Element::DatePatterns, L"full");
     case FX_LOCALEDATETIMESUBCATEGORY_Long:
-      wsPattern = GetSymbol(XFA_Element::DatePatterns, L"long");
-      break;
+      return GetSymbol(XFA_Element::DatePatterns, L"long");
   }
+  return CFX_WideString();
 }
 
-void CXFA_NodeLocale::GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                                     CFX_WideString& wsPattern) const {
+CFX_WideString CXFA_NodeLocale::GetTimePattern(
+    FX_LOCALEDATETIMESUBCATEGORY eType) const {
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
-      wsPattern = GetSymbol(XFA_Element::TimePatterns, L"short");
-      break;
+      return GetSymbol(XFA_Element::TimePatterns, L"short");
     case FX_LOCALEDATETIMESUBCATEGORY_Medium:
     case FX_LOCALEDATETIMESUBCATEGORY_Default:
-      wsPattern = GetSymbol(XFA_Element::TimePatterns, L"med");
-      break;
+      return GetSymbol(XFA_Element::TimePatterns, L"med");
     case FX_LOCALEDATETIMESUBCATEGORY_Full:
-      wsPattern = GetSymbol(XFA_Element::TimePatterns, L"full");
-      break;
+      return GetSymbol(XFA_Element::TimePatterns, L"full");
     case FX_LOCALEDATETIMESUBCATEGORY_Long:
-      wsPattern = GetSymbol(XFA_Element::TimePatterns, L"long");
-      break;
+      return GetSymbol(XFA_Element::TimePatterns, L"long");
   }
+  return CFX_WideString();
 }
 
-void CXFA_NodeLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType,
-                                    CFX_WideString& wsPattern) const {
-  wsPattern = XFA_PatternToString(eType);
+CFX_WideString CXFA_NodeLocale::GetNumPattern(
+    FX_LOCALENUMSUBCATEGORY eType) const {
+  return XFA_PatternToString(eType);
 }
 
 CXFA_Node* CXFA_NodeLocale::GetNodeByName(CXFA_Node* pParent,
@@ -180,13 +161,14 @@
   CXFA_Node* pCalendar =
       m_pLocale ? m_pLocale->GetChild(0, XFA_Element::CalendarSymbols)
                 : nullptr;
-  if (pCalendar) {
-    CXFA_Node* pNode = pCalendar->GetFirstChildByClass(eElement);
-    for (; pNode; pNode = pNode->GetNextSameClassSibling(eElement)) {
-      if (pNode->GetBoolean(XFA_ATTRIBUTE_Abbr) == bAbbr) {
-        CXFA_Node* pSymbol = pNode->GetChild(index, XFA_Element::Unknown);
-        return pSymbol ? pSymbol->GetContent() : CFX_WideString();
-      }
+  if (!pCalendar)
+    return CFX_WideString();
+
+  CXFA_Node* pNode = pCalendar->GetFirstChildByClass(eElement);
+  for (; pNode; pNode = pNode->GetNextSameClassSibling(eElement)) {
+    if (pNode->GetBoolean(XFA_ATTRIBUTE_Abbr) == bAbbr) {
+      CXFA_Node* pSymbol = pNode->GetChild(index, XFA_Element::Unknown);
+      return pSymbol ? pSymbol->GetContent() : CFX_WideString();
     }
   }
   return CFX_WideString();
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.h b/xfa/fxfa/parser/cxfa_nodelocale.h
index db3b230..0059d19 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.h
+++ b/xfa/fxfa/parser/cxfa_nodelocale.h
@@ -21,27 +21,20 @@
 
   // IFX_Locale
   CFX_WideString GetName() const override;
-  void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType,
-                         CFX_WideString& wsNumSymbol) const override;
+  CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
 
-  void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const override;
-  void GetMonthName(int32_t nMonth,
-                    CFX_WideString& wsMonthName,
-                    bool bAbbr = true) const override;
-  void GetDayName(int32_t nWeek,
-                  CFX_WideString& wsDayName,
-                  bool bAbbr = true) const override;
-  void GetMeridiemName(CFX_WideString& wsMeridiemName,
-                       bool bAM = true) const override;
-  void GetTimeZone(FX_TIMEZONE* tz) const override;
-  void GetEraName(CFX_WideString& wsEraName, bool bAD = true) const override;
+  CFX_WideString GetDateTimeSymbols() const override;
+  CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
+  CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
+  CFX_WideString GetMeridiemName(bool bAM) const override;
+  FX_TIMEZONE GetTimeZone() const override;
+  CFX_WideString GetEraName(bool bAD) const override;
 
-  void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                      CFX_WideString& wsPattern) const override;
-  void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                      CFX_WideString& wsPattern) const override;
-  void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType,
-                     CFX_WideString& wsPattern) const override;
+  CFX_WideString GetDatePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  CFX_WideString GetTimePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
 
  private:
   CXFA_Node* GetNodeByName(CXFA_Node* pParent,
diff --git a/xfa/fxfa/parser/cxfa_timezoneprovider.cpp b/xfa/fxfa/parser/cxfa_timezoneprovider.cpp
index 65ce61e..ae31977 100644
--- a/xfa/fxfa/parser/cxfa_timezoneprovider.cpp
+++ b/xfa/fxfa/parser/cxfa_timezoneprovider.cpp
@@ -30,7 +30,3 @@
 }
 
 CXFA_TimeZoneProvider::~CXFA_TimeZoneProvider() {}
-
-void CXFA_TimeZoneProvider::GetTimeZone(FX_TIMEZONE* tz) const {
-  *tz = m_tz;
-}
diff --git a/xfa/fxfa/parser/cxfa_timezoneprovider.h b/xfa/fxfa/parser/cxfa_timezoneprovider.h
index 05230cc..493da32 100644
--- a/xfa/fxfa/parser/cxfa_timezoneprovider.h
+++ b/xfa/fxfa/parser/cxfa_timezoneprovider.h
@@ -14,7 +14,7 @@
   CXFA_TimeZoneProvider();
   ~CXFA_TimeZoneProvider();
 
-  void GetTimeZone(FX_TIMEZONE* tz) const;
+  FX_TIMEZONE GetTimeZone() const { return m_tz; }
 
  private:
   FX_TIMEZONE m_tz;
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index e6cd75f..6da501b 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -1486,7 +1486,7 @@
             return true;
         }
       }
-      CFX_WideString wsDataPicture, wsTimePicture;
+
       IFX_Locale* pLocale = GetLocal();
       if (!pLocale)
         return false;
@@ -1494,19 +1494,18 @@
       uint32_t dwType = widgetValue.GetType();
       switch (dwType) {
         case XFA_VT_DATE:
-          pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium,
-                                  wsPicture);
+          wsPicture =
+              pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium);
           break;
         case XFA_VT_TIME:
-          pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium,
-                                  wsPicture);
+          wsPicture =
+              pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium);
           break;
         case XFA_VT_DATETIME:
-          pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium,
-                                  wsDataPicture);
-          pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium,
-                                  wsTimePicture);
-          wsPicture = wsDataPicture + L"T" + wsTimePicture;
+          wsPicture =
+              pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium) +
+              L"T" +
+              pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium);
           break;
         case XFA_VT_DECIMAL:
         case XFA_VT_FLOAT:
@@ -1516,7 +1515,6 @@
       }
       return true;
     }
-
     case XFA_VALUEPICTURE_Edit: {
       CXFA_Node* pUI = m_pNode->GetChild(0, XFA_Element::Ui);
       if (pUI) {
@@ -1525,32 +1523,29 @@
             return true;
         }
       }
-      {
-        CFX_WideString wsDataPicture, wsTimePicture;
-        IFX_Locale* pLocale = GetLocal();
-        if (!pLocale) {
-          return false;
-        }
-        uint32_t dwType = widgetValue.GetType();
-        switch (dwType) {
-          case XFA_VT_DATE:
-            pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short,
-                                    wsPicture);
-            break;
-          case XFA_VT_TIME:
-            pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short,
-                                    wsPicture);
-            break;
-          case XFA_VT_DATETIME:
-            pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short,
-                                    wsDataPicture);
-            pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short,
-                                    wsTimePicture);
-            wsPicture = wsDataPicture + L"T" + wsTimePicture;
-            break;
-          default:
-            break;
-        }
+
+      IFX_Locale* pLocale = GetLocal();
+      if (!pLocale)
+        return false;
+
+      uint32_t dwType = widgetValue.GetType();
+      switch (dwType) {
+        case XFA_VT_DATE:
+          wsPicture =
+              pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short);
+          break;
+        case XFA_VT_TIME:
+          wsPicture =
+              pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short);
+          break;
+        case XFA_VT_DATETIME:
+          wsPicture =
+              pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short) +
+              L"T" +
+              pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short);
+          break;
+        default:
+          break;
       }
       return true;
     }
@@ -1783,8 +1778,8 @@
     return;
 
   CFX_WideString wsSrcNum = wsValue;
-  CFX_WideString wsGroupSymbol;
-  pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
+  CFX_WideString wsGroupSymbol =
+      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   bool bNeg = false;
   if (wsSrcNum[0] == '-') {
     bNeg = true;
@@ -1806,15 +1801,12 @@
       wsOutput += wsSrcNum[i];
     }
     if (dot_index < len) {
-      CFX_WideString wsSymbol;
-      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol);
-      wsOutput += wsSymbol;
+      wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
       wsOutput += wsSrcNum.Right(len - dot_index - 1);
     }
     if (bNeg) {
-      CFX_WideString wsMinusymbol;
-      pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol);
-      wsOutput = wsMinusymbol + wsOutput;
+      wsOutput =
+          pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
     }
   }
 }
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.cpp b/xfa/fxfa/parser/cxfa_xmllocale.cpp
index c4aae15..cbac777 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.cpp
+++ b/xfa/fxfa/parser/cxfa_xmllocale.cpp
@@ -25,8 +25,8 @@
   return m_pLocaleData ? m_pLocaleData->GetAttrValue("name") : CFX_WideString();
 }
 
-void CXFA_XMLLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType,
-                                       CFX_WideString& wsNumSymbol) const {
+CFX_WideString CXFA_XMLLocale::GetNumbericSymbol(
+    FX_LOCALENUMSYMBOL eType) const {
   CFX_ByteString bsSymbols;
   CFX_WideString wsName;
   switch (eType) {
@@ -59,87 +59,77 @@
       wsName = L"isoname";
       break;
     default:
-      return;
+      return CFX_WideString();
   }
   CXML_Element* pElement = m_pLocaleData->GetElement("", bsSymbols.AsStringC());
   if (!pElement)
-    return;
+    return CFX_WideString();
 
-  GetPattern(pElement,
-             CFX_ByteStringC(bsSymbols.c_str(), bsSymbols.GetLength() - 1),
-             wsName.AsStringC(), wsNumSymbol);
+  return GetPattern(
+      pElement, CFX_ByteStringC(bsSymbols.c_str(), bsSymbols.GetLength() - 1),
+      wsName.AsStringC());
 }
 
-void CXFA_XMLLocale::GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const {
+CFX_WideString CXFA_XMLLocale::GetDateTimeSymbols() const {
   if (!m_pLocaleData)
-    return;
+    return CFX_WideString();
 
   CFX_ByteString bsSpace;
   CXML_Element* pNumberSymbols =
       m_pLocaleData->GetElement(bsSpace.AsStringC(), "dateTimeSymbols");
-  if (!pNumberSymbols)
-    return;
-
-  wsDtSymbol = pNumberSymbols->GetContent(0);
+  return pNumberSymbols ? pNumberSymbols->GetContent(0) : CFX_WideString();
 }
 
-void CXFA_XMLLocale::GetMonthName(int32_t nMonth,
-                                  CFX_WideString& wsMonthName,
-                                  bool bAbbr) const {
-  wsMonthName = GetCalendarSymbol("month", nMonth, bAbbr);
+CFX_WideString CXFA_XMLLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
+  return GetCalendarSymbol("month", nMonth, bAbbr);
 }
 
-void CXFA_XMLLocale::GetDayName(int32_t nWeek,
-                                CFX_WideString& wsDayName,
-                                bool bAbbr) const {
-  wsDayName = GetCalendarSymbol("day", nWeek, bAbbr);
+CFX_WideString CXFA_XMLLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
+  return GetCalendarSymbol("day", nWeek, bAbbr);
 }
 
-void CXFA_XMLLocale::GetMeridiemName(CFX_WideString& wsMeridiemName,
-                                     bool bAM) const {
-  wsMeridiemName = GetCalendarSymbol("meridiem", bAM ? 0 : 1, false);
+CFX_WideString CXFA_XMLLocale::GetMeridiemName(bool bAM) const {
+  return GetCalendarSymbol("meridiem", bAM ? 0 : 1, false);
 }
 
-void CXFA_XMLLocale::GetTimeZone(FX_TIMEZONE* tz) const {
-  CXFA_TimeZoneProvider provider;
-  provider.GetTimeZone(tz);
+FX_TIMEZONE CXFA_XMLLocale::GetTimeZone() const {
+  return CXFA_TimeZoneProvider().GetTimeZone();
 }
 
-void CXFA_XMLLocale::GetEraName(CFX_WideString& wsEraName, bool bAD) const {
-  wsEraName = GetCalendarSymbol("era", bAD ? 1 : 0, false);
+CFX_WideString CXFA_XMLLocale::GetEraName(bool bAD) const {
+  return GetCalendarSymbol("era", bAD ? 1 : 0, false);
 }
 
 CFX_WideString CXFA_XMLLocale::GetCalendarSymbol(const CFX_ByteStringC& symbol,
                                                  int index,
                                                  bool bAbbr) const {
+  if (!m_pLocaleData)
+    return CFX_WideString();
+
+  CXML_Element* pChild = m_pLocaleData->GetElement("", "calendarSymbols");
+  if (!pChild)
+    return CFX_WideString();
+
   CFX_ByteString pstrSymbolNames = symbol + "Names";
-  CFX_WideString wsSymbolName = L"";
-  if (m_pLocaleData) {
-    CXML_Element* pChild = m_pLocaleData->GetElement("", "calendarSymbols");
-    if (pChild) {
-      CXML_Element* pSymbolNames =
-          pChild->GetElement("", pstrSymbolNames.AsStringC());
-      if (pSymbolNames) {
-        if ((!!pSymbolNames->GetAttrInteger("abbr")) != bAbbr) {
-          pSymbolNames = pChild->GetElement("", pstrSymbolNames.AsStringC(), 1);
-        }
-        if (pSymbolNames && (!!pSymbolNames->GetAttrInteger("abbr")) == bAbbr) {
-          CXML_Element* pSymbolName =
-              pSymbolNames->GetElement("", symbol, index);
-          if (pSymbolName)
-            wsSymbolName = pSymbolName->GetContent(0);
-        }
-      }
-    }
-  }
-  return wsSymbolName;
+  CXML_Element* pSymbolNames =
+      pChild->GetElement("", pstrSymbolNames.AsStringC());
+  if (!pSymbolNames)
+    return CFX_WideString();
+  if ((!!pSymbolNames->GetAttrInteger("abbr")) != bAbbr)
+    pSymbolNames = pChild->GetElement("", pstrSymbolNames.AsStringC(), 1);
+
+  if (!pSymbolNames || (!!pSymbolNames->GetAttrInteger("abbr")) != bAbbr)
+    return CFX_WideString();
+
+  CXML_Element* pSymbolName = pSymbolNames->GetElement("", symbol, index);
+  return pSymbolName ? pSymbolName->GetContent(0) : CFX_WideString();
 }
 
-void CXFA_XMLLocale::GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                                    CFX_WideString& wsPattern) const {
+CFX_WideString CXFA_XMLLocale::GetDatePattern(
+    FX_LOCALEDATETIMESUBCATEGORY eType) const {
   CXML_Element* pElement = m_pLocaleData->GetElement("", "datePatterns");
   if (!pElement)
-    return;
+    return CFX_WideString();
 
   CFX_WideString wsName;
   switch (eType) {
@@ -157,14 +147,14 @@
       wsName = L"long";
       break;
   }
-  GetPattern(pElement, "datePattern", wsName.AsStringC(), wsPattern);
+  return GetPattern(pElement, "datePattern", wsName.AsStringC());
 }
 
-void CXFA_XMLLocale::GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                                    CFX_WideString& wsPattern) const {
+CFX_WideString CXFA_XMLLocale::GetTimePattern(
+    FX_LOCALEDATETIMESUBCATEGORY eType) const {
   CXML_Element* pElement = m_pLocaleData->GetElement("", "timePatterns");
   if (!pElement)
-    return;
+    return CFX_WideString();
 
   CFX_WideString wsName;
   switch (eType) {
@@ -182,28 +172,24 @@
       wsName = L"long";
       break;
   }
-  GetPattern(pElement, "timePattern", wsName.AsStringC(), wsPattern);
+  return GetPattern(pElement, "timePattern", wsName.AsStringC());
 }
 
-void CXFA_XMLLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType,
-                                   CFX_WideString& wsPattern) const {
-  CXML_Element* pElement = m_pLocaleData->GetElement("", "numberPatterns");
-  if (!pElement)
-    return;
-
-  wsPattern = XFA_PatternToString(eType);
+CFX_WideString CXFA_XMLLocale::GetNumPattern(
+    FX_LOCALENUMSUBCATEGORY eType) const {
+  return m_pLocaleData->GetElement("", "numberPatterns")
+             ? XFA_PatternToString(eType)
+             : CFX_WideString();
 }
 
-void CXFA_XMLLocale::GetPattern(CXML_Element* pElement,
-                                const CFX_ByteStringC& bsTag,
-                                const CFX_WideStringC& wsName,
-                                CFX_WideString& wsPattern) const {
+CFX_WideString CXFA_XMLLocale::GetPattern(CXML_Element* pElement,
+                                          const CFX_ByteStringC& bsTag,
+                                          const CFX_WideStringC& wsName) const {
   int32_t iCount = pElement->CountElements("", bsTag);
   for (int32_t i = 0; i < iCount; i++) {
     CXML_Element* pChild = pElement->GetElement("", bsTag, i);
-    if (pChild->GetAttrValue("name") == wsName) {
-      wsPattern = pChild->GetContent(0);
-      return;
-    }
+    if (pChild->GetAttrValue("name") == wsName)
+      return pChild->GetContent(0);
   }
+  return CFX_WideString();
 }
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.h b/xfa/fxfa/parser/cxfa_xmllocale.h
index b631697..7616c11 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.h
+++ b/xfa/fxfa/parser/cxfa_xmllocale.h
@@ -19,33 +19,25 @@
 
   // IFX_Locale
   CFX_WideString GetName() const override;
-  void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType,
-                         CFX_WideString& wsNumSymbol) const override;
+  CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
 
-  void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const override;
-  void GetMonthName(int32_t nMonth,
-                    CFX_WideString& wsMonthName,
-                    bool bAbbr = true) const override;
-  void GetDayName(int32_t nWeek,
-                  CFX_WideString& wsDayName,
-                  bool bAbbr = true) const override;
-  void GetMeridiemName(CFX_WideString& wsMeridiemName,
-                       bool bAM = true) const override;
-  void GetTimeZone(FX_TIMEZONE* tz) const override;
-  void GetEraName(CFX_WideString& wsEraName, bool bAD = true) const override;
+  CFX_WideString GetDateTimeSymbols() const override;
+  CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
+  CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
+  CFX_WideString GetMeridiemName(bool bAM) const override;
+  FX_TIMEZONE GetTimeZone() const override;
+  CFX_WideString GetEraName(bool bAD) const override;
 
-  void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                      CFX_WideString& wsPattern) const override;
-  void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType,
-                      CFX_WideString& wsPattern) const override;
-  void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType,
-                     CFX_WideString& wsPattern) const override;
+  CFX_WideString GetDatePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  CFX_WideString GetTimePattern(
+      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
 
  private:
-  void GetPattern(CXML_Element* pElement,
-                  const CFX_ByteStringC& bsTag,
-                  const CFX_WideStringC& wsName,
-                  CFX_WideString& wsPattern) const;
+  CFX_WideString GetPattern(CXML_Element* pElement,
+                            const CFX_ByteStringC& bsTag,
+                            const CFX_WideStringC& wsName) const;
   CFX_WideString GetCalendarSymbol(const CFX_ByteStringC& symbol,
                                    int index,
                                    bool bAbbr) const;