summaryrefslogtreecommitdiff
path: root/xfa/fgas/crt
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fgas/crt')
-rw-r--r--xfa/fgas/crt/cfgas_formatstring.cpp789
-rw-r--r--xfa/fgas/crt/cfgas_formatstring.h7
2 files changed, 382 insertions, 414 deletions
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index 30dba7bf99..aa8f53aaf0 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -21,6 +21,10 @@
#define FX_LOCALECATEGORY_ZeroHash 0x568cb500
#define FX_LOCALECATEGORY_NullHash 0x052931bb
+#define FX_NUMSTYLE_Percent 0x01
+#define FX_NUMSTYLE_Exponent 0x02
+#define FX_NUMSTYLE_DotVorv 0x04
+
namespace {
struct FX_LOCALESUBCATEGORYINFO {
@@ -126,9 +130,9 @@ CFX_WideString GetLiteralText(const wchar_t* pStrPattern,
wchar_t ch = pStrPattern[iPattern++];
iKeyValue = ConvertHex(iKeyValue, ch);
}
- if (iKeyValue != 0) {
- wsOutput += (wchar_t)(iKeyValue & 0x0000FFFF);
- }
+ if (iKeyValue != 0)
+ wsOutput += static_cast<wchar_t>(iKeyValue & 0x0000FFFF);
+
continue;
}
wsOutput += pStrPattern[iPattern++];
@@ -139,9 +143,9 @@ CFX_WideString GetLiteralText(const wchar_t* pStrPattern,
CFX_WideString GetLiteralTextReverse(const wchar_t* pStrPattern,
int32_t& iPattern) {
CFX_WideString wsOutput;
- if (pStrPattern[iPattern] != '\'') {
+ if (pStrPattern[iPattern] != '\'')
return wsOutput;
- }
+
iPattern--;
int32_t iQuote = 1;
while (iPattern >= 0) {
@@ -192,11 +196,11 @@ bool GetNumericDotIndex(const CFX_WideString& wsNum,
ccf++;
}
iDotIndex = wsNum.Find('.');
- if (iDotIndex < 0) {
- iDotIndex = iLenf;
- return false;
- }
- return true;
+ if (iDotIndex >= 0)
+ return true;
+
+ iDotIndex = iLenf;
+ return false;
}
bool ParseLocaleDate(const CFX_WideString& wsDate,
@@ -239,21 +243,19 @@ bool ParseLocaleDate(const CFX_WideString& wsDate,
}
uint32_t dwSymbol = (dwCharSymbol << 8) | (dwSymbolNum + '0');
if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
day = str[cc++] - '0';
- if (cc < len && FXSYS_isDecimalDigit(str[cc])) {
+ if (cc < len && FXSYS_isDecimalDigit(str[cc]))
day = day * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'D', '2')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
day = str[cc++] - '0';
- if (cc < len) {
+ if (cc < len)
day = day * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '1')) {
int i = 0;
while (cc < len && i < 3 && FXSYS_isDecimalDigit(str[cc])) {
@@ -263,21 +265,19 @@ bool ParseLocaleDate(const CFX_WideString& wsDate,
} else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '3')) {
cc += 3;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
month = str[cc++] - '0';
- if (cc < len && FXSYS_isDecimalDigit(str[cc])) {
+ if (cc < len && FXSYS_isDecimalDigit(str[cc]))
month = month * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
month = str[cc++] - '0';
- if (cc < len) {
+ if (cc < len)
month = month * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) {
CFX_WideString wsMonthNameAbbr;
uint16_t i = 0;
@@ -301,9 +301,8 @@ bool ParseLocaleDate(const CFX_WideString& wsDate,
wsMonthName = pLocale->GetMonthName(i, false);
if (wsMonthName.IsEmpty())
continue;
- if (!wcsncmp(wsMonthName.c_str(), str + cc, wsMonthName.GetLength())) {
+ if (!wcsncmp(wsMonthName.c_str(), str + cc, wsMonthName.GetLength()))
break;
- }
}
if (i < 12) {
cc += wsMonthName.GetLength();
@@ -323,9 +322,8 @@ bool ParseLocaleDate(const CFX_WideString& wsDate,
break;
}
}
- if (i < 12) {
+ if (i < 12)
cc += wsDayNameAbbr.GetLength();
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) {
CFX_WideString wsDayName;
int32_t i = 0;
@@ -333,44 +331,38 @@ bool ParseLocaleDate(const CFX_WideString& wsDate,
wsDayName = pLocale->GetDayName(i, false);
if (wsDayName == L"")
continue;
- if (!wcsncmp(wsDayName.c_str(), str + cc, wsDayName.GetLength())) {
+ if (!wcsncmp(wsDayName.c_str(), str + cc, wsDayName.GetLength()))
break;
- }
}
- if (i < 12) {
+ if (i < 12)
cc += wsDayName.GetLength();
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) {
cc += 1;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) {
cc += 2;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '2')) {
- if (cc + 2 > len) {
- return false;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (cc + 2 > len || !FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
year = str[cc++] - '0';
- if (cc >= len || !FXSYS_isDecimalDigit(str[cc])) {
+ if (cc >= len || !FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
year = year * 10 + str[cc++] - '0';
- if (year <= 29) {
+ if (year <= 29)
year += 2000;
- } else {
+ else
year += 1900;
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '4')) {
int i = 0;
year = 0;
- if (cc + 4 > len) {
+ if (cc + 4 > len)
return false;
- }
+
while (i < 4) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
year = year * 10 + str[cc] - '0';
cc++;
i++;
@@ -398,12 +390,11 @@ void ResolveZone(uint8_t& wHour,
(tzLocale.tzHour < 0 ? -tzLocale.tzMinute : tzLocale.tzMinute);
iMinuteDiff -= tzDiff.tzHour * 60 +
(tzDiff.tzHour < 0 ? -tzDiff.tzMinute : tzDiff.tzMinute);
- while (iMinuteDiff > 1440) {
+ while (iMinuteDiff > 1440)
iMinuteDiff -= 1440;
- }
- while (iMinuteDiff < 0) {
+ while (iMinuteDiff < 0)
iMinuteDiff += 1440;
- }
+
wHour = iMinuteDiff / 60;
wMinute = iMinuteDiff % 60;
}
@@ -436,19 +427,22 @@ bool ParseLocaleTime(const CFX_WideString& wsTime,
cc += iLiteralLen;
ccf++;
continue;
- } else if (wsTimeSymbols.Find(strf[ccf]) == -1) {
+ }
+ if (wsTimeSymbols.Find(strf[ccf]) == -1) {
if (strf[ccf] != str[cc])
return false;
cc++;
ccf++;
continue;
}
+
uint32_t dwSymbolNum = 1;
wchar_t dwCharSymbol = strf[ccf++];
while (ccf < lenf && strf[ccf] == dwCharSymbol) {
ccf++;
dwSymbolNum++;
}
+
uint32_t dwSymbol = (dwCharSymbol << 8) | (dwSymbolNum + '0');
if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1') ||
dwSymbol == FXBSTR_ID(0, 0, 'H', '1') ||
@@ -458,79 +452,71 @@ bool ParseLocaleTime(const CFX_WideString& wsTime,
return false;
}
hour = str[cc++] - '0';
- if (cc < len && FXSYS_isDecimalDigit(str[cc])) {
+ if (cc < len && FXSYS_isDecimalDigit(str[cc]))
hour = hour * 10 + str[cc++] - '0';
- }
- if (dwSymbol == FXBSTR_ID(0, 0, 'K', '1') && hour == 24) {
+ if (dwSymbol == FXBSTR_ID(0, 0, 'K', '1') && hour == 24)
hour = 0;
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '2') ||
dwSymbol == FXBSTR_ID(0, 0, 'H', '2') ||
dwSymbol == FXBSTR_ID(0, 0, 'h', '2') ||
dwSymbol == FXBSTR_ID(0, 0, 'K', '2')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
hour = str[cc++] - '0';
- if (cc >= len) {
+ if (cc >= len)
return false;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
hour = hour * 10 + str[cc++] - '0';
- if (dwSymbol == FXBSTR_ID(0, 0, 'K', '2') && hour == 24) {
+ if (dwSymbol == FXBSTR_ID(0, 0, 'K', '2') && hour == 24)
hour = 0;
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
minute = str[cc++] - '0';
- if (cc < len && FXSYS_isDecimalDigit(str[cc])) {
+ if (cc < len && FXSYS_isDecimalDigit(str[cc]))
minute = minute * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
minute = str[cc++] - '0';
- if (cc >= len) {
+ if (cc >= len)
return false;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
minute = minute * 10 + str[cc++] - '0';
} else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '1')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
second = str[cc++] - '0';
- if (cc < len && FXSYS_isDecimalDigit(str[cc])) {
+ if (cc < len && FXSYS_isDecimalDigit(str[cc]))
second = second * 10 + str[cc++] - '0';
- }
} else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '2')) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
second = str[cc++] - '0';
- if (cc >= len) {
+ if (cc >= len)
return false;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
second = second * 10 + str[cc++] - '0';
} else if (dwSymbol == FXBSTR_ID(0, 0, 'F', '3')) {
- if (cc + 3 >= len) {
+ if (cc + 3 >= len)
return false;
- }
+
int i = 0;
while (i < 3) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
millisecond = millisecond * 10 + str[cc++] - '0';
i++;
}
@@ -548,9 +534,9 @@ bool ParseLocaleTime(const CFX_WideString& wsTime,
bPM = true;
}
} else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) {
- if (cc + 3 > len) {
+ if (cc + 3 > len)
continue;
- }
+
uint32_t dwHash = str[cc++];
dwHash = (dwHash << 8) | str[cc++];
dwHash = (dwHash << 8) | str[cc++];
@@ -588,13 +574,11 @@ bool ParseLocaleTime(const CFX_WideString& wsTime,
if (bHasA) {
if (bPM) {
hour += 12;
- if (hour == 24) {
+ if (hour == 24)
hour = 12;
- }
} else {
- if (hour == 12) {
+ if (hour == 12)
hour = 0;
- }
}
}
datetime->SetTime(hour, minute, second, millisecond);
@@ -679,10 +663,12 @@ bool DateFormat(const CFX_WideString& wsDatePattern,
wsResult += GetLiteralText(strf, ccf, lenf);
ccf++;
continue;
- } else if (wsDateSymbols.Find(strf[ccf]) == -1) {
+ }
+ if (wsDateSymbols.Find(strf[ccf]) == -1) {
wsResult += strf[ccf++];
continue;
}
+
uint32_t dwSymbolNum = 1;
wchar_t dwCharSymbol = strf[ccf++];
while (ccf < lenf && strf[ccf] == dwCharSymbol) {
@@ -700,18 +686,18 @@ bool DateFormat(const CFX_WideString& wsDatePattern,
wsResult += wsDay;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '1')) {
uint16_t nDays = 0;
- for (int i = 1; i < month; i++) {
+ for (int i = 1; i < month; i++)
nDays += GetSolarMonthDays(year, i);
- }
+
nDays += day;
CFX_WideString wsDays;
wsDays.Format(L"%d", nDays);
wsResult += wsDays;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '3')) {
uint16_t nDays = 0;
- for (int i = 1; i < month; i++) {
+ for (int i = 1; i < month; i++)
nDays += GetSolarMonthDays(year, i);
- }
+
nDays += day;
CFX_WideString wsDays;
wsDays.Format(L"%03d", nDays);
@@ -786,20 +772,22 @@ bool TimeFormat(const CFX_WideString& wsTimePattern,
uint16_t wHour = hour;
bool bPM = false;
if (wsTimePattern.Find('A') != -1) {
- if (wHour >= 12) {
+ if (wHour >= 12)
bPM = true;
- }
}
+
CFX_WideStringC wsTimeSymbols(gs_wsTimeSymbols);
while (ccf < lenf) {
if (strf[ccf] == '\'') {
wsResult += GetLiteralText(strf, ccf, lenf);
ccf++;
continue;
- } else if (wsTimeSymbols.Find(strf[ccf]) == -1) {
+ }
+ if (wsTimeSymbols.Find(strf[ccf]) == -1) {
wsResult += strf[ccf++];
continue;
}
+
uint32_t dwSymbolNum = 1;
wchar_t dwCharSymbol = strf[ccf++];
while (ccf < lenf && strf[ccf] == dwCharSymbol) {
@@ -808,16 +796,16 @@ bool TimeFormat(const CFX_WideString& wsTimePattern,
}
uint32_t dwSymbol = (dwCharSymbol << 8) | (dwSymbolNum + '0');
if (dwSymbol == FXBSTR_ID(0, 0, 'h', '1')) {
- if (wHour > 12) {
+ if (wHour > 12)
wHour -= 12;
- }
+
CFX_WideString wsHour;
wsHour.Format(L"%d", wHour == 0 ? 12 : wHour);
wsResult += wsHour;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'h', '2')) {
- if (wHour > 12) {
+ if (wHour > 12)
wHour -= 12;
- }
+
CFX_WideString wsHour;
wsHour.Format(L"%02d", wHour == 0 ? 12 : wHour);
wsResult += wsHour;
@@ -830,9 +818,9 @@ bool TimeFormat(const CFX_WideString& wsTimePattern,
wsHour.Format(L"%02d", wHour == 0 ? 24 : wHour);
wsResult += wsHour;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1')) {
- if (wHour > 12) {
+ if (wHour > 12)
wHour -= 12;
- }
+
CFX_WideString wsHour;
wsHour.Format(L"%d", wHour);
wsResult += wsHour;
@@ -841,9 +829,9 @@ bool TimeFormat(const CFX_WideString& wsTimePattern,
wsHour.Format(L"%d", wHour);
wsResult += wsHour;
} else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '2')) {
- if (wHour > 12) {
+ if (wHour > 12)
wHour -= 12;
- }
+
CFX_WideString wsHour;
wsHour.Format(L"%02d", wHour);
wsResult += wsHour;
@@ -922,74 +910,67 @@ bool FX_DateFromCanonical(const CFX_WideString& wsDate,
int32_t month = 1;
int32_t day = 1;
uint16_t wYear = 0;
- int cc_start = 0, cc = 0;
+ int cc_start = 0;
+ int cc = 0;
const wchar_t* str = wsDate.c_str();
int len = wsDate.GetLength();
- if (len > 10) {
+ if (len > 10)
return false;
- }
+
while (cc < len && cc < 4) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wYear = wYear * 10 + str[cc++] - '0';
}
year = wYear;
- if (cc < 4 || wYear < 1900) {
+ if (cc < 4 || wYear < 1900)
return false;
- }
if (cc < len) {
- if (str[cc] == '-') {
+ if (str[cc] == '-')
cc++;
- }
+
cc_start = cc;
uint8_t tmpM = 0;
while (cc < len && cc < cc_start + 2) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
tmpM = tmpM * 10 + str[cc++] - '0';
}
month = tmpM;
- if (cc == cc_start + 1 || tmpM > 12 || tmpM < 1) {
+ if (cc == cc_start + 1 || tmpM > 12 || tmpM < 1)
return false;
- }
if (cc < len) {
- if (str[cc] == '-') {
+ if (str[cc] == '-')
cc++;
- }
+
uint8_t tmpD = 0;
cc_start = cc;
while (cc < len && cc < cc_start + 2) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
tmpD = tmpD * 10 + str[cc++] - '0';
}
day = tmpD;
- if (tmpD < 1) {
+ if (tmpD < 1)
return false;
- }
if ((tmpM == 1 || tmpM == 3 || tmpM == 5 || tmpM == 7 || tmpM == 8 ||
tmpM == 10 || tmpM == 12) &&
tmpD > 31) {
return false;
}
- if ((tmpM == 4 || tmpM == 6 || tmpM == 9 || tmpM == 11) && tmpD > 30) {
+ if ((tmpM == 4 || tmpM == 6 || tmpM == 9 || tmpM == 11) && tmpD > 30)
return false;
- }
- bool iLeapYear;
- if ((wYear % 4 == 0 && wYear % 100 != 0) || wYear % 400 == 0) {
- iLeapYear = true;
- } else {
- iLeapYear = false;
- }
- if ((iLeapYear && tmpM == 2 && tmpD > 29) ||
- (!iLeapYear && tmpM == 2 && tmpD > 28)) {
+
+ bool iLeapYear =
+ ((wYear % 4 == 0 && wYear % 100 != 0) || wYear % 400 == 0);
+ if (tmpM == 2 && tmpD > (iLeapYear ? 29 : 28))
return false;
- }
}
}
+
datetime->SetDate(year, month, day);
return true;
}
@@ -1004,54 +985,52 @@ bool FX_TimeFromCanonical(const CFX_WideStringC& wsTime,
uint8_t minute = 0;
uint8_t second = 0;
uint16_t millisecond = 0;
- int cc_start = 0, cc = cc_start;
+ int cc_start = 0;
+ int cc = 0;
const wchar_t* str = wsTime.c_str();
int len = wsTime.GetLength();
while (cc < len && cc < 2) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
hour = hour * 10 + str[cc++] - '0';
}
- if (cc < 2 || hour >= 24) {
+ if (cc < 2 || hour >= 24)
return false;
- }
if (cc < len) {
- if (str[cc] == ':') {
+ if (str[cc] == ':')
cc++;
- }
+
cc_start = cc;
while (cc < len && cc < cc_start + 2) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
minute = minute * 10 + str[cc++] - '0';
}
- if (cc == cc_start + 1 || minute >= 60) {
+ if (cc == cc_start + 1 || minute >= 60)
return false;
- }
if (cc < len) {
- if (str[cc] == ':') {
+ if (str[cc] == ':')
cc++;
- }
+
cc_start = cc;
while (cc < len && cc < cc_start + 2) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
second = second * 10 + str[cc++] - '0';
}
- if (cc == cc_start + 1 || second >= 60) {
+ if (cc == cc_start + 1 || second >= 60)
return false;
- }
if (cc < len) {
if (str[cc] == '.') {
cc++;
cc_start = cc;
while (cc < len && cc < cc_start + 3) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
millisecond = millisecond * 10 + str[cc++] - '0';
}
if (cc < cc_start + 3)
@@ -1063,6 +1042,7 @@ bool FX_TimeFromCanonical(const CFX_WideStringC& wsTime,
tzDiff.tzMinute = 0;
if (str[cc] != 'Z')
cc += ParseTimeZone(str + cc, len - cc, &tzDiff);
+
ResolveZone(hour, minute, tzDiff, pLocale);
}
}
@@ -1115,12 +1095,10 @@ FX_LOCALECATEGORY CFGAS_FormatString::GetCategory(
CFX_WideString wsCategory(pStr[ccf]);
ccf++;
while (true) {
- if (ccf == iLenf) {
+ if (ccf == iLenf)
return eCategory;
- }
- if (pStr[ccf] == '.' || pStr[ccf] == '(') {
+ if (pStr[ccf] == '.' || pStr[ccf] == '(')
break;
- }
if (pStr[ccf] == '{') {
bBraceOpen = true;
break;
@@ -1128,16 +1106,15 @@ FX_LOCALECATEGORY CFGAS_FormatString::GetCategory(
wsCategory += pStr[ccf];
ccf++;
}
+
uint32_t dwHash = FX_HashCode_GetW(wsCategory.AsStringC(), false);
if (dwHash == FX_LOCALECATEGORY_DateHash) {
- if (eCategory == FX_LOCALECATEGORY_Time) {
+ if (eCategory == FX_LOCALECATEGORY_Time)
return FX_LOCALECATEGORY_DateTime;
- }
eCategory = FX_LOCALECATEGORY_Date;
} else if (dwHash == FX_LOCALECATEGORY_TimeHash) {
- if (eCategory == FX_LOCALECATEGORY_Date) {
+ if (eCategory == FX_LOCALECATEGORY_Date)
return FX_LOCALECATEGORY_DateTime;
- }
eCategory = FX_LOCALECATEGORY_Time;
} else if (dwHash == FX_LOCALECATEGORY_DateTimeHash) {
return FX_LOCALECATEGORY_DateTime;
@@ -1158,10 +1135,9 @@ FX_LOCALECATEGORY CFGAS_FormatString::GetCategory(
return eCategory;
}
-IFX_Locale* CFGAS_FormatString::GetTextFormat(const CFX_WideString& wsPattern,
- const CFX_WideStringC& wsCategory,
- CFX_WideString& wsPurgePattern) {
- IFX_Locale* pLocale = nullptr;
+void CFGAS_FormatString::GetTextFormat(const CFX_WideString& wsPattern,
+ const CFX_WideStringC& wsCategory,
+ CFX_WideString& wsPurgePattern) {
int32_t ccf = 0;
int32_t iLenf = wsPattern.GetLength();
const wchar_t* pStr = wsPattern.c_str();
@@ -1180,17 +1156,15 @@ IFX_Locale* CFGAS_FormatString::GetTextFormat(const CFX_WideString& wsPattern,
wsSearchCategory += pStr[ccf];
ccf++;
}
- if (wsSearchCategory != wsCategory) {
+ if (wsSearchCategory != wsCategory)
continue;
- }
+
while (ccf < iLenf) {
if (pStr[ccf] == '(') {
ccf++;
CFX_WideString wsLCID;
- while (ccf < iLenf && pStr[ccf] != ')') {
+ while (ccf < iLenf && pStr[ccf] != ')')
wsLCID += pStr[ccf++];
- }
- pLocale = GetPatternLocale(wsLCID);
} else if (pStr[ccf] == '{') {
bBrackOpen = true;
break;
@@ -1202,17 +1176,10 @@ IFX_Locale* CFGAS_FormatString::GetTextFormat(const CFX_WideString& wsPattern,
}
ccf++;
}
- if (!bBrackOpen) {
+ if (!bBrackOpen)
wsPurgePattern = wsPattern;
- }
- if (!pLocale) {
- pLocale = m_pLocaleMgr->GetDefLocale();
- }
- return pLocale;
}
-#define FX_NUMSTYLE_Percent 0x01
-#define FX_NUMSTYLE_Exponent 0x02
-#define FX_NUMSTYLE_DotVorv 0x04
+
IFX_Locale* CFGAS_FormatString::GetNumericFormat(
const CFX_WideString& wsPattern,
int32_t& iDotIndex,
@@ -1248,19 +1215,19 @@ IFX_Locale* CFGAS_FormatString::GetNumericFormat(
if (pStr[ccf] == '(') {
ccf++;
CFX_WideString wsLCID;
- while (ccf < iLenf && pStr[ccf] != ')') {
+ while (ccf < iLenf && pStr[ccf] != ')')
wsLCID += pStr[ccf++];
- }
- pLocale = GetPatternLocale(wsLCID);
+
+ pLocale = m_pLocaleMgr->GetLocaleByName(wsLCID);
} else if (pStr[ccf] == '{') {
bBrackOpen = true;
break;
} else if (pStr[ccf] == '.') {
CFX_WideString wsSubCategory;
ccf++;
- while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') {
+ while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{')
wsSubCategory += pStr[ccf++];
- }
+
uint32_t dwSubHash =
FX_HashCode_GetW(wsSubCategory.AsStringC(), false);
FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal;
@@ -1284,9 +1251,9 @@ IFX_Locale* CFGAS_FormatString::GetNumericFormat(
dwStyle |= FX_NUMSTYLE_DotVorv;
}
wsPurgePattern += wsSubCategory;
- if (eSubCategory == FX_LOCALENUMPATTERN_Percent) {
+ if (eSubCategory == FX_LOCALENUMPATTERN_Percent)
dwStyle |= FX_NUMSTYLE_Percent;
- }
+
continue;
}
ccf++;
@@ -1309,12 +1276,10 @@ IFX_Locale* CFGAS_FormatString::GetNumericFormat(
}
ccf++;
}
- if (!bFindDot) {
+ if (!bFindDot)
iDotIndex = wsPurgePattern.GetLength();
- }
- if (!pLocale) {
+ if (!pLocale)
pLocale = m_pLocaleMgr->GetDefLocale();
- }
return pLocale;
}
@@ -1322,15 +1287,16 @@ bool CFGAS_FormatString::ParseText(const CFX_WideString& wsSrcText,
const CFX_WideString& wsPattern,
CFX_WideString& wsValue) {
wsValue.clear();
- if (wsSrcText.IsEmpty() || wsPattern.IsEmpty()) {
+ if (wsSrcText.IsEmpty() || wsPattern.IsEmpty())
return false;
- }
+
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"text", wsTextFormat);
- if (wsTextFormat.IsEmpty()) {
+ if (wsTextFormat.IsEmpty())
return false;
- }
- int32_t iText = 0, iPattern = 0;
+
+ int32_t iText = 0;
+ int32_t iPattern = 0;
const wchar_t* pStrText = wsSrcText.c_str();
int32_t iLenText = wsSrcText.GetLength();
const wchar_t* pStrPattern = wsTextFormat.c_str();
@@ -1414,7 +1380,6 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
int32_t iGroupLen = wsGroupSymbol.GetLength();
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();
int len = wsSrcNum.GetLength();
const wchar_t* strf = wsNumFormat.c_str();
@@ -1428,25 +1393,25 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
bReverseParse = true;
}
bReverseParse = false;
- ccf = dot_index_f - 1;
- cc = dot_index - 1;
+ int ccf = dot_index_f - 1;
+ int cc = dot_index - 1;
while (ccf >= 0 && cc >= 0) {
switch (strf[ccf]) {
case '\'': {
CFX_WideString wsLiteral = GetLiteralTextReverse(strf, ccf);
int32_t iLiteralLen = wsLiteral.GetLength();
cc -= iLiteralLen - 1;
- if (cc < 0 || wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
+ if (cc < 0 || wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen))
return false;
- }
+
cc--;
ccf--;
break;
}
case '9':
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wsValue = str[cc] + wsValue;
cc--;
ccf--;
@@ -1474,9 +1439,9 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
cc--;
} else {
cc -= iMinusLen - 1;
- if (cc < 0 || wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
+ if (cc < 0 || wcsncmp(str + cc, wsMinus.c_str(), iMinusLen))
return false;
- }
+
cc--;
bNeg = true;
}
@@ -1487,54 +1452,57 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
cc--;
} else {
cc -= iMinusLen - 1;
- if (cc < 0 || wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
+ if (cc < 0 || wcsncmp(str + cc, wsMinus.c_str(), iMinusLen))
return false;
- }
+
cc--;
bNeg = true;
}
ccf--;
break;
case 'E': {
- if (cc >= dot_index) {
+ if (cc >= dot_index)
return false;
- }
+
bool bExpSign = false;
while (cc >= 0) {
- if (str[cc] == 'E' || str[cc] == 'e') {
+ if (str[cc] == 'E' || str[cc] == 'e')
break;
- }
if (FXSYS_isDecimalDigit(str[cc])) {
iExponent = iExponent + (str[cc] - '0') * 10;
cc--;
continue;
- } else if (str[cc] == '+') {
+ }
+ if (str[cc] == '+') {
cc--;
continue;
- } else if (cc - iMinusLen + 1 > 0 &&
- !wcsncmp(str + (cc - iMinusLen + 1), wsMinus.c_str(),
- iMinusLen)) {
+ }
+ if (cc - iMinusLen + 1 > 0 && !wcsncmp(str + (cc - iMinusLen + 1),
+ wsMinus.c_str(), iMinusLen)) {
bExpSign = true;
cc -= iMinusLen;
- } else {
- return false;
+ continue;
}
+
+ return false;
}
cc--;
iExponent = bExpSign ? -iExponent : iExponent;
ccf--;
- } break;
+ break;
+ }
case '$': {
CFX_WideString wsSymbol =
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
int32_t iSymbolLen = wsSymbol.GetLength();
cc -= iSymbolLen - 1;
- if (cc < 0 || wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
+ if (cc < 0 || wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen))
return false;
- }
+
cc--;
ccf--;
- } break;
+ break;
+ }
case 'r':
if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
@@ -1592,13 +1560,14 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
int32_t iSysmbolLen = wsSymbol.GetLength();
cc -= iSysmbolLen - 1;
- if (cc < 0 || wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
+ if (cc < 0 || wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen))
return false;
- }
+
cc--;
ccf--;
bHavePercentSymbol = true;
- } break;
+ break;
+ }
case '8':
return false;
case ',': {
@@ -1612,29 +1581,30 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
}
}
ccf--;
- } break;
+ break;
+ }
case '(':
- if (str[cc] == L'(') {
+ if (str[cc] == L'(')
bNeg = true;
- } else if (str[cc] != L' ') {
+ else if (str[cc] != L' ')
return false;
- }
+
cc--;
ccf--;
break;
case ')':
- if (str[cc] == L')') {
+ if (str[cc] == L')')
bNeg = true;
- } else if (str[cc] != L' ') {
+ else if (str[cc] != L' ')
return false;
- }
+
cc--;
ccf--;
break;
default:
- if (strf[ccf] != str[cc]) {
+ if (strf[ccf] != str[cc])
return false;
- }
+
cc--;
ccf--;
}
@@ -1644,13 +1614,11 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
bNeg = true;
cc--;
}
- if (cc >= 0) {
+ if (cc >= 0)
return false;
- }
}
- if (dot_index < len && (dwFormatStyle & FX_NUMSTYLE_DotVorv)) {
+ if (dot_index < len && (dwFormatStyle & FX_NUMSTYLE_DotVorv))
wsValue += '.';
- }
if (!bReverseParse) {
ccf = dot_index_f + 1;
cc = (dot_index == len) ? len : dot_index + 1;
@@ -1668,10 +1636,10 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
break;
}
case '9':
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
- { wsValue += str[cc]; }
+
+ wsValue += str[cc];
cc++;
ccf++;
break;
@@ -1720,9 +1688,9 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
ccf++;
break;
case 'E': {
- if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) {
+ if (cc >= len || (str[cc] != 'E' && str[cc] != 'e'))
return false;
- }
+
bool bExpSign = false;
cc++;
if (cc < len) {
@@ -1734,15 +1702,16 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
}
}
while (cc < len) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
break;
- }
+
iExponent = iExponent * 10 + str[cc] - '0';
cc++;
}
iExponent = bExpSign ? -iExponent : iExponent;
ccf++;
- } break;
+ break;
+ }
case '$': {
CFX_WideString wsSymbol =
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
@@ -1753,7 +1722,8 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
}
cc += iSymbolLen;
ccf++;
- } break;
+ break;
+ }
case 'c':
if (ccf + 1 < lenf && strf[ccf + 1] == 'r') {
if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') {
@@ -1810,9 +1780,9 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
bHavePercentSymbol = true;
} break;
case '8': {
- while (ccf < lenf && strf[ccf] == '8') {
+ while (ccf < lenf && strf[ccf] == '8')
ccf++;
- }
+
while (cc < len && FXSYS_isDecimalDigit(str[cc])) {
wsValue += str[cc];
cc++;
@@ -1824,36 +1794,36 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
cc += iGroupLen;
}
ccf++;
- } break;
+ break;
+ }
case '(':
- if (str[cc] == L'(') {
+ if (str[cc] == L'(')
bNeg = true;
- } else if (str[cc] != L' ') {
+ else if (str[cc] != L' ')
return false;
- }
+
cc++;
ccf++;
break;
case ')':
- if (str[cc] == L')') {
+ if (str[cc] == L')')
bNeg = true;
- } else if (str[cc] != L' ') {
+ else if (str[cc] != L' ')
return false;
- }
+
cc++;
ccf++;
break;
default:
- if (strf[ccf] != str[cc]) {
+ if (strf[ccf] != str[cc])
return false;
- }
+
cc++;
ccf++;
}
}
- if (cc != len) {
+ if (cc != len)
return false;
- }
}
if (iExponent || bHavePercentSymbol) {
CFX_Decimal decimal = CFX_Decimal(wsValue.AsStringC());
@@ -1861,14 +1831,14 @@ bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
decimal = decimal *
CFX_Decimal(FXSYS_pow(10, static_cast<float>(iExponent)), 3);
}
- if (bHavePercentSymbol) {
+ if (bHavePercentSymbol)
decimal = decimal / CFX_Decimal(100);
- }
+
wsValue = decimal;
}
- if (bNeg) {
+ if (bNeg)
wsValue = L'-' + wsValue;
- }
+
return true;
}
@@ -1901,9 +1871,9 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
wsDatePattern = wsPattern.Left(ccf);
wsTimePattern = wsPattern.Right(wsPattern.GetLength() - ccf);
wsTimePattern.SetAt(0, ' ');
- if (!pLocale) {
+ if (!pLocale)
pLocale = m_pLocaleMgr->GetDefLocale();
- }
+
return FX_DATETIMETYPE_DateTime;
}
wsCategory += pStr[ccf];
@@ -1912,9 +1882,8 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
if (!(iFindCategory & 1) && wsCategory == L"date") {
iFindCategory |= 1;
eCategory = FX_LOCALECATEGORY_Date;
- if (iFindCategory & 2) {
+ if (iFindCategory & 2)
iFindCategory = 4;
- }
} else if (!(iFindCategory & 2) && wsCategory == L"time") {
iFindCategory |= 2;
eCategory = FX_LOCALECATEGORY_Time;
@@ -1928,19 +1897,19 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
if (pStr[ccf] == '(') {
ccf++;
CFX_WideString wsLCID;
- while (ccf < iLenf && pStr[ccf] != ')') {
+ while (ccf < iLenf && pStr[ccf] != ')')
wsLCID += pStr[ccf++];
- }
- pLocale = GetPatternLocale(wsLCID);
+
+ pLocale = m_pLocaleMgr->GetLocaleByName(wsLCID);
} else if (pStr[ccf] == '{') {
bBraceOpen = true;
break;
} else if (pStr[ccf] == '.') {
CFX_WideString wsSubCategory;
ccf++;
- while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') {
+ while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{')
wsSubCategory += pStr[ccf++];
- }
+
uint32_t dwSubHash =
FX_HashCode_GetW(wsSubCategory.AsStringC(), false);
FX_LOCALEDATETIMESUBCATEGORY eSubCategory =
@@ -1953,10 +1922,10 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
break;
}
}
- if (!pLocale) {
+ if (!pLocale)
pLocale = m_pLocaleMgr->GetDefLocale();
- }
ASSERT(pLocale);
+
switch (eCategory) {
case FX_LOCALECATEGORY_Date:
wsDatePattern =
@@ -1982,11 +1951,11 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
} else if (pStr[ccf] == '}') {
bBraceOpen = false;
if (!wsTempPattern.IsEmpty()) {
- if (eCategory == FX_LOCALECATEGORY_Time) {
+ if (eCategory == FX_LOCALECATEGORY_Time)
wsTimePattern = wsTempPattern;
- } else if (eCategory == FX_LOCALECATEGORY_Date) {
+ else if (eCategory == FX_LOCALECATEGORY_Date)
wsDatePattern = wsTempPattern;
- }
+
wsTempPattern.clear();
}
} else {
@@ -1994,16 +1963,15 @@ FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
}
ccf++;
}
+
if (!wsTempPattern.IsEmpty()) {
- if (eCategory == FX_LOCALECATEGORY_Date) {
+ if (eCategory == FX_LOCALECATEGORY_Date)
wsDatePattern += wsTempPattern;
- } else {
+ else
wsTimePattern += wsTempPattern;
- }
}
- if (!pLocale) {
+ if (!pLocale)
pLocale = m_pLocaleMgr->GetDefLocale();
- }
if (!iFindCategory) {
wsTimePattern.clear();
wsDatePattern = wsPattern;
@@ -2017,22 +1985,19 @@ bool CFGAS_FormatString::ParseDateTime(const CFX_WideString& wsSrcDateTime,
CFX_DateTime* dtValue) {
dtValue->Reset();
- if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty()) {
+ if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty())
return false;
- }
+
CFX_WideString wsDatePattern, wsTimePattern;
IFX_Locale* pLocale = nullptr;
FX_DATETIMETYPE eCategory =
GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern);
- if (!pLocale) {
+ if (!pLocale)
return false;
- }
- if (eCategory == FX_DATETIMETYPE_Unknown) {
+ if (eCategory == FX_DATETIMETYPE_Unknown)
eCategory = eDateTimeType;
- }
- if (eCategory == FX_DATETIMETYPE_Unknown) {
+ if (eCategory == FX_DATETIMETYPE_Unknown)
return false;
- }
if (eCategory == FX_DATETIMETYPE_TimeDate) {
int32_t iStart = 0;
if (!ParseLocaleTime(wsSrcDateTime, wsTimePattern, pLocale, dtValue,
@@ -2058,11 +2023,14 @@ bool CFGAS_FormatString::ParseDateTime(const CFX_WideString& wsSrcDateTime,
}
return true;
}
+
bool CFGAS_FormatString::ParseZero(const CFX_WideString& wsSrcText,
const CFX_WideString& wsPattern) {
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"zero", wsTextFormat);
- int32_t iText = 0, iPattern = 0;
+
+ int32_t iText = 0;
+ int32_t iPattern = 0;
const wchar_t* pStrText = wsSrcText.c_str();
int32_t iLenText = wsSrcText.GetLength();
const wchar_t* pStrPattern = wsTextFormat.c_str();
@@ -2079,20 +2047,23 @@ bool CFGAS_FormatString::ParseZero(const CFX_WideString& wsSrcText,
iText += iLiteralLen;
iPattern++;
continue;
- } else if (pStrPattern[iPattern] != pStrText[iText]) {
- return false;
- } else {
- iText++;
- iPattern++;
}
+ if (pStrPattern[iPattern] != pStrText[iText])
+ return false;
+
+ iText++;
+ iPattern++;
}
return iPattern == iLenPattern && iText == iLenText;
}
+
bool CFGAS_FormatString::ParseNull(const CFX_WideString& wsSrcText,
const CFX_WideString& wsPattern) {
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"null", wsTextFormat);
- int32_t iText = 0, iPattern = 0;
+
+ int32_t iText = 0;
+ int32_t iPattern = 0;
const wchar_t* pStrText = wsSrcText.c_str();
int32_t iLenText = wsSrcText.GetLength();
const wchar_t* pStrPattern = wsTextFormat.c_str();
@@ -2109,28 +2080,31 @@ bool CFGAS_FormatString::ParseNull(const CFX_WideString& wsSrcText,
iText += iLiteralLen;
iPattern++;
continue;
- } else if (pStrPattern[iPattern] != pStrText[iText]) {
- return false;
- } else {
- iText++;
- iPattern++;
}
+ if (pStrPattern[iPattern] != pStrText[iText])
+ return false;
+
+ iText++;
+ iPattern++;
}
return iPattern == iLenPattern && iText == iLenText;
}
+
bool CFGAS_FormatString::FormatText(const CFX_WideString& wsSrcText,
const CFX_WideString& wsPattern,
CFX_WideString& wsOutput) {
- if (wsPattern.IsEmpty()) {
+ if (wsPattern.IsEmpty())
return false;
- }
+
int32_t iLenText = wsSrcText.GetLength();
- if (iLenText == 0) {
+ if (iLenText == 0)
return false;
- }
+
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"text", wsTextFormat);
- int32_t iText = 0, iPattern = 0;
+
+ int32_t iText = 0;
+ int32_t iPattern = 0;
const wchar_t* pStrText = wsSrcText.c_str();
const wchar_t* pStrPattern = wsTextFormat.c_str();
int32_t iLenPattern = wsTextFormat.GetLength();
@@ -2142,16 +2116,16 @@ bool CFGAS_FormatString::FormatText(const CFX_WideString& wsSrcText,
break;
}
case 'A':
- if (iText >= iLenText || !FXSYS_iswalpha(pStrText[iText])) {
+ if (iText >= iLenText || !FXSYS_iswalpha(pStrText[iText]))
return false;
- }
+
wsOutput += pStrText[iText++];
iPattern++;
break;
case 'X':
- if (iText >= iLenText) {
+ if (iText >= iLenText)
return false;
- }
+
wsOutput += pStrText[iText++];
iPattern++;
break;
@@ -2165,9 +2139,9 @@ bool CFGAS_FormatString::FormatText(const CFX_WideString& wsSrcText,
iPattern++;
break;
case '9':
- if (iText >= iLenText || !FXSYS_isDecimalDigit(pStrText[iText])) {
+ if (iText >= iLenText || !FXSYS_isDecimalDigit(pStrText[iText]))
return false;
- }
+
wsOutput += pStrText[iText++];
iPattern++;
break;
@@ -2182,30 +2156,31 @@ bool CFGAS_FormatString::FormatText(const CFX_WideString& wsSrcText,
bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
const CFX_WideString& wsPattern,
CFX_WideString& wsOutput) {
- if (wsInputNum.IsEmpty() || wsPattern.IsEmpty()) {
+ if (wsInputNum.IsEmpty() || wsPattern.IsEmpty())
return false;
- }
+
int32_t dot_index_f = -1;
uint32_t dwNumStyle = 0;
CFX_WideString wsNumFormat;
IFX_Locale* pLocale =
GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat);
- if (!pLocale || wsNumFormat.IsEmpty()) {
+ if (!pLocale || wsNumFormat.IsEmpty())
return false;
- }
+
int32_t cc = 0, ccf = 0;
const wchar_t* strf = wsNumFormat.c_str();
int lenf = wsNumFormat.GetLength();
CFX_WideString wsSrcNum(wsInputNum);
wsSrcNum.TrimLeft('0');
- if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.') {
+ if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.')
wsSrcNum.Insert(0, '0');
- }
+
CFX_Decimal decimal = CFX_Decimal(wsSrcNum.AsStringC());
if (dwNumStyle & FX_NUMSTYLE_Percent) {
decimal = decimal * CFX_Decimal(100);
wsSrcNum = decimal;
}
+
int32_t exponent = 0;
if (dwNumStyle & FX_NUMSTYLE_Exponent) {
int fixed_count = 0;
@@ -2222,6 +2197,7 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
}
ccf++;
}
+
int threshold = 1;
while (fixed_count > 1) {
threshold *= 10;
@@ -2244,6 +2220,7 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
}
}
}
+
bool bTrimTailZeros = false;
int32_t iTreading =
GetNumTrailingLimit(wsNumFormat, dot_index_f, bTrimTailZeros);
@@ -2256,6 +2233,7 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
wsSrcNum.TrimRight(L"0");
wsSrcNum.TrimRight(L".");
}
+
CFX_WideString wsGroupSymbol =
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
bool bNeg = false;
@@ -2263,22 +2241,23 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
bNeg = true;
wsSrcNum.Delete(0, 1);
}
+
bool bAddNeg = false;
const wchar_t* str = wsSrcNum.c_str();
int len = wsSrcNum.GetLength();
int dot_index = wsSrcNum.Find('.');
- if (dot_index == -1) {
+ if (dot_index == -1)
dot_index = len;
- }
+
ccf = dot_index_f - 1;
cc = dot_index - 1;
while (ccf >= 0) {
switch (strf[ccf]) {
case '9':
if (cc >= 0) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wsOutput = str[cc] + wsOutput;
cc--;
} else {
@@ -2288,26 +2267,24 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
break;
case 'z':
if (cc >= 0) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
- if (str[0] != '0') {
+ if (str[0] != '0')
wsOutput = str[cc] + wsOutput;
- }
+
cc--;
}
ccf--;
break;
case 'Z':
if (cc >= 0) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
- if (str[0] == '0') {
+ if (str[0] == '0')
wsOutput = L' ' + wsOutput;
- } else {
+ else
wsOutput = str[cc] + wsOutput;
- }
+
cc--;
} else {
wsOutput = L' ' + wsOutput;
@@ -2336,52 +2313,52 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
CFX_WideString wsExp;
wsExp.Format(L"E%+d", exponent);
wsOutput = wsExp + wsOutput;
- }
ccf--;
break;
+ }
case '$': {
wsOutput =
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol) +
wsOutput;
- }
ccf--;
break;
+ }
case 'r':
if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
- if (bNeg) {
+ if (bNeg)
wsOutput = L"CR" + wsOutput;
- }
+
ccf -= 2;
bAddNeg = true;
}
break;
case 'R':
if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') {
- if (bNeg) {
+ if (bNeg)
wsOutput = L"CR" + wsOutput;
- } else {
+ else
wsOutput = L" " + wsOutput;
- }
+
ccf -= 2;
bAddNeg = true;
}
break;
case 'b':
if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') {
- if (bNeg) {
+ if (bNeg)
wsOutput = L"db" + wsOutput;
- }
+
ccf -= 2;
bAddNeg = true;
}
break;
case 'B':
if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') {
- if (bNeg) {
+ if (bNeg)
wsOutput = L"DB" + wsOutput;
- } else {
+ else
wsOutput = L" " + wsOutput;
- }
+
ccf -= 2;
bAddNeg = true;
}
@@ -2389,30 +2366,30 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
case '%': {
wsOutput =
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent) + wsOutput;
- }
ccf--;
break;
+ }
case ',':
- if (cc >= 0) {
+ if (cc >= 0)
wsOutput = wsGroupSymbol + wsOutput;
- }
+
ccf--;
break;
case '(':
- if (bNeg) {
+ if (bNeg)
wsOutput = L"(" + wsOutput;
- } else {
+ else
wsOutput = L" " + wsOutput;
- }
+
bAddNeg = true;
ccf--;
break;
case ')':
- if (bNeg) {
+ if (bNeg)
wsOutput = L")" + wsOutput;
- } else {
+ else
wsOutput = L" " + wsOutput;
- }
+
ccf--;
break;
case '\'':
@@ -2424,13 +2401,13 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
ccf--;
}
}
+
if (cc >= 0) {
int nPos = dot_index % 3;
wsOutput.clear();
for (int32_t i = 0; i < dot_index; i++) {
- if (i % 3 == nPos && i != 0) {
+ if (i % 3 == nPos && i != 0)
wsOutput += wsGroupSymbol;
- }
wsOutput += wsSrcNum[i];
}
if (dot_index < len) {
@@ -2456,14 +2433,12 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
if (strf[dot_index_f] == 'V') {
wsOutput += wsDotSymbol;
} else if (strf[dot_index_f] == '.') {
- if (dot_index < len) {
+ if (dot_index < len)
+ wsOutput += wsDotSymbol;
+ else if (strf[dot_index_f + 1] == '9' || strf[dot_index_f + 1] == 'Z')
wsOutput += wsDotSymbol;
- } else {
- if (strf[dot_index_f + 1] == '9' || strf[dot_index_f + 1] == 'Z') {
- wsOutput += wsDotSymbol;
- }
- }
}
+
ccf = dot_index_f + 1;
cc = dot_index + 1;
while (ccf < lenf) {
@@ -2474,9 +2449,9 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
break;
case '9':
if (cc < len) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wsOutput += str[cc];
cc++;
} else {
@@ -2486,9 +2461,9 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
break;
case 'z':
if (cc < len) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wsOutput += str[cc];
cc++;
}
@@ -2496,9 +2471,9 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
break;
case 'Z':
if (cc < len) {
- if (!FXSYS_isDecimalDigit(str[cc])) {
+ if (!FXSYS_isDecimalDigit(str[cc]))
return false;
- }
+
wsOutput += str[cc];
cc++;
} else {
@@ -2511,7 +2486,8 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
wsExp.Format(L"E%+d", exponent);
wsOutput += wsExp;
ccf++;
- } break;
+ break;
+ }
case '$':
wsOutput +=
pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
@@ -2519,40 +2495,40 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
break;
case 'c':
if (ccf + 1 < lenf && strf[ccf + 1] == 'r') {
- if (bNeg) {
+ if (bNeg)
wsOutput += L"CR";
- }
+
ccf += 2;
bAddNeg = true;
}
break;
case 'C':
if (ccf + 1 < lenf && strf[ccf + 1] == 'R') {
- if (bNeg) {
+ if (bNeg)
wsOutput += L"CR";
- } else {
+ else
wsOutput += L" ";
- }
+
ccf += 2;
bAddNeg = true;
}
break;
case 'd':
if (ccf + 1 < lenf && strf[ccf + 1] == 'b') {
- if (bNeg) {
+ if (bNeg)
wsOutput += L"db";
- }
+
ccf += 2;
bAddNeg = true;
}
break;
case 'D':
if (ccf + 1 < lenf && strf[ccf + 1] == 'B') {
- if (bNeg) {
+ if (bNeg)
wsOutput += L"DB";
- } else {
+ else
wsOutput += L" ";
- }
+
ccf += 2;
bAddNeg = true;
}
@@ -2574,20 +2550,20 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
ccf++;
break;
case '(':
- if (bNeg) {
+ if (bNeg)
wsOutput += '(';
- } else {
+ else
wsOutput += ' ';
- }
+
bAddNeg = true;
ccf++;
break;
case ')':
- if (bNeg) {
+ if (bNeg)
wsOutput += ')';
- } else {
+ else
wsOutput += ' ';
- }
+
ccf++;
break;
default:
@@ -2604,9 +2580,8 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
bool CFGAS_FormatString::FormatNum(const CFX_WideString& wsSrcNum,
const CFX_WideString& wsPattern,
CFX_WideString& wsOutput) {
- if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) {
+ if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty())
return false;
- }
return FormatStrNum(wsSrcNum.AsStringC(), wsPattern, wsOutput);
}
@@ -2614,16 +2589,16 @@ bool CFGAS_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime,
const CFX_WideString& wsPattern,
CFX_WideString& wsOutput,
FX_DATETIMETYPE eDateTimeType) {
- if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty()) {
+ if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty())
return false;
- }
+
CFX_WideString wsDatePattern, wsTimePattern;
IFX_Locale* pLocale = nullptr;
FX_DATETIMETYPE eCategory =
GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern);
- if (!pLocale) {
+ if (!pLocale)
return false;
- }
+
if (eCategory == FX_DATETIMETYPE_Unknown) {
if (eDateTimeType == FX_DATETIMETYPE_Time) {
wsTimePattern = wsDatePattern;
@@ -2631,9 +2606,9 @@ bool CFGAS_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime,
}
eCategory = eDateTimeType;
}
- if (eCategory == FX_DATETIMETYPE_Unknown) {
+ if (eCategory == FX_DATETIMETYPE_Unknown)
return false;
- }
+
CFX_DateTime dt;
int32_t iT = wsSrcDateTime.Find(L"T");
if (iT < 0) {
@@ -2666,9 +2641,9 @@ bool CFGAS_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime,
bool CFGAS_FormatString::FormatZero(const CFX_WideString& wsPattern,
CFX_WideString& wsOutput) {
- if (wsPattern.IsEmpty()) {
+ if (wsPattern.IsEmpty())
return false;
- }
+
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"zero", wsTextFormat);
int32_t iPattern = 0;
@@ -2686,11 +2661,12 @@ bool CFGAS_FormatString::FormatZero(const CFX_WideString& wsPattern,
}
return true;
}
+
bool CFGAS_FormatString::FormatNull(const CFX_WideString& wsPattern,
CFX_WideString& wsOutput) {
- if (wsPattern.IsEmpty()) {
+ if (wsPattern.IsEmpty())
return false;
- }
+
CFX_WideString wsTextFormat;
GetTextFormat(wsPattern, L"null", wsTextFormat);
int32_t iPattern = 0;
@@ -2701,15 +2677,8 @@ bool CFGAS_FormatString::FormatNull(const CFX_WideString& wsPattern,
wsOutput += GetLiteralText(pStrPattern, iPattern, iLenPattern);
iPattern++;
continue;
- } else {
- wsOutput += pStrPattern[iPattern++];
- continue;
}
+ wsOutput += pStrPattern[iPattern++];
}
return true;
}
-
-IFX_Locale* CFGAS_FormatString::GetPatternLocale(
- const CFX_WideString& wsLocale) {
- return m_pLocaleMgr->GetLocaleByName(wsLocale);
-}
diff --git a/xfa/fgas/crt/cfgas_formatstring.h b/xfa/fgas/crt/cfgas_formatstring.h
index be3c310fa5..a8cb917697 100644
--- a/xfa/fgas/crt/cfgas_formatstring.h
+++ b/xfa/fgas/crt/cfgas_formatstring.h
@@ -53,9 +53,9 @@ class CFGAS_FormatString {
bool FormatNull(const CFX_WideString& wsPattern, CFX_WideString& wsOutput);
private:
- IFX_Locale* GetTextFormat(const CFX_WideString& wsPattern,
- const CFX_WideStringC& wsCategory,
- CFX_WideString& wsPurgePattern);
+ void GetTextFormat(const CFX_WideString& wsPattern,
+ const CFX_WideStringC& wsCategory,
+ CFX_WideString& wsPurgePattern);
IFX_Locale* GetNumericFormat(const CFX_WideString& wsPattern,
int32_t& iDotIndex,
uint32_t& dwStyle,
@@ -67,7 +67,6 @@ class CFGAS_FormatString {
IFX_Locale*& pLocale,
CFX_WideString& wsDatePattern,
CFX_WideString& wsTimePattern);
- IFX_Locale* GetPatternLocale(const CFX_WideString& wsLocale);
CXFA_LocaleMgr* m_pLocaleMgr;
};