| OLD | NEW | 
|     1 // Copyright 2014 PDFium Authors. All rights reserved. |     1 // Copyright 2014 PDFium Authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |     5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 
|     6  |     6  | 
|     7 #include <algorithm> |     7 #include <algorithm> | 
|     8  |     8  | 
|     9 #include "core/fxcrt/include/fx_ext.h" |     9 #include "core/fxcrt/include/fx_ext.h" | 
|    10 #include "core/fxcrt/include/fx_xml.h" |    10 #include "core/fxcrt/include/fx_xml.h" | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|    37 static const FX_LOCALESUBCATEGORYINFO g_FXLocaleNumSubCatData[] = { |    37 static const FX_LOCALESUBCATEGORYINFO g_FXLocaleNumSubCatData[] = { | 
|    38     {0x46f95531, L"percent", FX_LOCALENUMPATTERN_Percent}, |    38     {0x46f95531, L"percent", FX_LOCALENUMPATTERN_Percent}, | 
|    39     {0x4c4e8acb, L"currency", FX_LOCALENUMPATTERN_Currency}, |    39     {0x4c4e8acb, L"currency", FX_LOCALENUMPATTERN_Currency}, | 
|    40     {0x54034c2f, L"decimal", FX_LOCALENUMPATTERN_Decimal}, |    40     {0x54034c2f, L"decimal", FX_LOCALENUMPATTERN_Decimal}, | 
|    41     {0x7568e6ae, L"integer", FX_LOCALENUMPATTERN_Integer}, |    41     {0x7568e6ae, L"integer", FX_LOCALENUMPATTERN_Integer}, | 
|    42 }; |    42 }; | 
|    43 static const int32_t g_iFXLocaleNumSubCatCount = |    43 static const int32_t g_iFXLocaleNumSubCatCount = | 
|    44     sizeof(g_FXLocaleNumSubCatData) / sizeof(FX_LOCALESUBCATEGORYINFO); |    44     sizeof(g_FXLocaleNumSubCatData) / sizeof(FX_LOCALESUBCATEGORYINFO); | 
|    45  |    45  | 
|    46 struct FX_LOCALETIMEZONEINFO { |    46 struct FX_LOCALETIMEZONEINFO { | 
|    47   FX_DWORD uHash; |    47   uint32_t uHash; | 
|    48   int16_t iHour; |    48   int16_t iHour; | 
|    49   int16_t iMinute; |    49   int16_t iMinute; | 
|    50 }; |    50 }; | 
|    51  |    51  | 
|    52 static const FX_LOCALETIMEZONEINFO g_FXLocaleTimeZoneData[] = { |    52 static const FX_LOCALETIMEZONEINFO g_FXLocaleTimeZoneData[] = { | 
|    53     {FXBSTR_ID(0, 'C', 'D', 'T'), -5, 0}, {FXBSTR_ID(0, 'C', 'S', 'T'), -6, 0}, |    53     {FXBSTR_ID(0, 'C', 'D', 'T'), -5, 0}, {FXBSTR_ID(0, 'C', 'S', 'T'), -6, 0}, | 
|    54     {FXBSTR_ID(0, 'E', 'D', 'T'), -4, 0}, {FXBSTR_ID(0, 'E', 'S', 'T'), -5, 0}, |    54     {FXBSTR_ID(0, 'E', 'D', 'T'), -4, 0}, {FXBSTR_ID(0, 'E', 'S', 'T'), -5, 0}, | 
|    55     {FXBSTR_ID(0, 'M', 'D', 'T'), -6, 0}, {FXBSTR_ID(0, 'M', 'S', 'T'), -7, 0}, |    55     {FXBSTR_ID(0, 'M', 'D', 'T'), -6, 0}, {FXBSTR_ID(0, 'M', 'S', 'T'), -7, 0}, | 
|    56     {FXBSTR_ID(0, 'P', 'D', 'T'), -7, 0}, {FXBSTR_ID(0, 'P', 'S', 'T'), -8, 0}, |    56     {FXBSTR_ID(0, 'P', 'D', 'T'), -7, 0}, {FXBSTR_ID(0, 'P', 'S', 'T'), -8, 0}, | 
|    57 }; |    57 }; | 
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   360       if (!FX_IsDigit(str[cc])) { |   360       if (!FX_IsDigit(str[cc])) { | 
|   361         if ((str[cc] == 'E' || str[cc] == 'e')) |   361         if ((str[cc] == 'E' || str[cc] == 'e')) | 
|   362           break; |   362           break; | 
|   363         else |   363         else | 
|   364           return FALSE; |   364           return FALSE; | 
|   365       } |   365       } | 
|   366       fraction += gs_fraction_scales[scale] * (str[cc] - '0'); |   366       fraction += gs_fraction_scales[scale] * (str[cc] - '0'); | 
|   367       scale++; |   367       scale++; | 
|   368       cc++; |   368       cc++; | 
|   369     } |   369     } | 
|   370     lcnum.m_Fractional = (FX_DWORD)(fraction * 4294967296.0); |   370     lcnum.m_Fractional = (uint32_t)(fraction * 4294967296.0); | 
|   371   } |   371   } | 
|   372   if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { |   372   if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { | 
|   373     cc++; |   373     cc++; | 
|   374     if (cc < len) { |   374     if (cc < len) { | 
|   375       if (str[cc] == '+') { |   375       if (str[cc] == '+') { | 
|   376         cc++; |   376         cc++; | 
|   377       } else if (str[cc] == '-') { |   377       } else if (str[cc] == '-') { | 
|   378         bExpSign = true; |   378         bExpSign = true; | 
|   379         cc++; |   379         cc++; | 
|   380       } |   380       } | 
|   381     } |   381     } | 
|   382     while (cc < len) { |   382     while (cc < len) { | 
|   383       if (FX_IsDigit(str[cc])) |   383       if (FX_IsDigit(str[cc])) | 
|   384         return FALSE; |   384         return FALSE; | 
|   385       lcnum.m_Exponent = lcnum.m_Exponent * 10 + str[cc] - '0'; |   385       lcnum.m_Exponent = lcnum.m_Exponent * 10 + str[cc] - '0'; | 
|   386       cc++; |   386       cc++; | 
|   387     } |   387     } | 
|   388     lcnum.m_Exponent = bExpSign ? -lcnum.m_Exponent : lcnum.m_Exponent; |   388     lcnum.m_Exponent = bExpSign ? -lcnum.m_Exponent : lcnum.m_Exponent; | 
|   389   } |   389   } | 
|   390   return TRUE; |   390   return TRUE; | 
|   391 } |   391 } | 
|   392  |   392  | 
|   393 CFX_LCNumeric::CFX_LCNumeric() { |   393 CFX_LCNumeric::CFX_LCNumeric() { | 
|   394   m_Integral = 0; |   394   m_Integral = 0; | 
|   395   m_Fractional = 0; |   395   m_Fractional = 0; | 
|   396   m_Exponent = 0; |   396   m_Exponent = 0; | 
|   397 } |   397 } | 
|   398 CFX_LCNumeric::CFX_LCNumeric(int64_t integral, |   398 CFX_LCNumeric::CFX_LCNumeric(int64_t integral, | 
|   399                              FX_DWORD fractional, |   399                              uint32_t fractional, | 
|   400                              int32_t exponent) { |   400                              int32_t exponent) { | 
|   401   m_Integral = integral; |   401   m_Integral = integral; | 
|   402   m_Fractional = fractional; |   402   m_Fractional = fractional; | 
|   403   m_Exponent = exponent; |   403   m_Exponent = exponent; | 
|   404 } |   404 } | 
|   405 CFX_LCNumeric::CFX_LCNumeric(FX_FLOAT dbRetValue) { |   405 CFX_LCNumeric::CFX_LCNumeric(FX_FLOAT dbRetValue) { | 
|   406   m_Integral = (int64_t)dbRetValue; |   406   m_Integral = (int64_t)dbRetValue; | 
|   407   m_Fractional = (FX_DWORD)(((dbRetValue > 0) ? (dbRetValue - m_Integral) |   407   m_Fractional = (uint32_t)(((dbRetValue > 0) ? (dbRetValue - m_Integral) | 
|   408                                               : (m_Integral - dbRetValue)) * |   408                                               : (m_Integral - dbRetValue)) * | 
|   409                             4294967296); |   409                             4294967296); | 
|   410   m_Exponent = 0; |   410   m_Exponent = 0; | 
|   411 } |   411 } | 
|   412 CFX_LCNumeric::CFX_LCNumeric(double dbvalue) { |   412 CFX_LCNumeric::CFX_LCNumeric(double dbvalue) { | 
|   413   m_Integral = (int64_t)dbvalue; |   413   m_Integral = (int64_t)dbvalue; | 
|   414   m_Fractional = (FX_DWORD)( |   414   m_Fractional = (uint32_t)( | 
|   415       ((dbvalue > 0) ? (dbvalue - m_Integral) : (m_Integral - dbvalue)) * |   415       ((dbvalue > 0) ? (dbvalue - m_Integral) : (m_Integral - dbvalue)) * | 
|   416       4294967296); |   416       4294967296); | 
|   417   m_Exponent = 0; |   417   m_Exponent = 0; | 
|   418 } |   418 } | 
|   419 CFX_LCNumeric::CFX_LCNumeric(CFX_WideString& wsNumeric) { |   419 CFX_LCNumeric::CFX_LCNumeric(CFX_WideString& wsNumeric) { | 
|   420   FX_WStringToNumeric(wsNumeric, *this); |   420   FX_WStringToNumeric(wsNumeric, *this); | 
|   421 } |   421 } | 
|   422 FX_FLOAT CFX_LCNumeric::GetFloat() const { |   422 FX_FLOAT CFX_LCNumeric::GetFloat() const { | 
|   423   FX_FLOAT dbRetValue = m_Fractional / 4294967296.0f; |   423   FX_FLOAT dbRetValue = m_Fractional / 4294967296.0f; | 
|   424   dbRetValue = m_Integral + (m_Integral >= 0 ? dbRetValue : -dbRetValue); |   424   dbRetValue = m_Integral + (m_Integral >= 0 ? dbRetValue : -dbRetValue); | 
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   592         if (pStr[ccf] == '.' || pStr[ccf] == '(') { |   592         if (pStr[ccf] == '.' || pStr[ccf] == '(') { | 
|   593           break; |   593           break; | 
|   594         } |   594         } | 
|   595         if (pStr[ccf] == '{') { |   595         if (pStr[ccf] == '{') { | 
|   596           bBraceOpen = TRUE; |   596           bBraceOpen = TRUE; | 
|   597           break; |   597           break; | 
|   598         } |   598         } | 
|   599         wsCategory += pStr[ccf]; |   599         wsCategory += pStr[ccf]; | 
|   600         ccf++; |   600         ccf++; | 
|   601       } |   601       } | 
|   602       FX_DWORD dwHash = |   602       uint32_t dwHash = | 
|   603           FX_HashCode_String_GetW(wsCategory, wsCategory.GetLength()); |   603           FX_HashCode_String_GetW(wsCategory, wsCategory.GetLength()); | 
|   604       if (dwHash == FX_LOCALECATEGORY_DateHash) { |   604       if (dwHash == FX_LOCALECATEGORY_DateHash) { | 
|   605         if (eCategory == FX_LOCALECATEGORY_Time) { |   605         if (eCategory == FX_LOCALECATEGORY_Time) { | 
|   606           return FX_LOCALECATEGORY_DateTime; |   606           return FX_LOCALECATEGORY_DateTime; | 
|   607         } |   607         } | 
|   608         eCategory = FX_LOCALECATEGORY_Date; |   608         eCategory = FX_LOCALECATEGORY_Date; | 
|   609       } else if (dwHash == FX_LOCALECATEGORY_TimeHash) { |   609       } else if (dwHash == FX_LOCALECATEGORY_TimeHash) { | 
|   610         if (eCategory == FX_LOCALECATEGORY_Date) { |   610         if (eCategory == FX_LOCALECATEGORY_Date) { | 
|   611           return FX_LOCALECATEGORY_DateTime; |   611           return FX_LOCALECATEGORY_DateTime; | 
|   612         } |   612         } | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   708   if (!pLocale) { |   708   if (!pLocale) { | 
|   709     pLocale = m_pLocaleMgr->GetDefLocale(); |   709     pLocale = m_pLocaleMgr->GetDefLocale(); | 
|   710   } |   710   } | 
|   711   return pLocale; |   711   return pLocale; | 
|   712 } |   712 } | 
|   713 #define FX_NUMSTYLE_Percent 0x01 |   713 #define FX_NUMSTYLE_Percent 0x01 | 
|   714 #define FX_NUMSTYLE_Exponent 0x02 |   714 #define FX_NUMSTYLE_Exponent 0x02 | 
|   715 #define FX_NUMSTYLE_DotVorv 0x04 |   715 #define FX_NUMSTYLE_DotVorv 0x04 | 
|   716 IFX_Locale* CFX_FormatString::GetNumericFormat(const CFX_WideString& wsPattern, |   716 IFX_Locale* CFX_FormatString::GetNumericFormat(const CFX_WideString& wsPattern, | 
|   717                                                int32_t& iDotIndex, |   717                                                int32_t& iDotIndex, | 
|   718                                                FX_DWORD& dwStyle, |   718                                                uint32_t& dwStyle, | 
|   719                                                CFX_WideString& wsPurgePattern) { |   719                                                CFX_WideString& wsPurgePattern) { | 
|   720   dwStyle = 0; |   720   dwStyle = 0; | 
|   721   IFX_Locale* pLocale = NULL; |   721   IFX_Locale* pLocale = NULL; | 
|   722   int32_t ccf = 0; |   722   int32_t ccf = 0; | 
|   723   int32_t iLenf = wsPattern.GetLength(); |   723   int32_t iLenf = wsPattern.GetLength(); | 
|   724   const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; |   724   const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; | 
|   725   FX_BOOL bFindDot = FALSE; |   725   FX_BOOL bFindDot = FALSE; | 
|   726   FX_BOOL bBrackOpen = FALSE; |   726   FX_BOOL bBrackOpen = FALSE; | 
|   727   while (ccf < iLenf) { |   727   while (ccf < iLenf) { | 
|   728     if (pStr[ccf] == '\'') { |   728     if (pStr[ccf] == '\'') { | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
|   752           pLocale = GetPatternLocale(wsLCID); |   752           pLocale = GetPatternLocale(wsLCID); | 
|   753         } else if (pStr[ccf] == '{') { |   753         } else if (pStr[ccf] == '{') { | 
|   754           bBrackOpen = TRUE; |   754           bBrackOpen = TRUE; | 
|   755           break; |   755           break; | 
|   756         } else if (pStr[ccf] == '.') { |   756         } else if (pStr[ccf] == '.') { | 
|   757           CFX_WideString wsSubCategory; |   757           CFX_WideString wsSubCategory; | 
|   758           ccf++; |   758           ccf++; | 
|   759           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { |   759           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { | 
|   760             wsSubCategory += pStr[ccf++]; |   760             wsSubCategory += pStr[ccf++]; | 
|   761           } |   761           } | 
|   762           FX_DWORD dwSubHash = |   762           uint32_t dwSubHash = | 
|   763               FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); |   763               FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); | 
|   764           FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal; |   764           FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal; | 
|   765           for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) { |   765           for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) { | 
|   766             if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) { |   766             if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) { | 
|   767               eSubCategory = (FX_LOCALENUMSUBCATEGORY)g_FXLocaleNumSubCatData[i] |   767               eSubCategory = (FX_LOCALENUMSUBCATEGORY)g_FXLocaleNumSubCatData[i] | 
|   768                                  .eSubCategory; |   768                                  .eSubCategory; | 
|   769               break; |   769               break; | 
|   770             } |   770             } | 
|   771           } |   771           } | 
|   772           wsSubCategory.Empty(); |   772           wsSubCategory.Empty(); | 
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   913   return iPattern == iLenPattern && iText == iLenText; |   913   return iPattern == iLenPattern && iText == iLenText; | 
|   914 } |   914 } | 
|   915 FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, |   915 FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, | 
|   916                                    const CFX_WideString& wsPattern, |   916                                    const CFX_WideString& wsPattern, | 
|   917                                    FX_FLOAT& fValue) { |   917                                    FX_FLOAT& fValue) { | 
|   918   fValue = 0.0f; |   918   fValue = 0.0f; | 
|   919   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { |   919   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { | 
|   920     return FALSE; |   920     return FALSE; | 
|   921   } |   921   } | 
|   922   int32_t dot_index_f = -1; |   922   int32_t dot_index_f = -1; | 
|   923   FX_DWORD dwFormatStyle = 0; |   923   uint32_t dwFormatStyle = 0; | 
|   924   CFX_WideString wsNumFormat; |   924   CFX_WideString wsNumFormat; | 
|   925   IFX_Locale* pLocale = |   925   IFX_Locale* pLocale = | 
|   926       GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); |   926       GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); | 
|   927   if (!pLocale || wsNumFormat.IsEmpty()) { |   927   if (!pLocale || wsNumFormat.IsEmpty()) { | 
|   928     return FALSE; |   928     return FALSE; | 
|   929   } |   929   } | 
|   930   int32_t iExponent = 0; |   930   int32_t iExponent = 0; | 
|   931   CFX_WideString wsDotSymbol; |   931   CFX_WideString wsDotSymbol; | 
|   932   pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); |   932   pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); | 
|   933   CFX_WideString wsGroupSymbol; |   933   CFX_WideString wsGroupSymbol; | 
| (...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1679   wsResult.ReleaseBuffer(nIndex); |  1679   wsResult.ReleaseBuffer(nIndex); | 
|  1680 } |  1680 } | 
|  1681 FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, |  1681 FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, | 
|  1682                                    const CFX_WideString& wsPattern, |  1682                                    const CFX_WideString& wsPattern, | 
|  1683                                    CFX_WideString& wsValue) { |  1683                                    CFX_WideString& wsValue) { | 
|  1684   wsValue.Empty(); |  1684   wsValue.Empty(); | 
|  1685   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { |  1685   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { | 
|  1686     return FALSE; |  1686     return FALSE; | 
|  1687   } |  1687   } | 
|  1688   int32_t dot_index_f = -1; |  1688   int32_t dot_index_f = -1; | 
|  1689   FX_DWORD dwFormatStyle = 0; |  1689   uint32_t dwFormatStyle = 0; | 
|  1690   CFX_WideString wsNumFormat; |  1690   CFX_WideString wsNumFormat; | 
|  1691   IFX_Locale* pLocale = |  1691   IFX_Locale* pLocale = | 
|  1692       GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); |  1692       GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); | 
|  1693   if (!pLocale || wsNumFormat.IsEmpty()) { |  1693   if (!pLocale || wsNumFormat.IsEmpty()) { | 
|  1694     return FALSE; |  1694     return FALSE; | 
|  1695   } |  1695   } | 
|  1696   int32_t iExponent = 0; |  1696   int32_t iExponent = 0; | 
|  1697   CFX_WideString wsDotSymbol; |  1697   CFX_WideString wsDotSymbol; | 
|  1698   pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); |  1698   pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); | 
|  1699   CFX_WideString wsGroupSymbol; |  1699   CFX_WideString wsGroupSymbol; | 
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2229           pLocale = GetPatternLocale(wsLCID); |  2229           pLocale = GetPatternLocale(wsLCID); | 
|  2230         } else if (pStr[ccf] == '{') { |  2230         } else if (pStr[ccf] == '{') { | 
|  2231           bBraceOpen = TRUE; |  2231           bBraceOpen = TRUE; | 
|  2232           break; |  2232           break; | 
|  2233         } else if (pStr[ccf] == '.') { |  2233         } else if (pStr[ccf] == '.') { | 
|  2234           CFX_WideString wsSubCategory; |  2234           CFX_WideString wsSubCategory; | 
|  2235           ccf++; |  2235           ccf++; | 
|  2236           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { |  2236           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { | 
|  2237             wsSubCategory += pStr[ccf++]; |  2237             wsSubCategory += pStr[ccf++]; | 
|  2238           } |  2238           } | 
|  2239           FX_DWORD dwSubHash = |  2239           uint32_t dwSubHash = | 
|  2240               FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); |  2240               FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); | 
|  2241           FX_LOCALEDATETIMESUBCATEGORY eSubCategory = |  2241           FX_LOCALEDATETIMESUBCATEGORY eSubCategory = | 
|  2242               FX_LOCALEDATETIMESUBCATEGORY_Medium; |  2242               FX_LOCALEDATETIMESUBCATEGORY_Medium; | 
|  2243           for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) { |  2243           for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) { | 
|  2244             if (g_FXLocaleDateTimeSubCatData[i].uHash == dwSubHash) { |  2244             if (g_FXLocaleDateTimeSubCatData[i].uHash == dwSubHash) { | 
|  2245               eSubCategory = |  2245               eSubCategory = | 
|  2246                   (FX_LOCALEDATETIMESUBCATEGORY)g_FXLocaleDateTimeSubCatData[i] |  2246                   (FX_LOCALEDATETIMESUBCATEGORY)g_FXLocaleDateTimeSubCatData[i] | 
|  2247                       .eSubCategory; |  2247                       .eSubCategory; | 
|  2248               break; |  2248               break; | 
|  2249             } |  2249             } | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2330       ccf++; |  2330       ccf++; | 
|  2331       continue; |  2331       continue; | 
|  2332     } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { |  2332     } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { | 
|  2333       if (strf[ccf] != str[cc]) { |  2333       if (strf[ccf] != str[cc]) { | 
|  2334         return FALSE; |  2334         return FALSE; | 
|  2335       } |  2335       } | 
|  2336       cc++; |  2336       cc++; | 
|  2337       ccf++; |  2337       ccf++; | 
|  2338       continue; |  2338       continue; | 
|  2339     } |  2339     } | 
|  2340     FX_DWORD dwSymbolNum = 1; |  2340     uint32_t dwSymbolNum = 1; | 
|  2341     FX_DWORD dwSymbol = strf[ccf++]; |  2341     uint32_t dwSymbol = strf[ccf++]; | 
|  2342     while (ccf < lenf && strf[ccf] == dwSymbol) { |  2342     while (ccf < lenf && strf[ccf] == dwSymbol) { | 
|  2343       ccf++; |  2343       ccf++; | 
|  2344       dwSymbolNum++; |  2344       dwSymbolNum++; | 
|  2345     } |  2345     } | 
|  2346     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); |  2346     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); | 
|  2347     if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { |  2347     if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { | 
|  2348       if (!FX_IsDigit(str[cc])) { |  2348       if (!FX_IsDigit(str[cc])) { | 
|  2349         return FALSE; |  2349         return FALSE; | 
|  2350       } |  2350       } | 
|  2351       day = str[cc++] - '0'; |  2351       day = str[cc++] - '0'; | 
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2549       ccf++; |  2549       ccf++; | 
|  2550       continue; |  2550       continue; | 
|  2551     } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) == -1) { |  2551     } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) == -1) { | 
|  2552       if (strf[ccf] != str[cc]) { |  2552       if (strf[ccf] != str[cc]) { | 
|  2553         return FALSE; |  2553         return FALSE; | 
|  2554       } |  2554       } | 
|  2555       cc++; |  2555       cc++; | 
|  2556       ccf++; |  2556       ccf++; | 
|  2557       continue; |  2557       continue; | 
|  2558     } |  2558     } | 
|  2559     FX_DWORD dwSymbolNum = 1; |  2559     uint32_t dwSymbolNum = 1; | 
|  2560     FX_DWORD dwSymbol = strf[ccf++]; |  2560     uint32_t dwSymbol = strf[ccf++]; | 
|  2561     while (ccf < lenf && strf[ccf] == dwSymbol) { |  2561     while (ccf < lenf && strf[ccf] == dwSymbol) { | 
|  2562       ccf++; |  2562       ccf++; | 
|  2563       dwSymbolNum++; |  2563       dwSymbolNum++; | 
|  2564     } |  2564     } | 
|  2565     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); |  2565     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); | 
|  2566     if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1') || |  2566     if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1') || | 
|  2567         dwSymbol == FXBSTR_ID(0, 0, 'H', '1') || |  2567         dwSymbol == FXBSTR_ID(0, 0, 'H', '1') || | 
|  2568         dwSymbol == FXBSTR_ID(0, 0, 'h', '1') || |  2568         dwSymbol == FXBSTR_ID(0, 0, 'h', '1') || | 
|  2569         dwSymbol == FXBSTR_ID(0, 0, 'K', '1')) { |  2569         dwSymbol == FXBSTR_ID(0, 0, 'K', '1')) { | 
|  2570       if (!FX_IsDigit(str[cc])) { |  2570       if (!FX_IsDigit(str[cc])) { | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2659       } else if ((cc + wsPM.GetLength() <= len) && |  2659       } else if ((cc + wsPM.GetLength() <= len) && | 
|  2660                  (CFX_WideStringC(str + cc, wsPM.GetLength()) == wsPM)) { |  2660                  (CFX_WideStringC(str + cc, wsPM.GetLength()) == wsPM)) { | 
|  2661         cc += wsPM.GetLength(); |  2661         cc += wsPM.GetLength(); | 
|  2662         bHasA = TRUE; |  2662         bHasA = TRUE; | 
|  2663         bPM = TRUE; |  2663         bPM = TRUE; | 
|  2664       } |  2664       } | 
|  2665     } else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) { |  2665     } else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) { | 
|  2666       if (cc + 3 > len) { |  2666       if (cc + 3 > len) { | 
|  2667         continue; |  2667         continue; | 
|  2668       } |  2668       } | 
|  2669       FX_DWORD dwHash = str[cc++]; |  2669       uint32_t dwHash = str[cc++]; | 
|  2670       dwHash = (dwHash << 8) | str[cc++]; |  2670       dwHash = (dwHash << 8) | str[cc++]; | 
|  2671       dwHash = (dwHash << 8) | str[cc++]; |  2671       dwHash = (dwHash << 8) | str[cc++]; | 
|  2672       if (dwHash == FXBSTR_ID(0, 'G', 'M', 'T')) { |  2672       if (dwHash == FXBSTR_ID(0, 'G', 'M', 'T')) { | 
|  2673         FX_TIMEZONE tzDiff; |  2673         FX_TIMEZONE tzDiff; | 
|  2674         tzDiff.tzHour = 0; |  2674         tzDiff.tzHour = 0; | 
|  2675         tzDiff.tzMinute = 0; |  2675         tzDiff.tzMinute = 0; | 
|  2676         if (cc < len && (str[cc] == '-' || str[cc] == '+')) { |  2676         if (cc < len && (str[cc] == '-' || str[cc] == '+')) { | 
|  2677           cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); |  2677           cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); | 
|  2678         } |  2678         } | 
|  2679         FX_ResolveZone(hour, minute, tzDiff, pLocale); |  2679         FX_ResolveZone(hour, minute, tzDiff, pLocale); | 
|  2680       } else { |  2680       } else { | 
|  2681         const FX_LOCALETIMEZONEINFO* pEnd = |  2681         const FX_LOCALETIMEZONEINFO* pEnd = | 
|  2682             g_FXLocaleTimeZoneData + FX_ArraySize(g_FXLocaleTimeZoneData); |  2682             g_FXLocaleTimeZoneData + FX_ArraySize(g_FXLocaleTimeZoneData); | 
|  2683         const FX_LOCALETIMEZONEINFO* pTimeZoneInfo = |  2683         const FX_LOCALETIMEZONEINFO* pTimeZoneInfo = | 
|  2684             std::lower_bound(g_FXLocaleTimeZoneData, pEnd, dwHash, |  2684             std::lower_bound(g_FXLocaleTimeZoneData, pEnd, dwHash, | 
|  2685                              [](const FX_LOCALETIMEZONEINFO& info, |  2685                              [](const FX_LOCALETIMEZONEINFO& info, | 
|  2686                                 FX_DWORD hash) { return info.uHash < hash; }); |  2686                                 uint32_t hash) { return info.uHash < hash; }); | 
|  2687         if (pTimeZoneInfo < pEnd && dwHash == pTimeZoneInfo->uHash) { |  2687         if (pTimeZoneInfo < pEnd && dwHash == pTimeZoneInfo->uHash) { | 
|  2688           hour += pTimeZoneInfo->iHour; |  2688           hour += pTimeZoneInfo->iHour; | 
|  2689           minute += pTimeZoneInfo->iHour > 0 ? pTimeZoneInfo->iMinute |  2689           minute += pTimeZoneInfo->iHour > 0 ? pTimeZoneInfo->iMinute | 
|  2690                                              : -pTimeZoneInfo->iMinute; |  2690                                              : -pTimeZoneInfo->iMinute; | 
|  2691         } |  2691         } | 
|  2692       } |  2692       } | 
|  2693     } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) { |  2693     } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) { | 
|  2694       if (str[cc] != 'Z') { |  2694       if (str[cc] != 'Z') { | 
|  2695         FX_TIMEZONE tzDiff; |  2695         FX_TIMEZONE tzDiff; | 
|  2696         cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); |  2696         cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); | 
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2902   } |  2902   } | 
|  2903   return iTreading; |  2903   return iTreading; | 
|  2904 } |  2904 } | 
|  2905 FX_BOOL CFX_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, |  2905 FX_BOOL CFX_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, | 
|  2906                                        const CFX_WideString& wsPattern, |  2906                                        const CFX_WideString& wsPattern, | 
|  2907                                        CFX_WideString& wsOutput) { |  2907                                        CFX_WideString& wsOutput) { | 
|  2908   if (wsInputNum.IsEmpty() || wsPattern.IsEmpty()) { |  2908   if (wsInputNum.IsEmpty() || wsPattern.IsEmpty()) { | 
|  2909     return FALSE; |  2909     return FALSE; | 
|  2910   } |  2910   } | 
|  2911   int32_t dot_index_f = -1; |  2911   int32_t dot_index_f = -1; | 
|  2912   FX_DWORD dwNumStyle = 0; |  2912   uint32_t dwNumStyle = 0; | 
|  2913   CFX_WideString wsNumFormat; |  2913   CFX_WideString wsNumFormat; | 
|  2914   IFX_Locale* pLocale = |  2914   IFX_Locale* pLocale = | 
|  2915       GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); |  2915       GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); | 
|  2916   if (!pLocale || wsNumFormat.IsEmpty()) { |  2916   if (!pLocale || wsNumFormat.IsEmpty()) { | 
|  2917     return FALSE; |  2917     return FALSE; | 
|  2918   } |  2918   } | 
|  2919   int32_t cc = 0, ccf = 0; |  2919   int32_t cc = 0, ccf = 0; | 
|  2920   const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; |  2920   const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; | 
|  2921   int lenf = wsNumFormat.GetLength(); |  2921   int lenf = wsNumFormat.GetLength(); | 
|  2922   CFX_WideString wsSrcNum = wsInputNum; |  2922   CFX_WideString wsSrcNum = wsInputNum; | 
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3335     pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); |  3335     pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); | 
|  3336     wsOutput = |  3336     wsOutput = | 
|  3337         wsMinusymbol + wsOutput[0] + wsOutput.Mid(1, wsOutput.GetLength() - 1); |  3337         wsMinusymbol + wsOutput[0] + wsOutput.Mid(1, wsOutput.GetLength() - 1); | 
|  3338   } |  3338   } | 
|  3339   return TRUE; |  3339   return TRUE; | 
|  3340 } |  3340 } | 
|  3341 FX_BOOL CFX_FormatString::FormatLCNumeric(CFX_LCNumeric& lcNum, |  3341 FX_BOOL CFX_FormatString::FormatLCNumeric(CFX_LCNumeric& lcNum, | 
|  3342                                           const CFX_WideString& wsPattern, |  3342                                           const CFX_WideString& wsPattern, | 
|  3343                                           CFX_WideString& wsOutput) { |  3343                                           CFX_WideString& wsOutput) { | 
|  3344   int32_t dot_index_f = -1; |  3344   int32_t dot_index_f = -1; | 
|  3345   FX_DWORD dwNumStyle = 0; |  3345   uint32_t dwNumStyle = 0; | 
|  3346   CFX_WideString wsNumFormat; |  3346   CFX_WideString wsNumFormat; | 
|  3347   IFX_Locale* pLocale = |  3347   IFX_Locale* pLocale = | 
|  3348       GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); |  3348       GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); | 
|  3349   if (!pLocale || wsNumFormat.IsEmpty()) { |  3349   if (!pLocale || wsNumFormat.IsEmpty()) { | 
|  3350     return FALSE; |  3350     return FALSE; | 
|  3351   } |  3351   } | 
|  3352   int32_t cc = 0, ccf = 0; |  3352   int32_t cc = 0, ccf = 0; | 
|  3353   const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; |  3353   const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; | 
|  3354   int lenf = wsNumFormat.GetLength(); |  3354   int lenf = wsNumFormat.GetLength(); | 
|  3355   double dbOrgRaw = lcNum.GetDouble(); |  3355   double dbOrgRaw = lcNum.GetDouble(); | 
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3979   int32_t lenf = wsDatePattern.GetLength(); |  3979   int32_t lenf = wsDatePattern.GetLength(); | 
|  3980   while (ccf < lenf) { |  3980   while (ccf < lenf) { | 
|  3981     if (strf[ccf] == '\'') { |  3981     if (strf[ccf] == '\'') { | 
|  3982       wsResult += FX_GetLiteralText(strf, ccf, lenf); |  3982       wsResult += FX_GetLiteralText(strf, ccf, lenf); | 
|  3983       ccf++; |  3983       ccf++; | 
|  3984       continue; |  3984       continue; | 
|  3985     } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { |  3985     } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { | 
|  3986       wsResult += strf[ccf++]; |  3986       wsResult += strf[ccf++]; | 
|  3987       continue; |  3987       continue; | 
|  3988     } |  3988     } | 
|  3989     FX_DWORD dwSymbolNum = 1; |  3989     uint32_t dwSymbolNum = 1; | 
|  3990     FX_DWORD dwSymbol = strf[ccf++]; |  3990     uint32_t dwSymbol = strf[ccf++]; | 
|  3991     while (ccf < lenf && strf[ccf] == dwSymbol) { |  3991     while (ccf < lenf && strf[ccf] == dwSymbol) { | 
|  3992       ccf++; |  3992       ccf++; | 
|  3993       dwSymbolNum++; |  3993       dwSymbolNum++; | 
|  3994     } |  3994     } | 
|  3995     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); |  3995     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); | 
|  3996     if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { |  3996     if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { | 
|  3997       CFX_WideString wsDay; |  3997       CFX_WideString wsDay; | 
|  3998       wsDay.Format(L"%d", day); |  3998       wsDay.Format(L"%d", day); | 
|  3999       wsResult += wsDay; |  3999       wsResult += wsDay; | 
|  4000     } else if (dwSymbol == FXBSTR_ID(0, 0, 'D', '2')) { |  4000     } else if (dwSymbol == FXBSTR_ID(0, 0, 'D', '2')) { | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4105   } |  4105   } | 
|  4106   while (ccf < lenf) { |  4106   while (ccf < lenf) { | 
|  4107     if (strf[ccf] == '\'') { |  4107     if (strf[ccf] == '\'') { | 
|  4108       wsResult += FX_GetLiteralText(strf, ccf, lenf); |  4108       wsResult += FX_GetLiteralText(strf, ccf, lenf); | 
|  4109       ccf++; |  4109       ccf++; | 
|  4110       continue; |  4110       continue; | 
|  4111     } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) < 0) { |  4111     } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) < 0) { | 
|  4112       wsResult += strf[ccf++]; |  4112       wsResult += strf[ccf++]; | 
|  4113       continue; |  4113       continue; | 
|  4114     } |  4114     } | 
|  4115     FX_DWORD dwSymbolNum = 1; |  4115     uint32_t dwSymbolNum = 1; | 
|  4116     FX_DWORD dwSymbol = strf[ccf++]; |  4116     uint32_t dwSymbol = strf[ccf++]; | 
|  4117     while (ccf < lenf && strf[ccf] == dwSymbol) { |  4117     while (ccf < lenf && strf[ccf] == dwSymbol) { | 
|  4118       ccf++; |  4118       ccf++; | 
|  4119       dwSymbolNum++; |  4119       dwSymbolNum++; | 
|  4120     } |  4120     } | 
|  4121     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); |  4121     dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); | 
|  4122     if (dwSymbol == FXBSTR_ID(0, 0, 'h', '1')) { |  4122     if (dwSymbol == FXBSTR_ID(0, 0, 'h', '1')) { | 
|  4123       if (wHour > 12) { |  4123       if (wHour > 12) { | 
|  4124         wHour -= 12; |  4124         wHour -= 12; | 
|  4125       } |  4125       } | 
|  4126       CFX_WideString wsHour; |  4126       CFX_WideString wsHour; | 
| (...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5021 } |  5021 } | 
|  5022 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { |  5022 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { | 
|  5023   return Multiply(val); |  5023   return Multiply(val); | 
|  5024 } |  5024 } | 
|  5025 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { |  5025 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { | 
|  5026   return Divide(val); |  5026   return Divide(val); | 
|  5027 } |  5027 } | 
|  5028 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { |  5028 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { | 
|  5029   return Modulus(val); |  5029   return Modulus(val); | 
|  5030 } |  5030 } | 
| OLD | NEW |