Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(338)

Side by Side Diff: xfa/fgas/localization/fgas_locale.cpp

Issue 1882043004: Remove implicit cast from CFX_WideString to (const wchar_t*) (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: win error #2 Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fgas/font/fgas_stdfontmgr.cpp ('k') | xfa/fgas/localization/fgas_localemgr.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 } 210 }
211 void CFX_Locale::GetTimeZone(FX_TIMEZONE& tz) const { 211 void CFX_Locale::GetTimeZone(FX_TIMEZONE& tz) const {
212 tz.tzHour = 0; 212 tz.tzHour = 0;
213 tz.tzMinute = 0; 213 tz.tzMinute = 0;
214 if (!m_pElement) { 214 if (!m_pElement) {
215 return; 215 return;
216 } 216 }
217 CXML_Element* pxmlTimeZone = m_pElement->GetElement("", "timeZone"); 217 CXML_Element* pxmlTimeZone = m_pElement->GetElement("", "timeZone");
218 if (pxmlTimeZone) { 218 if (pxmlTimeZone) {
219 CFX_WideString wsTimeZone = pxmlTimeZone->GetContent(0); 219 CFX_WideString wsTimeZone = pxmlTimeZone->GetContent(0);
220 FX_ParseTimeZone(wsTimeZone, wsTimeZone.GetLength(), tz); 220 FX_ParseTimeZone(wsTimeZone.c_str(), wsTimeZone.GetLength(), tz);
221 } 221 }
222 } 222 }
223 void CFX_Locale::GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD) const { 223 void CFX_Locale::GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD) const {
224 if (!m_pElement) { 224 if (!m_pElement) {
225 return; 225 return;
226 } 226 }
227 FX_GetCalendarSymbol(m_pElement, "era", bAD ? 0 : 1, FALSE, wsEraName); 227 FX_GetCalendarSymbol(m_pElement, "era", bAD ? 0 : 1, FALSE, wsEraName);
228 } 228 }
229 static void FX_GetPattern(CXML_Element* pXmlElement, 229 static void FX_GetPattern(CXML_Element* pXmlElement,
230 const CFX_ByteString& bsCategory, 230 const CFX_ByteString& bsCategory,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 lcnum.m_Fractional = 0; 308 lcnum.m_Fractional = 0;
309 lcnum.m_Exponent = 0; 309 lcnum.m_Exponent = 0;
310 310
311 if (wsValue.IsEmpty()) 311 if (wsValue.IsEmpty())
312 return FALSE; 312 return FALSE;
313 313
314 const int32_t nIntegralMaxLen = 17; 314 const int32_t nIntegralMaxLen = 17;
315 int32_t cc = 0; 315 int32_t cc = 0;
316 bool bNegative = false; 316 bool bNegative = false;
317 bool bExpSign = false; 317 bool bExpSign = false;
318 const FX_WCHAR* str = (const FX_WCHAR*)wsValue; 318 const FX_WCHAR* str = wsValue.c_str();
319 int32_t len = wsValue.GetLength(); 319 int32_t len = wsValue.GetLength();
320 while (cc < len && FX_IsSpace(str[cc])) 320 while (cc < len && FX_IsSpace(str[cc]))
321 cc++; 321 cc++;
322 322
323 if (cc >= len) 323 if (cc >= len)
324 return FALSE; 324 return FALSE;
325 325
326 if (str[cc] == '+') { 326 if (str[cc] == '+') {
327 cc++; 327 cc++;
328 } else if (str[cc] == '-') { 328 } else if (str[cc] == '-') {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } 455 }
456 return wsResult; 456 return wsResult;
457 } 457 }
458 458
459 CFX_FormatString::CFX_FormatString(IFX_LocaleMgr* pLocaleMgr, FX_BOOL bUseLCID) 459 CFX_FormatString::CFX_FormatString(IFX_LocaleMgr* pLocaleMgr, FX_BOOL bUseLCID)
460 : m_pLocaleMgr(pLocaleMgr), m_bUseLCID(bUseLCID) {} 460 : m_pLocaleMgr(pLocaleMgr), m_bUseLCID(bUseLCID) {}
461 CFX_FormatString::~CFX_FormatString() {} 461 CFX_FormatString::~CFX_FormatString() {}
462 void CFX_FormatString::SplitFormatString(const CFX_WideString& wsFormatString, 462 void CFX_FormatString::SplitFormatString(const CFX_WideString& wsFormatString,
463 CFX_WideStringArray& wsPatterns) { 463 CFX_WideStringArray& wsPatterns) {
464 int32_t iStrLen = wsFormatString.GetLength(); 464 int32_t iStrLen = wsFormatString.GetLength();
465 const FX_WCHAR* pStr = (const FX_WCHAR*)wsFormatString; 465 const FX_WCHAR* pStr = wsFormatString.c_str();
466 const FX_WCHAR* pToken = pStr; 466 const FX_WCHAR* pToken = pStr;
467 const FX_WCHAR* pEnd = pStr + iStrLen; 467 const FX_WCHAR* pEnd = pStr + iStrLen;
468 FX_BOOL iQuote = FALSE; 468 FX_BOOL iQuote = FALSE;
469 while (TRUE) { 469 while (TRUE) {
470 if (pStr >= pEnd) { 470 if (pStr >= pEnd) {
471 CFX_WideString sub(pToken, pStr - pToken); 471 CFX_WideString sub(pToken, pStr - pToken);
472 wsPatterns.Add(sub); 472 wsPatterns.Add(sub);
473 return; 473 return;
474 } else if (*pStr == '\'') { 474 } else if (*pStr == '\'') {
475 iQuote = !iQuote; 475 iQuote = !iQuote;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 } 566 }
567 wsOutput = pStrPattern[iPattern--] + wsOutput; 567 wsOutput = pStrPattern[iPattern--] + wsOutput;
568 } 568 }
569 return wsOutput; 569 return wsOutput;
570 } 570 }
571 FX_LOCALECATEGORY CFX_FormatString::GetCategory( 571 FX_LOCALECATEGORY CFX_FormatString::GetCategory(
572 const CFX_WideString& wsPattern) { 572 const CFX_WideString& wsPattern) {
573 FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown; 573 FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown;
574 int32_t ccf = 0; 574 int32_t ccf = 0;
575 int32_t iLenf = wsPattern.GetLength(); 575 int32_t iLenf = wsPattern.GetLength();
576 const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; 576 const FX_WCHAR* pStr = wsPattern.c_str();
577 FX_BOOL bBraceOpen = FALSE; 577 FX_BOOL bBraceOpen = FALSE;
578 while (ccf < iLenf) { 578 while (ccf < iLenf) {
579 if (pStr[ccf] == '\'') { 579 if (pStr[ccf] == '\'') {
580 FX_GetLiteralText(pStr, ccf, iLenf); 580 FX_GetLiteralText(pStr, ccf, iLenf);
581 } else if (!bBraceOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { 581 } else if (!bBraceOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) {
582 CFX_WideString wsCategory(pStr[ccf]); 582 CFX_WideString wsCategory(pStr[ccf]);
583 ccf++; 583 ccf++;
584 while (TRUE) { 584 while (TRUE) {
585 if (ccf == iLenf) { 585 if (ccf == iLenf) {
586 return eCategory; 586 return eCategory;
587 } 587 }
588 if (pStr[ccf] == '.' || pStr[ccf] == '(') { 588 if (pStr[ccf] == '.' || pStr[ccf] == '(') {
589 break; 589 break;
590 } 590 }
591 if (pStr[ccf] == '{') { 591 if (pStr[ccf] == '{') {
592 bBraceOpen = TRUE; 592 bBraceOpen = TRUE;
593 break; 593 break;
594 } 594 }
595 wsCategory += pStr[ccf]; 595 wsCategory += pStr[ccf];
596 ccf++; 596 ccf++;
597 } 597 }
598 uint32_t dwHash = 598 uint32_t dwHash =
599 FX_HashCode_String_GetW(wsCategory, wsCategory.GetLength()); 599 FX_HashCode_String_GetW(wsCategory.c_str(), wsCategory.GetLength());
600 if (dwHash == FX_LOCALECATEGORY_DateHash) { 600 if (dwHash == FX_LOCALECATEGORY_DateHash) {
601 if (eCategory == FX_LOCALECATEGORY_Time) { 601 if (eCategory == FX_LOCALECATEGORY_Time) {
602 return FX_LOCALECATEGORY_DateTime; 602 return FX_LOCALECATEGORY_DateTime;
603 } 603 }
604 eCategory = FX_LOCALECATEGORY_Date; 604 eCategory = FX_LOCALECATEGORY_Date;
605 } else if (dwHash == FX_LOCALECATEGORY_TimeHash) { 605 } else if (dwHash == FX_LOCALECATEGORY_TimeHash) {
606 if (eCategory == FX_LOCALECATEGORY_Date) { 606 if (eCategory == FX_LOCALECATEGORY_Date) {
607 return FX_LOCALECATEGORY_DateTime; 607 return FX_LOCALECATEGORY_DateTime;
608 } 608 }
609 eCategory = FX_LOCALECATEGORY_Time; 609 eCategory = FX_LOCALECATEGORY_Time;
(...skipping 16 matching lines...) Expand all
626 return eCategory; 626 return eCategory;
627 } 627 }
628 static uint16_t FX_WStringToLCID(const FX_WCHAR* pstrLCID) { 628 static uint16_t FX_WStringToLCID(const FX_WCHAR* pstrLCID) {
629 if (!pstrLCID) { 629 if (!pstrLCID) {
630 return 0; 630 return 0;
631 } 631 }
632 wchar_t* pEnd; 632 wchar_t* pEnd;
633 return (uint16_t)wcstol((wchar_t*)pstrLCID, &pEnd, 16); 633 return (uint16_t)wcstol((wchar_t*)pstrLCID, &pEnd, 16);
634 } 634 }
635 uint16_t CFX_FormatString::GetLCID(const CFX_WideString& wsPattern) { 635 uint16_t CFX_FormatString::GetLCID(const CFX_WideString& wsPattern) {
636 return FX_WStringToLCID(GetLocaleName(wsPattern)); 636 return FX_WStringToLCID(GetLocaleName(wsPattern).c_str());
637 } 637 }
638 CFX_WideString CFX_FormatString::GetLocaleName( 638 CFX_WideString CFX_FormatString::GetLocaleName(
639 const CFX_WideString& wsPattern) { 639 const CFX_WideString& wsPattern) {
640 int32_t ccf = 0; 640 int32_t ccf = 0;
641 int32_t iLenf = wsPattern.GetLength(); 641 int32_t iLenf = wsPattern.GetLength();
642 const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; 642 const FX_WCHAR* pStr = wsPattern.c_str();
643 while (ccf < iLenf) { 643 while (ccf < iLenf) {
644 if (pStr[ccf] == '\'') { 644 if (pStr[ccf] == '\'') {
645 FX_GetLiteralText(pStr, ccf, iLenf); 645 FX_GetLiteralText(pStr, ccf, iLenf);
646 } else if (pStr[ccf] == '(') { 646 } else if (pStr[ccf] == '(') {
647 ccf++; 647 ccf++;
648 CFX_WideString wsLCID; 648 CFX_WideString wsLCID;
649 while (ccf < iLenf && pStr[ccf] != ')') { 649 while (ccf < iLenf && pStr[ccf] != ')') {
650 wsLCID += pStr[ccf++]; 650 wsLCID += pStr[ccf++];
651 } 651 }
652 return wsLCID; 652 return wsLCID;
653 } 653 }
654 ccf++; 654 ccf++;
655 } 655 }
656 return CFX_WideString(); 656 return CFX_WideString();
657 } 657 }
658 IFX_Locale* CFX_FormatString::GetTextFormat(const CFX_WideString& wsPattern, 658 IFX_Locale* CFX_FormatString::GetTextFormat(const CFX_WideString& wsPattern,
659 const CFX_WideStringC& wsCategory, 659 const CFX_WideStringC& wsCategory,
660 CFX_WideString& wsPurgePattern) { 660 CFX_WideString& wsPurgePattern) {
661 IFX_Locale* pLocale = NULL; 661 IFX_Locale* pLocale = NULL;
662 int32_t ccf = 0; 662 int32_t ccf = 0;
663 int32_t iLenf = wsPattern.GetLength(); 663 int32_t iLenf = wsPattern.GetLength();
664 const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; 664 const FX_WCHAR* pStr = wsPattern.c_str();
665 FX_BOOL bBrackOpen = FALSE; 665 FX_BOOL bBrackOpen = FALSE;
666 while (ccf < iLenf) { 666 while (ccf < iLenf) {
667 if (pStr[ccf] == '\'') { 667 if (pStr[ccf] == '\'') {
668 int32_t iCurChar = ccf; 668 int32_t iCurChar = ccf;
669 FX_GetLiteralText(pStr, ccf, iLenf); 669 FX_GetLiteralText(pStr, ccf, iLenf);
670 wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); 670 wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
671 } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { 671 } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) {
672 CFX_WideString wsSearchCategory(pStr[ccf]); 672 CFX_WideString wsSearchCategory(pStr[ccf]);
673 ccf++; 673 ccf++;
674 while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' && 674 while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' &&
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 #define FX_NUMSTYLE_Exponent 0x02 710 #define FX_NUMSTYLE_Exponent 0x02
711 #define FX_NUMSTYLE_DotVorv 0x04 711 #define FX_NUMSTYLE_DotVorv 0x04
712 IFX_Locale* CFX_FormatString::GetNumericFormat(const CFX_WideString& wsPattern, 712 IFX_Locale* CFX_FormatString::GetNumericFormat(const CFX_WideString& wsPattern,
713 int32_t& iDotIndex, 713 int32_t& iDotIndex,
714 uint32_t& dwStyle, 714 uint32_t& dwStyle,
715 CFX_WideString& wsPurgePattern) { 715 CFX_WideString& wsPurgePattern) {
716 dwStyle = 0; 716 dwStyle = 0;
717 IFX_Locale* pLocale = NULL; 717 IFX_Locale* pLocale = NULL;
718 int32_t ccf = 0; 718 int32_t ccf = 0;
719 int32_t iLenf = wsPattern.GetLength(); 719 int32_t iLenf = wsPattern.GetLength();
720 const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; 720 const FX_WCHAR* pStr = wsPattern.c_str();
721 FX_BOOL bFindDot = FALSE; 721 FX_BOOL bFindDot = FALSE;
722 FX_BOOL bBrackOpen = FALSE; 722 FX_BOOL bBrackOpen = FALSE;
723 while (ccf < iLenf) { 723 while (ccf < iLenf) {
724 if (pStr[ccf] == '\'') { 724 if (pStr[ccf] == '\'') {
725 int32_t iCurChar = ccf; 725 int32_t iCurChar = ccf;
726 FX_GetLiteralText(pStr, ccf, iLenf); 726 FX_GetLiteralText(pStr, ccf, iLenf);
727 wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); 727 wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
728 } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { 728 } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) {
729 CFX_WideString wsCategory(pStr[ccf]); 729 CFX_WideString wsCategory(pStr[ccf]);
730 ccf++; 730 ccf++;
(...skipping 17 matching lines...) Expand all
748 pLocale = GetPatternLocale(wsLCID.AsStringC()); 748 pLocale = GetPatternLocale(wsLCID.AsStringC());
749 } else if (pStr[ccf] == '{') { 749 } else if (pStr[ccf] == '{') {
750 bBrackOpen = TRUE; 750 bBrackOpen = TRUE;
751 break; 751 break;
752 } else if (pStr[ccf] == '.') { 752 } else if (pStr[ccf] == '.') {
753 CFX_WideString wsSubCategory; 753 CFX_WideString wsSubCategory;
754 ccf++; 754 ccf++;
755 while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { 755 while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') {
756 wsSubCategory += pStr[ccf++]; 756 wsSubCategory += pStr[ccf++];
757 } 757 }
758 uint32_t dwSubHash = 758 uint32_t dwSubHash = FX_HashCode_String_GetW(
759 FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); 759 wsSubCategory.c_str(), wsSubCategory.GetLength());
760 FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal; 760 FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal;
761 for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) { 761 for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) {
762 if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) { 762 if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) {
763 eSubCategory = (FX_LOCALENUMSUBCATEGORY)g_FXLocaleNumSubCatData[i] 763 eSubCategory = (FX_LOCALENUMSUBCATEGORY)g_FXLocaleNumSubCatData[i]
764 .eSubCategory; 764 .eSubCategory;
765 break; 765 break;
766 } 766 }
767 } 767 }
768 wsSubCategory.Empty(); 768 wsSubCategory.Empty();
769 if (!pLocale) { 769 if (!pLocale) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 if (!pLocale) { 809 if (!pLocale) {
810 pLocale = m_pLocaleMgr->GetDefLocale(); 810 pLocale = m_pLocaleMgr->GetDefLocale();
811 } 811 }
812 return pLocale; 812 return pLocale;
813 } 813 }
814 static FX_BOOL FX_GetNumericDotIndex(const CFX_WideString& wsNum, 814 static FX_BOOL FX_GetNumericDotIndex(const CFX_WideString& wsNum,
815 const CFX_WideString& wsDotSymbol, 815 const CFX_WideString& wsDotSymbol,
816 int32_t& iDotIndex) { 816 int32_t& iDotIndex) {
817 int32_t ccf = 0; 817 int32_t ccf = 0;
818 int32_t iLenf = wsNum.GetLength(); 818 int32_t iLenf = wsNum.GetLength();
819 const FX_WCHAR* pStr = (const FX_WCHAR*)wsNum; 819 const FX_WCHAR* pStr = wsNum.c_str();
820 int32_t iLenDot = wsDotSymbol.GetLength(); 820 int32_t iLenDot = wsDotSymbol.GetLength();
821 while (ccf < iLenf) { 821 while (ccf < iLenf) {
822 if (pStr[ccf] == '\'') { 822 if (pStr[ccf] == '\'') {
823 FX_GetLiteralText(pStr, ccf, iLenf); 823 FX_GetLiteralText(pStr, ccf, iLenf);
824 } else if (ccf + iLenDot <= iLenf && 824 } else if (ccf + iLenDot <= iLenf &&
825 !FXSYS_wcsncmp(pStr + ccf, (const FX_WCHAR*)wsDotSymbol, 825 !FXSYS_wcsncmp(pStr + ccf, wsDotSymbol.c_str(), iLenDot)) {
826 iLenDot)) {
827 iDotIndex = ccf; 826 iDotIndex = ccf;
828 return TRUE; 827 return TRUE;
829 } 828 }
830 ccf++; 829 ccf++;
831 } 830 }
832 iDotIndex = wsNum.Find('.'); 831 iDotIndex = wsNum.Find('.');
833 if (iDotIndex < 0) { 832 if (iDotIndex < 0) {
834 iDotIndex = iLenf; 833 iDotIndex = iLenf;
835 return FALSE; 834 return FALSE;
836 } 835 }
837 return TRUE; 836 return TRUE;
838 } 837 }
839 FX_BOOL CFX_FormatString::ParseText(const CFX_WideString& wsSrcText, 838 FX_BOOL CFX_FormatString::ParseText(const CFX_WideString& wsSrcText,
840 const CFX_WideString& wsPattern, 839 const CFX_WideString& wsPattern,
841 CFX_WideString& wsValue) { 840 CFX_WideString& wsValue) {
842 wsValue.Empty(); 841 wsValue.Empty();
843 if (wsSrcText.IsEmpty() || wsPattern.IsEmpty()) { 842 if (wsSrcText.IsEmpty() || wsPattern.IsEmpty()) {
844 return FALSE; 843 return FALSE;
845 } 844 }
846 CFX_WideString wsTextFormat; 845 CFX_WideString wsTextFormat;
847 GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat); 846 GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat);
848 if (wsTextFormat.IsEmpty()) { 847 if (wsTextFormat.IsEmpty()) {
849 return FALSE; 848 return FALSE;
850 } 849 }
851 int32_t iText = 0, iPattern = 0; 850 int32_t iText = 0, iPattern = 0;
852 const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; 851 const FX_WCHAR* pStrText = wsSrcText.c_str();
853 int32_t iLenText = wsSrcText.GetLength(); 852 int32_t iLenText = wsSrcText.GetLength();
854 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 853 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
855 int32_t iLenPattern = wsTextFormat.GetLength(); 854 int32_t iLenPattern = wsTextFormat.GetLength();
856 while (iPattern < iLenPattern && iText < iLenText) { 855 while (iPattern < iLenPattern && iText < iLenText) {
857 switch (pStrPattern[iPattern]) { 856 switch (pStrPattern[iPattern]) {
858 case '\'': { 857 case '\'': {
859 CFX_WideString wsLiteral = 858 CFX_WideString wsLiteral =
860 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 859 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
861 int32_t iLiteralLen = wsLiteral.GetLength(); 860 int32_t iLiteralLen = wsLiteral.GetLength();
862 if (iText + iLiteralLen > iLenText || 861 if (iText + iLiteralLen > iLenText ||
863 FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, 862 FXSYS_wcsncmp(pStrText + iText, wsLiteral.c_str(), iLiteralLen)) {
864 iLiteralLen)) {
865 wsValue = wsSrcText; 863 wsValue = wsSrcText;
866 return FALSE; 864 return FALSE;
867 } 865 }
868 iText += iLiteralLen; 866 iText += iLiteralLen;
869 iPattern++; 867 iPattern++;
870 break; 868 break;
871 } 869 }
872 case 'A': 870 case 'A':
873 if (FX_IsAlpha(pStrText[iText])) { 871 if (FX_IsAlpha(pStrText[iText])) {
874 wsValue += pStrText[iText]; 872 wsValue += pStrText[iText];
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 int32_t iExponent = 0; 924 int32_t iExponent = 0;
927 CFX_WideString wsDotSymbol; 925 CFX_WideString wsDotSymbol;
928 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); 926 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol);
929 CFX_WideString wsGroupSymbol; 927 CFX_WideString wsGroupSymbol;
930 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); 928 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
931 int32_t iGroupLen = wsGroupSymbol.GetLength(); 929 int32_t iGroupLen = wsGroupSymbol.GetLength();
932 CFX_WideString wsMinus; 930 CFX_WideString wsMinus;
933 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus); 931 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus);
934 int32_t iMinusLen = wsMinus.GetLength(); 932 int32_t iMinusLen = wsMinus.GetLength();
935 int cc = 0, ccf = 0; 933 int cc = 0, ccf = 0;
936 const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; 934 const FX_WCHAR* str = wsSrcNum.c_str();
937 int len = wsSrcNum.GetLength(); 935 int len = wsSrcNum.GetLength();
938 const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; 936 const FX_WCHAR* strf = wsNumFormat.c_str();
939 int lenf = wsNumFormat.GetLength(); 937 int lenf = wsNumFormat.GetLength();
940 double dbRetValue = 0; 938 double dbRetValue = 0;
941 double coeff = 1; 939 double coeff = 1;
942 FX_BOOL bHavePercentSymbol = FALSE; 940 FX_BOOL bHavePercentSymbol = FALSE;
943 FX_BOOL bNeg = FALSE; 941 FX_BOOL bNeg = FALSE;
944 FX_BOOL bReverseParse = FALSE; 942 FX_BOOL bReverseParse = FALSE;
945 int32_t dot_index = 0; 943 int32_t dot_index = 0;
946 if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) && 944 if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) &&
947 (dwFormatStyle & FX_NUMSTYLE_DotVorv)) { 945 (dwFormatStyle & FX_NUMSTYLE_DotVorv)) {
948 bReverseParse = TRUE; 946 bReverseParse = TRUE;
949 } 947 }
950 bReverseParse = FALSE; 948 bReverseParse = FALSE;
951 if (bReverseParse) { 949 if (bReverseParse) {
952 ccf = lenf - 1; 950 ccf = lenf - 1;
953 cc = len - 1; 951 cc = len - 1;
954 while (ccf > dot_index_f && cc >= 0) { 952 while (ccf > dot_index_f && cc >= 0) {
955 switch (strf[ccf]) { 953 switch (strf[ccf]) {
956 case '\'': { 954 case '\'': {
957 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); 955 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf);
958 int32_t iLiteralLen = wsLiteral.GetLength(); 956 int32_t iLiteralLen = wsLiteral.GetLength();
959 cc -= iLiteralLen - 1; 957 cc -= iLiteralLen - 1;
960 if (cc < 0 || FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, 958 if (cc < 0 ||
961 iLiteralLen)) { 959 FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
962 return FALSE; 960 return FALSE;
963 } 961 }
964 cc--; 962 cc--;
965 ccf--; 963 ccf--;
966 break; 964 break;
967 } 965 }
968 case '9': 966 case '9':
969 if (!FX_IsDigit(str[cc])) { 967 if (!FX_IsDigit(str[cc])) {
970 return FALSE; 968 return FALSE;
971 } 969 }
(...skipping 16 matching lines...) Expand all
988 coeff *= 0.1; 986 coeff *= 0.1;
989 } 987 }
990 cc--; 988 cc--;
991 ccf--; 989 ccf--;
992 break; 990 break;
993 case 'S': 991 case 'S':
994 if (str[cc] == '+' || str[cc] == ' ') { 992 if (str[cc] == '+' || str[cc] == ' ') {
995 cc--; 993 cc--;
996 } else { 994 } else {
997 cc -= iMinusLen - 1; 995 cc -= iMinusLen - 1;
998 if (cc < 0 || 996 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
999 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1000 return FALSE; 997 return FALSE;
1001 } 998 }
1002 cc--; 999 cc--;
1003 bNeg = TRUE; 1000 bNeg = TRUE;
1004 } 1001 }
1005 ccf--; 1002 ccf--;
1006 break; 1003 break;
1007 case 's': 1004 case 's':
1008 if (str[cc] == '+') { 1005 if (str[cc] == '+') {
1009 cc--; 1006 cc--;
1010 } else { 1007 } else {
1011 cc -= iMinusLen - 1; 1008 cc -= iMinusLen - 1;
1012 if (cc < 0 || 1009 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1013 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1014 return FALSE; 1010 return FALSE;
1015 } 1011 }
1016 cc--; 1012 cc--;
1017 bNeg = TRUE; 1013 bNeg = TRUE;
1018 } 1014 }
1019 ccf--; 1015 ccf--;
1020 break; 1016 break;
1021 case 'E': { 1017 case 'E': {
1022 if (cc >= dot_index) { 1018 if (cc >= dot_index) {
1023 return FALSE; 1019 return FALSE;
1024 } 1020 }
1025 FX_BOOL bExpSign = FALSE; 1021 FX_BOOL bExpSign = FALSE;
1026 while (cc >= 0) { 1022 while (cc >= 0) {
1027 if (str[cc] == 'E' || str[cc] == 'e') { 1023 if (str[cc] == 'E' || str[cc] == 'e') {
1028 break; 1024 break;
1029 } 1025 }
1030 if (FX_IsDigit(str[cc])) { 1026 if (FX_IsDigit(str[cc])) {
1031 iExponent = iExponent + (str[cc] - '0') * 10; 1027 iExponent = iExponent + (str[cc] - '0') * 10;
1032 cc--; 1028 cc--;
1033 continue; 1029 continue;
1034 } else if (str[cc] == '+') { 1030 } else if (str[cc] == '+') {
1035 cc--; 1031 cc--;
1036 continue; 1032 continue;
1037 } else if (cc - iMinusLen + 1 > 0 && 1033 } else if (cc - iMinusLen + 1 > 0 &&
1038 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), 1034 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1),
1039 (const FX_WCHAR*)wsMinus, iMinusLen)) { 1035 wsMinus.c_str(), iMinusLen)) {
1040 bExpSign = TRUE; 1036 bExpSign = TRUE;
1041 cc -= iMinusLen; 1037 cc -= iMinusLen;
1042 } else { 1038 } else {
1043 return FALSE; 1039 return FALSE;
1044 } 1040 }
1045 } 1041 }
1046 cc--; 1042 cc--;
1047 iExponent = bExpSign ? -iExponent : iExponent; 1043 iExponent = bExpSign ? -iExponent : iExponent;
1048 ccf--; 1044 ccf--;
1049 } break; 1045 } break;
1050 case '$': { 1046 case '$': {
1051 CFX_WideString wsSymbol; 1047 CFX_WideString wsSymbol;
1052 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, 1048 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol,
1053 wsSymbol); 1049 wsSymbol);
1054 int32_t iSymbolLen = wsSymbol.GetLength(); 1050 int32_t iSymbolLen = wsSymbol.GetLength();
1055 cc -= iSymbolLen - 1; 1051 cc -= iSymbolLen - 1;
1056 if (cc < 0 || 1052 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
1057 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) {
1058 return FALSE; 1053 return FALSE;
1059 } 1054 }
1060 cc--; 1055 cc--;
1061 ccf--; 1056 ccf--;
1062 } break; 1057 } break;
1063 case 'r': 1058 case 'r':
1064 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { 1059 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
1065 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { 1060 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
1066 bNeg = TRUE; 1061 bNeg = TRUE;
1067 cc -= 2; 1062 cc -= 2;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 case '.': 1106 case '.':
1112 case 'V': 1107 case 'V':
1113 case 'v': 1108 case 'v':
1114 return FALSE; 1109 return FALSE;
1115 case '%': { 1110 case '%': {
1116 CFX_WideString wsSymbol; 1111 CFX_WideString wsSymbol;
1117 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); 1112 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
1118 int32_t iSysmbolLen = wsSymbol.GetLength(); 1113 int32_t iSysmbolLen = wsSymbol.GetLength();
1119 cc -= iSysmbolLen - 1; 1114 cc -= iSysmbolLen - 1;
1120 if (cc < 0 || 1115 if (cc < 0 ||
1121 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) { 1116 FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
1122 return FALSE; 1117 return FALSE;
1123 } 1118 }
1124 cc--; 1119 cc--;
1125 ccf--; 1120 ccf--;
1126 bHavePercentSymbol = TRUE; 1121 bHavePercentSymbol = TRUE;
1127 } break; 1122 } break;
1128 case '8': 1123 case '8':
1129 while (ccf < lenf && strf[ccf] == '8') { 1124 while (ccf < lenf && strf[ccf] == '8') {
1130 ccf++; 1125 ccf++;
1131 } 1126 }
1132 while (cc < len && FX_IsDigit(str[cc])) { 1127 while (cc < len && FX_IsDigit(str[cc])) {
1133 dbRetValue = (str[cc] - '0') * coeff + dbRetValue; 1128 dbRetValue = (str[cc] - '0') * coeff + dbRetValue;
1134 coeff *= 0.1; 1129 coeff *= 0.1;
1135 cc++; 1130 cc++;
1136 } 1131 }
1137 break; 1132 break;
1138 case ',': { 1133 case ',': {
1139 if (cc >= 0) { 1134 if (cc >= 0) {
1140 cc -= iGroupLen - 1; 1135 cc -= iGroupLen - 1;
1141 if (cc >= 0 && 1136 if (cc >= 0 &&
1142 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, 1137 FXSYS_wcsncmp(str + cc, wsGroupSymbol.c_str(), iGroupLen) ==
1143 iGroupLen) == 0) { 1138 0) {
1144 cc--; 1139 cc--;
1145 } else { 1140 } else {
1146 cc += iGroupLen - 1; 1141 cc += iGroupLen - 1;
1147 } 1142 }
1148 } 1143 }
1149 ccf--; 1144 ccf--;
1150 } break; 1145 } break;
1151 case '(': 1146 case '(':
1152 if (str[cc] == L'(') { 1147 if (str[cc] == L'(') {
1153 bNeg = TRUE; 1148 bNeg = TRUE;
(...skipping 24 matching lines...) Expand all
1178 } 1173 }
1179 ccf = dot_index_f - 1; 1174 ccf = dot_index_f - 1;
1180 cc = dot_index - 1; 1175 cc = dot_index - 1;
1181 coeff = 1; 1176 coeff = 1;
1182 while (ccf >= 0 && cc >= 0) { 1177 while (ccf >= 0 && cc >= 0) {
1183 switch (strf[ccf]) { 1178 switch (strf[ccf]) {
1184 case '\'': { 1179 case '\'': {
1185 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); 1180 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf);
1186 int32_t iLiteralLen = wsLiteral.GetLength(); 1181 int32_t iLiteralLen = wsLiteral.GetLength();
1187 cc -= iLiteralLen - 1; 1182 cc -= iLiteralLen - 1;
1188 if (cc < 0 || 1183 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
1189 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) {
1190 return FALSE; 1184 return FALSE;
1191 } 1185 }
1192 cc--; 1186 cc--;
1193 ccf--; 1187 ccf--;
1194 break; 1188 break;
1195 } 1189 }
1196 case '9': 1190 case '9':
1197 if (!FX_IsDigit(str[cc])) { 1191 if (!FX_IsDigit(str[cc])) {
1198 return FALSE; 1192 return FALSE;
1199 } 1193 }
(...skipping 20 matching lines...) Expand all
1220 } else { 1214 } else {
1221 cc--; 1215 cc--;
1222 } 1216 }
1223 ccf--; 1217 ccf--;
1224 break; 1218 break;
1225 case 'S': 1219 case 'S':
1226 if (str[cc] == '+' || str[cc] == ' ') { 1220 if (str[cc] == '+' || str[cc] == ' ') {
1227 cc--; 1221 cc--;
1228 } else { 1222 } else {
1229 cc -= iMinusLen - 1; 1223 cc -= iMinusLen - 1;
1230 if (cc < 0 || 1224 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1231 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1232 return FALSE; 1225 return FALSE;
1233 } 1226 }
1234 cc--; 1227 cc--;
1235 bNeg = TRUE; 1228 bNeg = TRUE;
1236 } 1229 }
1237 ccf--; 1230 ccf--;
1238 break; 1231 break;
1239 case 's': 1232 case 's':
1240 if (str[cc] == '+') { 1233 if (str[cc] == '+') {
1241 cc--; 1234 cc--;
1242 } else { 1235 } else {
1243 cc -= iMinusLen - 1; 1236 cc -= iMinusLen - 1;
1244 if (cc < 0 || 1237 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1245 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1246 return FALSE; 1238 return FALSE;
1247 } 1239 }
1248 cc--; 1240 cc--;
1249 bNeg = TRUE; 1241 bNeg = TRUE;
1250 } 1242 }
1251 ccf--; 1243 ccf--;
1252 break; 1244 break;
1253 case 'E': { 1245 case 'E': {
1254 if (cc >= dot_index) { 1246 if (cc >= dot_index) {
1255 return FALSE; 1247 return FALSE;
1256 } 1248 }
1257 FX_BOOL bExpSign = FALSE; 1249 FX_BOOL bExpSign = FALSE;
1258 while (cc >= 0) { 1250 while (cc >= 0) {
1259 if (str[cc] == 'E' || str[cc] == 'e') { 1251 if (str[cc] == 'E' || str[cc] == 'e') {
1260 break; 1252 break;
1261 } 1253 }
1262 if (FX_IsDigit(str[cc])) { 1254 if (FX_IsDigit(str[cc])) {
1263 iExponent = iExponent + (str[cc] - '0') * 10; 1255 iExponent = iExponent + (str[cc] - '0') * 10;
1264 cc--; 1256 cc--;
1265 continue; 1257 continue;
1266 } else if (str[cc] == '+') { 1258 } else if (str[cc] == '+') {
1267 cc--; 1259 cc--;
1268 continue; 1260 continue;
1269 } else if (cc - iMinusLen + 1 > 0 && 1261 } else if (cc - iMinusLen + 1 > 0 &&
1270 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), 1262 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), wsMinus.c_str(),
1271 (const FX_WCHAR*)wsMinus, iMinusLen)) { 1263 iMinusLen)) {
1272 bExpSign = TRUE; 1264 bExpSign = TRUE;
1273 cc -= iMinusLen; 1265 cc -= iMinusLen;
1274 } else { 1266 } else {
1275 return FALSE; 1267 return FALSE;
1276 } 1268 }
1277 } 1269 }
1278 cc--; 1270 cc--;
1279 iExponent = bExpSign ? -iExponent : iExponent; 1271 iExponent = bExpSign ? -iExponent : iExponent;
1280 ccf--; 1272 ccf--;
1281 } break; 1273 } break;
1282 case '$': { 1274 case '$': {
1283 CFX_WideString wsSymbol; 1275 CFX_WideString wsSymbol;
1284 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); 1276 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol);
1285 int32_t iSymbolLen = wsSymbol.GetLength(); 1277 int32_t iSymbolLen = wsSymbol.GetLength();
1286 cc -= iSymbolLen - 1; 1278 cc -= iSymbolLen - 1;
1287 if (cc < 0 || 1279 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
1288 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) {
1289 return FALSE; 1280 return FALSE;
1290 } 1281 }
1291 cc--; 1282 cc--;
1292 ccf--; 1283 ccf--;
1293 } break; 1284 } break;
1294 case 'r': 1285 case 'r':
1295 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { 1286 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
1296 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { 1287 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
1297 bNeg = TRUE; 1288 bNeg = TRUE;
1298 cc -= 2; 1289 cc -= 2;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 break; 1332 break;
1342 case '.': 1333 case '.':
1343 case 'V': 1334 case 'V':
1344 case 'v': 1335 case 'v':
1345 return FALSE; 1336 return FALSE;
1346 case '%': { 1337 case '%': {
1347 CFX_WideString wsSymbol; 1338 CFX_WideString wsSymbol;
1348 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); 1339 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
1349 int32_t iSysmbolLen = wsSymbol.GetLength(); 1340 int32_t iSysmbolLen = wsSymbol.GetLength();
1350 cc -= iSysmbolLen - 1; 1341 cc -= iSysmbolLen - 1;
1351 if (cc < 0 || 1342 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
1352 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) {
1353 return FALSE; 1343 return FALSE;
1354 } 1344 }
1355 cc--; 1345 cc--;
1356 ccf--; 1346 ccf--;
1357 bHavePercentSymbol = TRUE; 1347 bHavePercentSymbol = TRUE;
1358 } break; 1348 } break;
1359 case '8': 1349 case '8':
1360 return FALSE; 1350 return FALSE;
1361 case ',': { 1351 case ',': {
1362 if (cc >= 0) { 1352 if (cc >= 0) {
1363 cc -= iGroupLen - 1; 1353 cc -= iGroupLen - 1;
1364 if (cc >= 0 && 1354 if (cc >= 0 &&
1365 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, 1355 FXSYS_wcsncmp(str + cc, wsGroupSymbol.c_str(), iGroupLen) == 0) {
1366 iGroupLen) == 0) {
1367 cc--; 1356 cc--;
1368 } else { 1357 } else {
1369 cc += iGroupLen - 1; 1358 cc += iGroupLen - 1;
1370 } 1359 }
1371 } 1360 }
1372 ccf--; 1361 ccf--;
1373 } break; 1362 } break;
1374 case '(': 1363 case '(':
1375 if (str[cc] == L'(') { 1364 if (str[cc] == L'(') {
1376 bNeg = TRUE; 1365 bNeg = TRUE;
(...skipping 26 matching lines...) Expand all
1403 if (!bReverseParse) { 1392 if (!bReverseParse) {
1404 ccf = dot_index_f + 1; 1393 ccf = dot_index_f + 1;
1405 cc = (dot_index == len) ? len : dot_index + 1; 1394 cc = (dot_index == len) ? len : dot_index + 1;
1406 coeff = 0.1; 1395 coeff = 0.1;
1407 while (cc < len && ccf < lenf) { 1396 while (cc < len && ccf < lenf) {
1408 switch (strf[ccf]) { 1397 switch (strf[ccf]) {
1409 case '\'': { 1398 case '\'': {
1410 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); 1399 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf);
1411 int32_t iLiteralLen = wsLiteral.GetLength(); 1400 int32_t iLiteralLen = wsLiteral.GetLength();
1412 if (cc + iLiteralLen > len || 1401 if (cc + iLiteralLen > len ||
1413 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, 1402 FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
1414 iLiteralLen)) {
1415 return FALSE; 1403 return FALSE;
1416 } 1404 }
1417 cc += iLiteralLen; 1405 cc += iLiteralLen;
1418 ccf++; 1406 ccf++;
1419 break; 1407 break;
1420 } 1408 }
1421 case '9': 1409 case '9':
1422 if (!FX_IsDigit(str[cc])) { 1410 if (!FX_IsDigit(str[cc])) {
1423 return FALSE; 1411 return FALSE;
1424 } 1412 }
(...skipping 22 matching lines...) Expand all
1447 } else { 1435 } else {
1448 cc++; 1436 cc++;
1449 } 1437 }
1450 ccf++; 1438 ccf++;
1451 break; 1439 break;
1452 case 'S': 1440 case 'S':
1453 if (str[cc] == '+' || str[cc] == ' ') { 1441 if (str[cc] == '+' || str[cc] == ' ') {
1454 cc++; 1442 cc++;
1455 } else { 1443 } else {
1456 if (cc + iMinusLen > len || 1444 if (cc + iMinusLen > len ||
1457 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { 1445 FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1458 return FALSE; 1446 return FALSE;
1459 } 1447 }
1460 bNeg = TRUE; 1448 bNeg = TRUE;
1461 cc += iMinusLen; 1449 cc += iMinusLen;
1462 } 1450 }
1463 ccf++; 1451 ccf++;
1464 break; 1452 break;
1465 case 's': 1453 case 's':
1466 if (str[cc] == '+') { 1454 if (str[cc] == '+') {
1467 cc++; 1455 cc++;
1468 } else { 1456 } else {
1469 if (cc + iMinusLen > len || 1457 if (cc + iMinusLen > len ||
1470 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { 1458 FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1471 return FALSE; 1459 return FALSE;
1472 } 1460 }
1473 bNeg = TRUE; 1461 bNeg = TRUE;
1474 cc += iMinusLen; 1462 cc += iMinusLen;
1475 } 1463 }
1476 ccf++; 1464 ccf++;
1477 break; 1465 break;
1478 case 'E': { 1466 case 'E': {
1479 if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) { 1467 if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) {
1480 return FALSE; 1468 return FALSE;
(...skipping 17 matching lines...) Expand all
1498 } 1486 }
1499 iExponent = bExpSign ? -iExponent : iExponent; 1487 iExponent = bExpSign ? -iExponent : iExponent;
1500 ccf++; 1488 ccf++;
1501 } break; 1489 } break;
1502 case '$': { 1490 case '$': {
1503 CFX_WideString wsSymbol; 1491 CFX_WideString wsSymbol;
1504 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, 1492 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol,
1505 wsSymbol); 1493 wsSymbol);
1506 int32_t iSymbolLen = wsSymbol.GetLength(); 1494 int32_t iSymbolLen = wsSymbol.GetLength();
1507 if (cc + iSymbolLen > len || 1495 if (cc + iSymbolLen > len ||
1508 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { 1496 FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
1509 return FALSE; 1497 return FALSE;
1510 } 1498 }
1511 cc += iSymbolLen; 1499 cc += iSymbolLen;
1512 ccf++; 1500 ccf++;
1513 } break; 1501 } break;
1514 case 'c': 1502 case 'c':
1515 if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { 1503 if (ccf + 1 < lenf && strf[ccf + 1] == 'r') {
1516 if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { 1504 if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') {
1517 bNeg = TRUE; 1505 bNeg = TRUE;
1518 cc += 2; 1506 cc += 2;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 break; 1541 break;
1554 case '.': 1542 case '.':
1555 case 'V': 1543 case 'V':
1556 case 'v': 1544 case 'v':
1557 return FALSE; 1545 return FALSE;
1558 case '%': { 1546 case '%': {
1559 CFX_WideString wsSymbol; 1547 CFX_WideString wsSymbol;
1560 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); 1548 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
1561 int32_t iSysmbolLen = wsSymbol.GetLength(); 1549 int32_t iSysmbolLen = wsSymbol.GetLength();
1562 if (cc + iSysmbolLen <= len && 1550 if (cc + iSysmbolLen <= len &&
1563 !FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, 1551 !FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
1564 iSysmbolLen)) {
1565 cc += iSysmbolLen; 1552 cc += iSysmbolLen;
1566 } 1553 }
1567 ccf++; 1554 ccf++;
1568 bHavePercentSymbol = TRUE; 1555 bHavePercentSymbol = TRUE;
1569 } break; 1556 } break;
1570 case '8': { 1557 case '8': {
1571 while (ccf < lenf && strf[ccf] == '8') { 1558 while (ccf < lenf && strf[ccf] == '8') {
1572 ccf++; 1559 ccf++;
1573 } 1560 }
1574 while (cc < len && FX_IsDigit(str[cc])) { 1561 while (cc < len && FX_IsDigit(str[cc])) {
1575 dbRetValue = (str[cc] - '0') * coeff + dbRetValue; 1562 dbRetValue = (str[cc] - '0') * coeff + dbRetValue;
1576 coeff *= 0.1; 1563 coeff *= 0.1;
1577 cc++; 1564 cc++;
1578 } 1565 }
1579 } break; 1566 } break;
1580 case ',': { 1567 case ',': {
1581 if (cc + iGroupLen <= len && 1568 if (cc + iGroupLen <= len &&
1582 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, 1569 FXSYS_wcsncmp(str + cc, wsGroupSymbol.c_str(), iGroupLen) == 0) {
1583 iGroupLen) == 0) {
1584 cc += iGroupLen; 1570 cc += iGroupLen;
1585 } 1571 }
1586 ccf++; 1572 ccf++;
1587 } break; 1573 } break;
1588 case '(': 1574 case '(':
1589 if (str[cc] == L'(') { 1575 if (str[cc] == L'(') {
1590 bNeg = TRUE; 1576 bNeg = TRUE;
1591 } else if (str[cc] != L' ') { 1577 } else if (str[cc] != L' ') {
1592 return FALSE; 1578 return FALSE;
1593 } 1579 }
(...skipping 28 matching lines...) Expand all
1622 dbRetValue /= 100.0; 1608 dbRetValue /= 100.0;
1623 } 1609 }
1624 if (bNeg) { 1610 if (bNeg) {
1625 dbRetValue = -dbRetValue; 1611 dbRetValue = -dbRetValue;
1626 } 1612 }
1627 fValue = (FX_FLOAT)dbRetValue; 1613 fValue = (FX_FLOAT)dbRetValue;
1628 return TRUE; 1614 return TRUE;
1629 } 1615 }
1630 void FX_ParseNumString(const CFX_WideString& wsNum, CFX_WideString& wsResult) { 1616 void FX_ParseNumString(const CFX_WideString& wsNum, CFX_WideString& wsResult) {
1631 int32_t iCount = wsNum.GetLength(); 1617 int32_t iCount = wsNum.GetLength();
1632 const FX_WCHAR* pStr = (const FX_WCHAR*)wsNum; 1618 const FX_WCHAR* pStr = wsNum.c_str();
1633 FX_WCHAR* pDst = wsResult.GetBuffer(iCount); 1619 FX_WCHAR* pDst = wsResult.GetBuffer(iCount);
1634 int32_t nIndex = 0; 1620 int32_t nIndex = 0;
1635 FX_BOOL bMinus = FALSE; 1621 FX_BOOL bMinus = FALSE;
1636 int32_t i = 0; 1622 int32_t i = 0;
1637 for (i = 0; i < iCount; i++) { 1623 for (i = 0; i < iCount; i++) {
1638 FX_WCHAR wc = pStr[i]; 1624 FX_WCHAR wc = pStr[i];
1639 if (wc == '.') { 1625 if (wc == '.') {
1640 break; 1626 break;
1641 } 1627 }
1642 if ((wc == L'0' || wc == L' ' || wc == '+') && nIndex == 0) { 1628 if ((wc == L'0' || wc == L' ' || wc == '+') && nIndex == 0) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 int32_t iExponent = 0; 1678 int32_t iExponent = 0;
1693 CFX_WideString wsDotSymbol; 1679 CFX_WideString wsDotSymbol;
1694 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); 1680 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol);
1695 CFX_WideString wsGroupSymbol; 1681 CFX_WideString wsGroupSymbol;
1696 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); 1682 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
1697 int32_t iGroupLen = wsGroupSymbol.GetLength(); 1683 int32_t iGroupLen = wsGroupSymbol.GetLength();
1698 CFX_WideString wsMinus; 1684 CFX_WideString wsMinus;
1699 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus); 1685 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus);
1700 int32_t iMinusLen = wsMinus.GetLength(); 1686 int32_t iMinusLen = wsMinus.GetLength();
1701 int cc = 0, ccf = 0; 1687 int cc = 0, ccf = 0;
1702 const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; 1688 const FX_WCHAR* str = wsSrcNum.c_str();
1703 int len = wsSrcNum.GetLength(); 1689 int len = wsSrcNum.GetLength();
1704 const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; 1690 const FX_WCHAR* strf = wsNumFormat.c_str();
1705 int lenf = wsNumFormat.GetLength(); 1691 int lenf = wsNumFormat.GetLength();
1706 FX_BOOL bHavePercentSymbol = FALSE; 1692 FX_BOOL bHavePercentSymbol = FALSE;
1707 FX_BOOL bNeg = FALSE; 1693 FX_BOOL bNeg = FALSE;
1708 FX_BOOL bReverseParse = FALSE; 1694 FX_BOOL bReverseParse = FALSE;
1709 int32_t dot_index = 0; 1695 int32_t dot_index = 0;
1710 if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) && 1696 if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) &&
1711 (dwFormatStyle & FX_NUMSTYLE_DotVorv)) { 1697 (dwFormatStyle & FX_NUMSTYLE_DotVorv)) {
1712 bReverseParse = TRUE; 1698 bReverseParse = TRUE;
1713 } 1699 }
1714 bReverseParse = FALSE; 1700 bReverseParse = FALSE;
1715 ccf = dot_index_f - 1; 1701 ccf = dot_index_f - 1;
1716 cc = dot_index - 1; 1702 cc = dot_index - 1;
1717 while (ccf >= 0 && cc >= 0) { 1703 while (ccf >= 0 && cc >= 0) {
1718 switch (strf[ccf]) { 1704 switch (strf[ccf]) {
1719 case '\'': { 1705 case '\'': {
1720 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); 1706 CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf);
1721 int32_t iLiteralLen = wsLiteral.GetLength(); 1707 int32_t iLiteralLen = wsLiteral.GetLength();
1722 cc -= iLiteralLen - 1; 1708 cc -= iLiteralLen - 1;
1723 if (cc < 0 || 1709 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
1724 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) {
1725 return FALSE; 1710 return FALSE;
1726 } 1711 }
1727 cc--; 1712 cc--;
1728 ccf--; 1713 ccf--;
1729 break; 1714 break;
1730 } 1715 }
1731 case '9': 1716 case '9':
1732 if (!FX_IsDigit(str[cc])) { 1717 if (!FX_IsDigit(str[cc])) {
1733 return FALSE; 1718 return FALSE;
1734 } 1719 }
(...skipping 17 matching lines...) Expand all
1752 } else { 1737 } else {
1753 cc--; 1738 cc--;
1754 } 1739 }
1755 ccf--; 1740 ccf--;
1756 break; 1741 break;
1757 case 'S': 1742 case 'S':
1758 if (str[cc] == '+' || str[cc] == ' ') { 1743 if (str[cc] == '+' || str[cc] == ' ') {
1759 cc--; 1744 cc--;
1760 } else { 1745 } else {
1761 cc -= iMinusLen - 1; 1746 cc -= iMinusLen - 1;
1762 if (cc < 0 || 1747 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1763 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1764 return FALSE; 1748 return FALSE;
1765 } 1749 }
1766 cc--; 1750 cc--;
1767 bNeg = TRUE; 1751 bNeg = TRUE;
1768 } 1752 }
1769 ccf--; 1753 ccf--;
1770 break; 1754 break;
1771 case 's': 1755 case 's':
1772 if (str[cc] == '+') { 1756 if (str[cc] == '+') {
1773 cc--; 1757 cc--;
1774 } else { 1758 } else {
1775 cc -= iMinusLen - 1; 1759 cc -= iMinusLen - 1;
1776 if (cc < 0 || 1760 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1777 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) {
1778 return FALSE; 1761 return FALSE;
1779 } 1762 }
1780 cc--; 1763 cc--;
1781 bNeg = TRUE; 1764 bNeg = TRUE;
1782 } 1765 }
1783 ccf--; 1766 ccf--;
1784 break; 1767 break;
1785 case 'E': { 1768 case 'E': {
1786 if (cc >= dot_index) { 1769 if (cc >= dot_index) {
1787 return FALSE; 1770 return FALSE;
1788 } 1771 }
1789 FX_BOOL bExpSign = FALSE; 1772 FX_BOOL bExpSign = FALSE;
1790 while (cc >= 0) { 1773 while (cc >= 0) {
1791 if (str[cc] == 'E' || str[cc] == 'e') { 1774 if (str[cc] == 'E' || str[cc] == 'e') {
1792 break; 1775 break;
1793 } 1776 }
1794 if (FX_IsDigit(str[cc])) { 1777 if (FX_IsDigit(str[cc])) {
1795 iExponent = iExponent + (str[cc] - '0') * 10; 1778 iExponent = iExponent + (str[cc] - '0') * 10;
1796 cc--; 1779 cc--;
1797 continue; 1780 continue;
1798 } else if (str[cc] == '+') { 1781 } else if (str[cc] == '+') {
1799 cc--; 1782 cc--;
1800 continue; 1783 continue;
1801 } else if (cc - iMinusLen + 1 > 0 && 1784 } else if (cc - iMinusLen + 1 > 0 &&
1802 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), 1785 !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), wsMinus.c_str(),
1803 (const FX_WCHAR*)wsMinus, iMinusLen)) { 1786 iMinusLen)) {
1804 bExpSign = TRUE; 1787 bExpSign = TRUE;
1805 cc -= iMinusLen; 1788 cc -= iMinusLen;
1806 } else { 1789 } else {
1807 return FALSE; 1790 return FALSE;
1808 } 1791 }
1809 } 1792 }
1810 cc--; 1793 cc--;
1811 iExponent = bExpSign ? -iExponent : iExponent; 1794 iExponent = bExpSign ? -iExponent : iExponent;
1812 ccf--; 1795 ccf--;
1813 } break; 1796 } break;
1814 case '$': { 1797 case '$': {
1815 CFX_WideString wsSymbol; 1798 CFX_WideString wsSymbol;
1816 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); 1799 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol);
1817 int32_t iSymbolLen = wsSymbol.GetLength(); 1800 int32_t iSymbolLen = wsSymbol.GetLength();
1818 cc -= iSymbolLen - 1; 1801 cc -= iSymbolLen - 1;
1819 if (cc < 0 || 1802 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
1820 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) {
1821 return FALSE; 1803 return FALSE;
1822 } 1804 }
1823 cc--; 1805 cc--;
1824 ccf--; 1806 ccf--;
1825 } break; 1807 } break;
1826 case 'r': 1808 case 'r':
1827 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { 1809 if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
1828 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { 1810 if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
1829 bNeg = TRUE; 1811 bNeg = TRUE;
1830 cc -= 2; 1812 cc -= 2;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1873 break; 1855 break;
1874 case '.': 1856 case '.':
1875 case 'V': 1857 case 'V':
1876 case 'v': 1858 case 'v':
1877 return FALSE; 1859 return FALSE;
1878 case '%': { 1860 case '%': {
1879 CFX_WideString wsSymbol; 1861 CFX_WideString wsSymbol;
1880 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); 1862 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
1881 int32_t iSysmbolLen = wsSymbol.GetLength(); 1863 int32_t iSysmbolLen = wsSymbol.GetLength();
1882 cc -= iSysmbolLen - 1; 1864 cc -= iSysmbolLen - 1;
1883 if (cc < 0 || 1865 if (cc < 0 || FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
1884 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) {
1885 return FALSE; 1866 return FALSE;
1886 } 1867 }
1887 cc--; 1868 cc--;
1888 ccf--; 1869 ccf--;
1889 bHavePercentSymbol = TRUE; 1870 bHavePercentSymbol = TRUE;
1890 } break; 1871 } break;
1891 case '8': 1872 case '8':
1892 return FALSE; 1873 return FALSE;
1893 case ',': { 1874 case ',': {
1894 if (cc >= 0) { 1875 if (cc >= 0) {
1895 cc -= iGroupLen - 1; 1876 cc -= iGroupLen - 1;
1896 if (cc >= 0 && 1877 if (cc >= 0 &&
1897 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, 1878 FXSYS_wcsncmp(str + cc, wsGroupSymbol.c_str(), iGroupLen) == 0) {
1898 iGroupLen) == 0) {
1899 cc--; 1879 cc--;
1900 } else { 1880 } else {
1901 cc += iGroupLen - 1; 1881 cc += iGroupLen - 1;
1902 } 1882 }
1903 } 1883 }
1904 ccf--; 1884 ccf--;
1905 } break; 1885 } break;
1906 case '(': 1886 case '(':
1907 if (str[cc] == L'(') { 1887 if (str[cc] == L'(') {
1908 bNeg = TRUE; 1888 bNeg = TRUE;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1943 } 1923 }
1944 if (!bReverseParse) { 1924 if (!bReverseParse) {
1945 ccf = dot_index_f + 1; 1925 ccf = dot_index_f + 1;
1946 cc = (dot_index == len) ? len : dot_index + 1; 1926 cc = (dot_index == len) ? len : dot_index + 1;
1947 while (cc < len && ccf < lenf) { 1927 while (cc < len && ccf < lenf) {
1948 switch (strf[ccf]) { 1928 switch (strf[ccf]) {
1949 case '\'': { 1929 case '\'': {
1950 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); 1930 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf);
1951 int32_t iLiteralLen = wsLiteral.GetLength(); 1931 int32_t iLiteralLen = wsLiteral.GetLength();
1952 if (cc + iLiteralLen > len || 1932 if (cc + iLiteralLen > len ||
1953 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, 1933 FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
1954 iLiteralLen)) {
1955 return FALSE; 1934 return FALSE;
1956 } 1935 }
1957 cc += iLiteralLen; 1936 cc += iLiteralLen;
1958 ccf++; 1937 ccf++;
1959 break; 1938 break;
1960 } 1939 }
1961 case '9': 1940 case '9':
1962 if (!FX_IsDigit(str[cc])) { 1941 if (!FX_IsDigit(str[cc])) {
1963 return FALSE; 1942 return FALSE;
1964 } 1943 }
(...skipping 17 matching lines...) Expand all
1982 } else { 1961 } else {
1983 cc++; 1962 cc++;
1984 } 1963 }
1985 ccf++; 1964 ccf++;
1986 break; 1965 break;
1987 case 'S': 1966 case 'S':
1988 if (str[cc] == '+' || str[cc] == ' ') { 1967 if (str[cc] == '+' || str[cc] == ' ') {
1989 cc++; 1968 cc++;
1990 } else { 1969 } else {
1991 if (cc + iMinusLen > len || 1970 if (cc + iMinusLen > len ||
1992 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { 1971 FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
1993 return FALSE; 1972 return FALSE;
1994 } 1973 }
1995 bNeg = TRUE; 1974 bNeg = TRUE;
1996 cc += iMinusLen; 1975 cc += iMinusLen;
1997 } 1976 }
1998 ccf++; 1977 ccf++;
1999 break; 1978 break;
2000 case 's': 1979 case 's':
2001 if (str[cc] == '+') { 1980 if (str[cc] == '+') {
2002 cc++; 1981 cc++;
2003 } else { 1982 } else {
2004 if (cc + iMinusLen > len || 1983 if (cc + iMinusLen > len ||
2005 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { 1984 FXSYS_wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
2006 return FALSE; 1985 return FALSE;
2007 } 1986 }
2008 bNeg = TRUE; 1987 bNeg = TRUE;
2009 cc += iMinusLen; 1988 cc += iMinusLen;
2010 } 1989 }
2011 ccf++; 1990 ccf++;
2012 break; 1991 break;
2013 case 'E': { 1992 case 'E': {
2014 if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) { 1993 if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) {
2015 return FALSE; 1994 return FALSE;
(...skipping 17 matching lines...) Expand all
2033 } 2012 }
2034 iExponent = bExpSign ? -iExponent : iExponent; 2013 iExponent = bExpSign ? -iExponent : iExponent;
2035 ccf++; 2014 ccf++;
2036 } break; 2015 } break;
2037 case '$': { 2016 case '$': {
2038 CFX_WideString wsSymbol; 2017 CFX_WideString wsSymbol;
2039 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, 2018 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol,
2040 wsSymbol); 2019 wsSymbol);
2041 int32_t iSymbolLen = wsSymbol.GetLength(); 2020 int32_t iSymbolLen = wsSymbol.GetLength();
2042 if (cc + iSymbolLen > len || 2021 if (cc + iSymbolLen > len ||
2043 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { 2022 FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSymbolLen)) {
2044 return FALSE; 2023 return FALSE;
2045 } 2024 }
2046 cc += iSymbolLen; 2025 cc += iSymbolLen;
2047 ccf++; 2026 ccf++;
2048 } break; 2027 } break;
2049 case 'c': 2028 case 'c':
2050 if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { 2029 if (ccf + 1 < lenf && strf[ccf + 1] == 'r') {
2051 if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { 2030 if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') {
2052 bNeg = TRUE; 2031 bNeg = TRUE;
2053 cc += 2; 2032 cc += 2;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 break; 2067 break;
2089 case '.': 2068 case '.':
2090 case 'V': 2069 case 'V':
2091 case 'v': 2070 case 'v':
2092 return FALSE; 2071 return FALSE;
2093 case '%': { 2072 case '%': {
2094 CFX_WideString wsSymbol; 2073 CFX_WideString wsSymbol;
2095 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); 2074 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol);
2096 int32_t iSysmbolLen = wsSymbol.GetLength(); 2075 int32_t iSysmbolLen = wsSymbol.GetLength();
2097 if (cc + iSysmbolLen <= len && 2076 if (cc + iSysmbolLen <= len &&
2098 !FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, 2077 !FXSYS_wcsncmp(str + cc, wsSymbol.c_str(), iSysmbolLen)) {
2099 iSysmbolLen)) {
2100 cc += iSysmbolLen; 2078 cc += iSysmbolLen;
2101 } 2079 }
2102 ccf++; 2080 ccf++;
2103 bHavePercentSymbol = TRUE; 2081 bHavePercentSymbol = TRUE;
2104 } break; 2082 } break;
2105 case '8': { 2083 case '8': {
2106 while (ccf < lenf && strf[ccf] == '8') { 2084 while (ccf < lenf && strf[ccf] == '8') {
2107 ccf++; 2085 ccf++;
2108 } 2086 }
2109 while (cc < len && FX_IsDigit(str[cc])) { 2087 while (cc < len && FX_IsDigit(str[cc])) {
2110 wsValue += str[cc]; 2088 wsValue += str[cc];
2111 cc++; 2089 cc++;
2112 } 2090 }
2113 } break; 2091 } break;
2114 case ',': { 2092 case ',': {
2115 if (cc + iGroupLen <= len && 2093 if (cc + iGroupLen <= len &&
2116 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, 2094 FXSYS_wcsncmp(str + cc, wsGroupSymbol.c_str(), iGroupLen) == 0) {
2117 iGroupLen) == 0) {
2118 cc += iGroupLen; 2095 cc += iGroupLen;
2119 } 2096 }
2120 ccf++; 2097 ccf++;
2121 } break; 2098 } break;
2122 case '(': 2099 case '(':
2123 if (str[cc] == L'(') { 2100 if (str[cc] == L'(') {
2124 bNeg = TRUE; 2101 bNeg = TRUE;
2125 } else if (str[cc] != L' ') { 2102 } else if (str[cc] != L' ') {
2126 return FALSE; 2103 return FALSE;
2127 } 2104 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2167 FX_DATETIMETYPE CFX_FormatString::GetDateTimeFormat( 2144 FX_DATETIMETYPE CFX_FormatString::GetDateTimeFormat(
2168 const CFX_WideString& wsPattern, 2145 const CFX_WideString& wsPattern,
2169 IFX_Locale*& pLocale, 2146 IFX_Locale*& pLocale,
2170 CFX_WideString& wsDatePattern, 2147 CFX_WideString& wsDatePattern,
2171 CFX_WideString& wsTimePattern) { 2148 CFX_WideString& wsTimePattern) {
2172 pLocale = NULL; 2149 pLocale = NULL;
2173 CFX_WideString wsTempPattern; 2150 CFX_WideString wsTempPattern;
2174 FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown; 2151 FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown;
2175 int32_t ccf = 0; 2152 int32_t ccf = 0;
2176 int32_t iLenf = wsPattern.GetLength(); 2153 int32_t iLenf = wsPattern.GetLength();
2177 const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; 2154 const FX_WCHAR* pStr = wsPattern.c_str();
2178 int32_t iFindCategory = 0; 2155 int32_t iFindCategory = 0;
2179 FX_BOOL bBraceOpen = FALSE; 2156 FX_BOOL bBraceOpen = FALSE;
2180 while (ccf < iLenf) { 2157 while (ccf < iLenf) {
2181 if (pStr[ccf] == '\'') { 2158 if (pStr[ccf] == '\'') {
2182 int32_t iCurChar = ccf; 2159 int32_t iCurChar = ccf;
2183 FX_GetLiteralText(pStr, ccf, iLenf); 2160 FX_GetLiteralText(pStr, ccf, iLenf);
2184 wsTempPattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); 2161 wsTempPattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
2185 } else if (!bBraceOpen && iFindCategory != 3 && 2162 } else if (!bBraceOpen && iFindCategory != 3 &&
2186 FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { 2163 FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) {
2187 CFX_WideString wsCategory(pStr[ccf]); 2164 CFX_WideString wsCategory(pStr[ccf]);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2225 pLocale = GetPatternLocale(wsLCID.AsStringC()); 2202 pLocale = GetPatternLocale(wsLCID.AsStringC());
2226 } else if (pStr[ccf] == '{') { 2203 } else if (pStr[ccf] == '{') {
2227 bBraceOpen = TRUE; 2204 bBraceOpen = TRUE;
2228 break; 2205 break;
2229 } else if (pStr[ccf] == '.') { 2206 } else if (pStr[ccf] == '.') {
2230 CFX_WideString wsSubCategory; 2207 CFX_WideString wsSubCategory;
2231 ccf++; 2208 ccf++;
2232 while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { 2209 while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') {
2233 wsSubCategory += pStr[ccf++]; 2210 wsSubCategory += pStr[ccf++];
2234 } 2211 }
2235 uint32_t dwSubHash = 2212 uint32_t dwSubHash = FX_HashCode_String_GetW(
2236 FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); 2213 wsSubCategory.c_str(), wsSubCategory.GetLength());
2237 FX_LOCALEDATETIMESUBCATEGORY eSubCategory = 2214 FX_LOCALEDATETIMESUBCATEGORY eSubCategory =
2238 FX_LOCALEDATETIMESUBCATEGORY_Medium; 2215 FX_LOCALEDATETIMESUBCATEGORY_Medium;
2239 for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) { 2216 for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) {
2240 if (g_FXLocaleDateTimeSubCatData[i].uHash == dwSubHash) { 2217 if (g_FXLocaleDateTimeSubCatData[i].uHash == dwSubHash) {
2241 eSubCategory = 2218 eSubCategory =
2242 (FX_LOCALEDATETIMESUBCATEGORY)g_FXLocaleDateTimeSubCatData[i] 2219 (FX_LOCALEDATETIMESUBCATEGORY)g_FXLocaleDateTimeSubCatData[i]
2243 .eSubCategory; 2220 .eSubCategory;
2244 break; 2221 break;
2245 } 2222 }
2246 } 2223 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2303 } 2280 }
2304 static FX_BOOL FX_ParseLocaleDate(const CFX_WideString& wsDate, 2281 static FX_BOOL FX_ParseLocaleDate(const CFX_WideString& wsDate,
2305 const CFX_WideString& wsDatePattern, 2282 const CFX_WideString& wsDatePattern,
2306 IFX_Locale* pLocale, 2283 IFX_Locale* pLocale,
2307 CFX_Unitime& datetime, 2284 CFX_Unitime& datetime,
2308 int32_t& cc) { 2285 int32_t& cc) {
2309 int32_t year = 1900; 2286 int32_t year = 1900;
2310 int32_t month = 1; 2287 int32_t month = 1;
2311 int32_t day = 1; 2288 int32_t day = 1;
2312 int32_t ccf = 0; 2289 int32_t ccf = 0;
2313 const FX_WCHAR* str = (const FX_WCHAR*)wsDate; 2290 const FX_WCHAR* str = wsDate.c_str();
2314 int32_t len = wsDate.GetLength(); 2291 int32_t len = wsDate.GetLength();
2315 const FX_WCHAR* strf = (const FX_WCHAR*)wsDatePattern; 2292 const FX_WCHAR* strf = wsDatePattern.c_str();
2316 int32_t lenf = wsDatePattern.GetLength(); 2293 int32_t lenf = wsDatePattern.GetLength();
2317 while (cc < len && ccf < lenf) { 2294 while (cc < len && ccf < lenf) {
2318 if (strf[ccf] == '\'') { 2295 if (strf[ccf] == '\'') {
2319 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); 2296 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf);
2320 int32_t iLiteralLen = wsLiteral.GetLength(); 2297 int32_t iLiteralLen = wsLiteral.GetLength();
2321 if (cc + iLiteralLen > len || 2298 if (cc + iLiteralLen > len ||
2322 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { 2299 FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
2323 return FALSE; 2300 return FALSE;
2324 } 2301 }
2325 cc += iLiteralLen; 2302 cc += iLiteralLen;
2326 ccf++; 2303 ccf++;
2327 continue; 2304 continue;
2328 } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { 2305 } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) {
2329 if (strf[ccf] != str[cc]) { 2306 if (strf[ccf] != str[cc]) {
2330 return FALSE; 2307 return FALSE;
2331 } 2308 }
2332 cc++; 2309 cc++;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2381 month = month * 10 + str[cc++] - '0'; 2358 month = month * 10 + str[cc++] - '0';
2382 } 2359 }
2383 } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) { 2360 } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) {
2384 CFX_WideString wsMonthNameAbbr; 2361 CFX_WideString wsMonthNameAbbr;
2385 uint16_t i = 0; 2362 uint16_t i = 0;
2386 for (; i < 12; i++) { 2363 for (; i < 12; i++) {
2387 pLocale->GetMonthName(i, wsMonthNameAbbr, TRUE); 2364 pLocale->GetMonthName(i, wsMonthNameAbbr, TRUE);
2388 if (wsMonthNameAbbr.IsEmpty()) { 2365 if (wsMonthNameAbbr.IsEmpty()) {
2389 continue; 2366 continue;
2390 } 2367 }
2391 if (!FXSYS_wcsncmp((const FX_WCHAR*)wsMonthNameAbbr, str + cc, 2368 if (!FXSYS_wcsncmp(wsMonthNameAbbr.c_str(), str + cc,
2392 wsMonthNameAbbr.GetLength())) { 2369 wsMonthNameAbbr.GetLength())) {
2393 break; 2370 break;
2394 } 2371 }
2395 } 2372 }
2396 if (i < 12) { 2373 if (i < 12) {
2397 cc += wsMonthNameAbbr.GetLength(); 2374 cc += wsMonthNameAbbr.GetLength();
2398 month = i + 1; 2375 month = i + 1;
2399 } 2376 }
2400 } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '4')) { 2377 } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '4')) {
2401 CFX_WideString wsMonthName; 2378 CFX_WideString wsMonthName;
2402 uint16_t i = 0; 2379 uint16_t i = 0;
2403 for (; i < 12; i++) { 2380 for (; i < 12; i++) {
2404 pLocale->GetMonthName(i, wsMonthName, FALSE); 2381 pLocale->GetMonthName(i, wsMonthName, FALSE);
2405 if (wsMonthName.IsEmpty()) { 2382 if (wsMonthName.IsEmpty()) {
2406 continue; 2383 continue;
2407 } 2384 }
2408 if (!FXSYS_wcsncmp((const FX_WCHAR*)wsMonthName, str + cc, 2385 if (!FXSYS_wcsncmp(wsMonthName.c_str(), str + cc,
2409 wsMonthName.GetLength())) { 2386 wsMonthName.GetLength())) {
2410 break; 2387 break;
2411 } 2388 }
2412 } 2389 }
2413 if (i < 12) { 2390 if (i < 12) {
2414 cc += wsMonthName.GetLength(); 2391 cc += wsMonthName.GetLength();
2415 month = i + 1; 2392 month = i + 1;
2416 } 2393 }
2417 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '1')) { 2394 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '1')) {
2418 cc += 1; 2395 cc += 1;
2419 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '3')) { 2396 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '3')) {
2420 CFX_WideString wsDayNameAbbr; 2397 CFX_WideString wsDayNameAbbr;
2421 uint16_t i = 0; 2398 uint16_t i = 0;
2422 for (; i < 7; i++) { 2399 for (; i < 7; i++) {
2423 pLocale->GetDayName(i, wsDayNameAbbr, TRUE); 2400 pLocale->GetDayName(i, wsDayNameAbbr, TRUE);
2424 if (wsDayNameAbbr.IsEmpty()) { 2401 if (wsDayNameAbbr.IsEmpty()) {
2425 continue; 2402 continue;
2426 } 2403 }
2427 if (!FXSYS_wcsncmp((const FX_WCHAR*)wsDayNameAbbr, str + cc, 2404 if (!FXSYS_wcsncmp(wsDayNameAbbr.c_str(), str + cc,
2428 wsDayNameAbbr.GetLength())) { 2405 wsDayNameAbbr.GetLength())) {
2429 break; 2406 break;
2430 } 2407 }
2431 } 2408 }
2432 if (i < 12) { 2409 if (i < 12) {
2433 cc += wsDayNameAbbr.GetLength(); 2410 cc += wsDayNameAbbr.GetLength();
2434 } 2411 }
2435 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) { 2412 } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) {
2436 CFX_WideString wsDayName; 2413 CFX_WideString wsDayName;
2437 int32_t i = 0; 2414 int32_t i = 0;
2438 for (; i < 7; i++) { 2415 for (; i < 7; i++) {
2439 pLocale->GetDayName(i, wsDayName, FALSE); 2416 pLocale->GetDayName(i, wsDayName, FALSE);
2440 if (wsDayName == L"") { 2417 if (wsDayName == L"") {
2441 continue; 2418 continue;
2442 } 2419 }
2443 if (!FXSYS_wcsncmp((const FX_WCHAR*)wsDayName, str + cc, 2420 if (!FXSYS_wcsncmp(wsDayName.c_str(), str + cc,
2444 wsDayName.GetLength())) { 2421 wsDayName.GetLength())) {
2445 break; 2422 break;
2446 } 2423 }
2447 } 2424 }
2448 if (i < 12) { 2425 if (i < 12) {
2449 cc += wsDayName.GetLength(); 2426 cc += wsDayName.GetLength();
2450 } 2427 }
2451 } else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) { 2428 } else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) {
2452 cc += 1; 2429 cc += 1;
2453 } else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) { 2430 } else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2520 static FX_BOOL FX_ParseLocaleTime(const CFX_WideString& wsTime, 2497 static FX_BOOL FX_ParseLocaleTime(const CFX_WideString& wsTime,
2521 const CFX_WideString& wsTimePattern, 2498 const CFX_WideString& wsTimePattern,
2522 IFX_Locale* pLocale, 2499 IFX_Locale* pLocale,
2523 CFX_Unitime& datetime, 2500 CFX_Unitime& datetime,
2524 int32_t& cc) { 2501 int32_t& cc) {
2525 uint8_t hour = 0; 2502 uint8_t hour = 0;
2526 uint8_t minute = 0; 2503 uint8_t minute = 0;
2527 uint8_t second = 0; 2504 uint8_t second = 0;
2528 uint16_t millisecond = 0; 2505 uint16_t millisecond = 0;
2529 int32_t ccf = 0; 2506 int32_t ccf = 0;
2530 const FX_WCHAR* str = (const FX_WCHAR*)wsTime; 2507 const FX_WCHAR* str = wsTime.c_str();
2531 int len = wsTime.GetLength(); 2508 int len = wsTime.GetLength();
2532 const FX_WCHAR* strf = (const FX_WCHAR*)wsTimePattern; 2509 const FX_WCHAR* strf = wsTimePattern.c_str();
2533 int lenf = wsTimePattern.GetLength(); 2510 int lenf = wsTimePattern.GetLength();
2534 FX_BOOL bHasA = FALSE; 2511 FX_BOOL bHasA = FALSE;
2535 FX_BOOL bPM = FALSE; 2512 FX_BOOL bPM = FALSE;
2536 while (cc < len && ccf < lenf) { 2513 while (cc < len && ccf < lenf) {
2537 if (strf[ccf] == '\'') { 2514 if (strf[ccf] == '\'') {
2538 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); 2515 CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf);
2539 int32_t iLiteralLen = wsLiteral.GetLength(); 2516 int32_t iLiteralLen = wsLiteral.GetLength();
2540 if (cc + iLiteralLen > len || 2517 if (cc + iLiteralLen > len ||
2541 FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { 2518 FXSYS_wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
2542 return FALSE; 2519 return FALSE;
2543 } 2520 }
2544 cc += iLiteralLen; 2521 cc += iLiteralLen;
2545 ccf++; 2522 ccf++;
2546 continue; 2523 continue;
2547 } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) == -1) { 2524 } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) == -1) {
2548 if (strf[ccf] != str[cc]) { 2525 if (strf[ccf] != str[cc]) {
2549 return FALSE; 2526 return FALSE;
2550 } 2527 }
2551 cc++; 2528 cc++;
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
2757 return FALSE; 2734 return FALSE;
2758 } 2735 }
2759 } 2736 }
2760 return TRUE; 2737 return TRUE;
2761 } 2738 }
2762 FX_BOOL CFX_FormatString::ParseZero(const CFX_WideString& wsSrcText, 2739 FX_BOOL CFX_FormatString::ParseZero(const CFX_WideString& wsSrcText,
2763 const CFX_WideString& wsPattern) { 2740 const CFX_WideString& wsPattern) {
2764 CFX_WideString wsTextFormat; 2741 CFX_WideString wsTextFormat;
2765 GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat); 2742 GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat);
2766 int32_t iText = 0, iPattern = 0; 2743 int32_t iText = 0, iPattern = 0;
2767 const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; 2744 const FX_WCHAR* pStrText = wsSrcText.c_str();
2768 int32_t iLenText = wsSrcText.GetLength(); 2745 int32_t iLenText = wsSrcText.GetLength();
2769 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 2746 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
2770 int32_t iLenPattern = wsTextFormat.GetLength(); 2747 int32_t iLenPattern = wsTextFormat.GetLength();
2771 while (iPattern < iLenPattern && iText < iLenText) { 2748 while (iPattern < iLenPattern && iText < iLenText) {
2772 if (pStrPattern[iPattern] == '\'') { 2749 if (pStrPattern[iPattern] == '\'') {
2773 CFX_WideString wsLiteral = 2750 CFX_WideString wsLiteral =
2774 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 2751 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
2775 int32_t iLiteralLen = wsLiteral.GetLength(); 2752 int32_t iLiteralLen = wsLiteral.GetLength();
2776 if (iText + iLiteralLen > iLenText || 2753 if (iText + iLiteralLen > iLenText ||
2777 FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, 2754 FXSYS_wcsncmp(pStrText + iText, wsLiteral.c_str(), iLiteralLen)) {
2778 iLiteralLen)) {
2779 return FALSE; 2755 return FALSE;
2780 } 2756 }
2781 iText += iLiteralLen; 2757 iText += iLiteralLen;
2782 iPattern++; 2758 iPattern++;
2783 continue; 2759 continue;
2784 } else if (pStrPattern[iPattern] != pStrText[iText]) { 2760 } else if (pStrPattern[iPattern] != pStrText[iText]) {
2785 return FALSE; 2761 return FALSE;
2786 } else { 2762 } else {
2787 iText++; 2763 iText++;
2788 iPattern++; 2764 iPattern++;
2789 } 2765 }
2790 } 2766 }
2791 return iPattern == iLenPattern && iText == iLenText; 2767 return iPattern == iLenPattern && iText == iLenText;
2792 } 2768 }
2793 FX_BOOL CFX_FormatString::ParseNull(const CFX_WideString& wsSrcText, 2769 FX_BOOL CFX_FormatString::ParseNull(const CFX_WideString& wsSrcText,
2794 const CFX_WideString& wsPattern) { 2770 const CFX_WideString& wsPattern) {
2795 CFX_WideString wsTextFormat; 2771 CFX_WideString wsTextFormat;
2796 GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat); 2772 GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat);
2797 int32_t iText = 0, iPattern = 0; 2773 int32_t iText = 0, iPattern = 0;
2798 const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; 2774 const FX_WCHAR* pStrText = wsSrcText.c_str();
2799 int32_t iLenText = wsSrcText.GetLength(); 2775 int32_t iLenText = wsSrcText.GetLength();
2800 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 2776 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
2801 int32_t iLenPattern = wsTextFormat.GetLength(); 2777 int32_t iLenPattern = wsTextFormat.GetLength();
2802 while (iPattern < iLenPattern && iText < iLenText) { 2778 while (iPattern < iLenPattern && iText < iLenText) {
2803 if (pStrPattern[iPattern] == '\'') { 2779 if (pStrPattern[iPattern] == '\'') {
2804 CFX_WideString wsLiteral = 2780 CFX_WideString wsLiteral =
2805 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 2781 FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
2806 int32_t iLiteralLen = wsLiteral.GetLength(); 2782 int32_t iLiteralLen = wsLiteral.GetLength();
2807 if (iText + iLiteralLen > iLenText || 2783 if (iText + iLiteralLen > iLenText ||
2808 FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, 2784 FXSYS_wcsncmp(pStrText + iText, wsLiteral.c_str(), iLiteralLen)) {
2809 iLiteralLen)) {
2810 return FALSE; 2785 return FALSE;
2811 } 2786 }
2812 iText += iLiteralLen; 2787 iText += iLiteralLen;
2813 iPattern++; 2788 iPattern++;
2814 continue; 2789 continue;
2815 } else if (pStrPattern[iPattern] != pStrText[iText]) { 2790 } else if (pStrPattern[iPattern] != pStrText[iText]) {
2816 return FALSE; 2791 return FALSE;
2817 } else { 2792 } else {
2818 iText++; 2793 iText++;
2819 iPattern++; 2794 iPattern++;
2820 } 2795 }
2821 } 2796 }
2822 return iPattern == iLenPattern && iText == iLenText; 2797 return iPattern == iLenPattern && iText == iLenText;
2823 } 2798 }
2824 FX_BOOL CFX_FormatString::FormatText(const CFX_WideString& wsSrcText, 2799 FX_BOOL CFX_FormatString::FormatText(const CFX_WideString& wsSrcText,
2825 const CFX_WideString& wsPattern, 2800 const CFX_WideString& wsPattern,
2826 CFX_WideString& wsOutput) { 2801 CFX_WideString& wsOutput) {
2827 if (wsPattern.IsEmpty()) { 2802 if (wsPattern.IsEmpty()) {
2828 return FALSE; 2803 return FALSE;
2829 } 2804 }
2830 int32_t iLenText = wsSrcText.GetLength(); 2805 int32_t iLenText = wsSrcText.GetLength();
2831 if (iLenText == 0) { 2806 if (iLenText == 0) {
2832 return FALSE; 2807 return FALSE;
2833 } 2808 }
2834 CFX_WideString wsTextFormat; 2809 CFX_WideString wsTextFormat;
2835 GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat); 2810 GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat);
2836 int32_t iText = 0, iPattern = 0; 2811 int32_t iText = 0, iPattern = 0;
2837 const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; 2812 const FX_WCHAR* pStrText = wsSrcText.c_str();
2838 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 2813 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
2839 int32_t iLenPattern = wsTextFormat.GetLength(); 2814 int32_t iLenPattern = wsTextFormat.GetLength();
2840 while (iPattern < iLenPattern) { 2815 while (iPattern < iLenPattern) {
2841 switch (pStrPattern[iPattern]) { 2816 switch (pStrPattern[iPattern]) {
2842 case '\'': { 2817 case '\'': {
2843 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 2818 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
2844 iPattern++; 2819 iPattern++;
2845 break; 2820 break;
2846 } 2821 }
2847 case 'A': 2822 case 'A':
2848 if (iText >= iLenText || !FX_IsAlpha(pStrText[iText])) { 2823 if (iText >= iLenText || !FX_IsAlpha(pStrText[iText])) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2906 } 2881 }
2907 int32_t dot_index_f = -1; 2882 int32_t dot_index_f = -1;
2908 uint32_t dwNumStyle = 0; 2883 uint32_t dwNumStyle = 0;
2909 CFX_WideString wsNumFormat; 2884 CFX_WideString wsNumFormat;
2910 IFX_Locale* pLocale = 2885 IFX_Locale* pLocale =
2911 GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); 2886 GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat);
2912 if (!pLocale || wsNumFormat.IsEmpty()) { 2887 if (!pLocale || wsNumFormat.IsEmpty()) {
2913 return FALSE; 2888 return FALSE;
2914 } 2889 }
2915 int32_t cc = 0, ccf = 0; 2890 int32_t cc = 0, ccf = 0;
2916 const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; 2891 const FX_WCHAR* strf = wsNumFormat.c_str();
2917 int lenf = wsNumFormat.GetLength(); 2892 int lenf = wsNumFormat.GetLength();
2918 CFX_WideString wsSrcNum = wsInputNum; 2893 CFX_WideString wsSrcNum = wsInputNum;
2919 wsSrcNum.TrimLeft('0'); 2894 wsSrcNum.TrimLeft('0');
2920 if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.') { 2895 if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.') {
2921 wsSrcNum.Insert(0, '0'); 2896 wsSrcNum.Insert(0, '0');
2922 } 2897 }
2923 CFX_Decimal decimal = CFX_Decimal(wsSrcNum.AsStringC()); 2898 CFX_Decimal decimal = CFX_Decimal(wsSrcNum.AsStringC());
2924 if (dwNumStyle & FX_NUMSTYLE_Percent) { 2899 if (dwNumStyle & FX_NUMSTYLE_Percent) {
2925 decimal = decimal * CFX_Decimal(100); 2900 decimal = decimal * CFX_Decimal(100);
2926 wsSrcNum = decimal; 2901 wsSrcNum = decimal;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2976 wsSrcNum.TrimRight(L"."); 2951 wsSrcNum.TrimRight(L".");
2977 } 2952 }
2978 CFX_WideString wsGroupSymbol; 2953 CFX_WideString wsGroupSymbol;
2979 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); 2954 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
2980 FX_BOOL bNeg = FALSE; 2955 FX_BOOL bNeg = FALSE;
2981 if (wsSrcNum[0] == '-') { 2956 if (wsSrcNum[0] == '-') {
2982 bNeg = TRUE; 2957 bNeg = TRUE;
2983 wsSrcNum.Delete(0, 1); 2958 wsSrcNum.Delete(0, 1);
2984 } 2959 }
2985 FX_BOOL bAddNeg = FALSE; 2960 FX_BOOL bAddNeg = FALSE;
2986 const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; 2961 const FX_WCHAR* str = wsSrcNum.c_str();
2987 int len = wsSrcNum.GetLength(); 2962 int len = wsSrcNum.GetLength();
2988 int dot_index = wsSrcNum.Find('.'); 2963 int dot_index = wsSrcNum.Find('.');
2989 if (dot_index == -1) { 2964 if (dot_index == -1) {
2990 dot_index = len; 2965 dot_index = len;
2991 } 2966 }
2992 ccf = dot_index_f - 1; 2967 ccf = dot_index_f - 1;
2993 cc = dot_index - 1; 2968 cc = dot_index - 1;
2994 while (ccf >= 0) { 2969 while (ccf >= 0) {
2995 switch (strf[ccf]) { 2970 switch (strf[ccf]) {
2996 case '9': 2971 case '9':
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
3339 CFX_WideString& wsOutput) { 3314 CFX_WideString& wsOutput) {
3340 int32_t dot_index_f = -1; 3315 int32_t dot_index_f = -1;
3341 uint32_t dwNumStyle = 0; 3316 uint32_t dwNumStyle = 0;
3342 CFX_WideString wsNumFormat; 3317 CFX_WideString wsNumFormat;
3343 IFX_Locale* pLocale = 3318 IFX_Locale* pLocale =
3344 GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); 3319 GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat);
3345 if (!pLocale || wsNumFormat.IsEmpty()) { 3320 if (!pLocale || wsNumFormat.IsEmpty()) {
3346 return FALSE; 3321 return FALSE;
3347 } 3322 }
3348 int32_t cc = 0, ccf = 0; 3323 int32_t cc = 0, ccf = 0;
3349 const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; 3324 const FX_WCHAR* strf = wsNumFormat.c_str();
3350 int lenf = wsNumFormat.GetLength(); 3325 int lenf = wsNumFormat.GetLength();
3351 double dbOrgRaw = lcNum.GetDouble(); 3326 double dbOrgRaw = lcNum.GetDouble();
3352 double dbRetValue = dbOrgRaw; 3327 double dbRetValue = dbOrgRaw;
3353 if (dwNumStyle & FX_NUMSTYLE_Percent) { 3328 if (dwNumStyle & FX_NUMSTYLE_Percent) {
3354 dbRetValue *= 100; 3329 dbRetValue *= 100;
3355 } 3330 }
3356 int32_t exponent = 0; 3331 int32_t exponent = 0;
3357 if (dwNumStyle & FX_NUMSTYLE_Exponent) { 3332 if (dwNumStyle & FX_NUMSTYLE_Exponent) {
3358 int fixed_count = 0; 3333 int fixed_count = 0;
3359 while (ccf < dot_index_f) { 3334 while (ccf < dot_index_f) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
3402 return FALSE; 3377 return FALSE;
3403 } 3378 }
3404 CFX_WideString wsGroupSymbol; 3379 CFX_WideString wsGroupSymbol;
3405 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); 3380 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol);
3406 FX_BOOL bNeg = FALSE; 3381 FX_BOOL bNeg = FALSE;
3407 if (wsNumeric[0] == '-') { 3382 if (wsNumeric[0] == '-') {
3408 bNeg = TRUE; 3383 bNeg = TRUE;
3409 wsNumeric.Delete(0, 1); 3384 wsNumeric.Delete(0, 1);
3410 } 3385 }
3411 FX_BOOL bAddNeg = FALSE; 3386 FX_BOOL bAddNeg = FALSE;
3412 const FX_WCHAR* str = (const FX_WCHAR*)wsNumeric; 3387 const FX_WCHAR* str = wsNumeric.c_str();
3413 int len = wsNumeric.GetLength(); 3388 int len = wsNumeric.GetLength();
3414 int dot_index = wsNumeric.Find('.'); 3389 int dot_index = wsNumeric.Find('.');
3415 if (dot_index == -1) { 3390 if (dot_index == -1) {
3416 dot_index = len; 3391 dot_index = len;
3417 } 3392 }
3418 ccf = dot_index_f - 1; 3393 ccf = dot_index_f - 1;
3419 cc = dot_index - 1; 3394 cc = dot_index - 1;
3420 while (ccf >= 0) { 3395 while (ccf >= 0) {
3421 switch (strf[ccf]) { 3396 switch (strf[ccf]) {
3422 case '9': 3397 case '9':
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
3759 CFX_LCNumeric lcNum(fNum); 3734 CFX_LCNumeric lcNum(fNum);
3760 return FormatLCNumeric(lcNum, wsPattern, wsOutput); 3735 return FormatLCNumeric(lcNum, wsPattern, wsOutput);
3761 } 3736 }
3762 FX_BOOL FX_DateFromCanonical(const CFX_WideString& wsDate, 3737 FX_BOOL FX_DateFromCanonical(const CFX_WideString& wsDate,
3763 CFX_Unitime& datetime) { 3738 CFX_Unitime& datetime) {
3764 int32_t year = 1900; 3739 int32_t year = 1900;
3765 int32_t month = 1; 3740 int32_t month = 1;
3766 int32_t day = 1; 3741 int32_t day = 1;
3767 uint16_t wYear = 0; 3742 uint16_t wYear = 0;
3768 int cc_start = 0, cc = 0; 3743 int cc_start = 0, cc = 0;
3769 const FX_WCHAR* str = (const FX_WCHAR*)wsDate; 3744 const FX_WCHAR* str = wsDate.c_str();
3770 int len = wsDate.GetLength(); 3745 int len = wsDate.GetLength();
3771 if (len > 10) { 3746 if (len > 10) {
3772 return FALSE; 3747 return FALSE;
3773 } 3748 }
3774 while (cc < len && cc < 4) { 3749 while (cc < len && cc < 4) {
3775 if (!FX_IsDigit(str[cc])) { 3750 if (!FX_IsDigit(str[cc])) {
3776 return FALSE; 3751 return FALSE;
3777 } 3752 }
3778 wYear = wYear * 10 + str[cc++] - '0'; 3753 wYear = wYear * 10 + str[cc++] - '0';
3779 } 3754 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
3964 } 3939 }
3965 static FX_BOOL FX_DateFormat(const CFX_WideString& wsDatePattern, 3940 static FX_BOOL FX_DateFormat(const CFX_WideString& wsDatePattern,
3966 IFX_Locale* pLocale, 3941 IFX_Locale* pLocale,
3967 const CFX_Unitime& datetime, 3942 const CFX_Unitime& datetime,
3968 CFX_WideString& wsResult) { 3943 CFX_WideString& wsResult) {
3969 FX_BOOL bRet = TRUE; 3944 FX_BOOL bRet = TRUE;
3970 int32_t year = datetime.GetYear(); 3945 int32_t year = datetime.GetYear();
3971 uint8_t month = datetime.GetMonth(); 3946 uint8_t month = datetime.GetMonth();
3972 uint8_t day = datetime.GetDay(); 3947 uint8_t day = datetime.GetDay();
3973 int32_t ccf = 0; 3948 int32_t ccf = 0;
3974 const FX_WCHAR* strf = (const FX_WCHAR*)wsDatePattern; 3949 const FX_WCHAR* strf = wsDatePattern.c_str();
3975 int32_t lenf = wsDatePattern.GetLength(); 3950 int32_t lenf = wsDatePattern.GetLength();
3976 while (ccf < lenf) { 3951 while (ccf < lenf) {
3977 if (strf[ccf] == '\'') { 3952 if (strf[ccf] == '\'') {
3978 wsResult += FX_GetLiteralText(strf, ccf, lenf); 3953 wsResult += FX_GetLiteralText(strf, ccf, lenf);
3979 ccf++; 3954 ccf++;
3980 continue; 3955 continue;
3981 } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { 3956 } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) {
3982 wsResult += strf[ccf++]; 3957 wsResult += strf[ccf++];
3983 continue; 3958 continue;
3984 } 3959 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
4083 IFX_Locale* pLocale, 4058 IFX_Locale* pLocale,
4084 const CFX_Unitime& datetime, 4059 const CFX_Unitime& datetime,
4085 CFX_WideString& wsResult) { 4060 CFX_WideString& wsResult) {
4086 FX_BOOL bGMT = FALSE; 4061 FX_BOOL bGMT = FALSE;
4087 FX_BOOL bRet = TRUE; 4062 FX_BOOL bRet = TRUE;
4088 uint8_t hour = datetime.GetHour(); 4063 uint8_t hour = datetime.GetHour();
4089 uint8_t minute = datetime.GetMinute(); 4064 uint8_t minute = datetime.GetMinute();
4090 uint8_t second = datetime.GetSecond(); 4065 uint8_t second = datetime.GetSecond();
4091 uint16_t millisecond = datetime.GetMillisecond(); 4066 uint16_t millisecond = datetime.GetMillisecond();
4092 int32_t ccf = 0; 4067 int32_t ccf = 0;
4093 const FX_WCHAR* strf = (const FX_WCHAR*)wsTimePattern; 4068 const FX_WCHAR* strf = wsTimePattern.c_str();
4094 int32_t lenf = wsTimePattern.GetLength(); 4069 int32_t lenf = wsTimePattern.GetLength();
4095 uint16_t wHour = hour; 4070 uint16_t wHour = hour;
4096 FX_BOOL bPM = FALSE; 4071 FX_BOOL bPM = FALSE;
4097 if (wsTimePattern.Find('A') != -1) { 4072 if (wsTimePattern.Find('A') != -1) {
4098 if (wHour >= 12) { 4073 if (wHour >= 12) {
4099 bPM = TRUE; 4074 bPM = TRUE;
4100 } 4075 }
4101 } 4076 }
4102 while (ccf < lenf) { 4077 while (ccf < lenf) {
4103 if (strf[ccf] == '\'') { 4078 if (strf[ccf] == '\'') {
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
4292 if (eCategory == FX_DATETIMETYPE_Date && 4267 if (eCategory == FX_DATETIMETYPE_Date &&
4293 FX_DateFromCanonical(wsSrcDateTime, dt)) { 4268 FX_DateFromCanonical(wsSrcDateTime, dt)) {
4294 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale, 4269 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale,
4295 wsOutput); 4270 wsOutput);
4296 } else if (eCategory == FX_DATETIMETYPE_Time && 4271 } else if (eCategory == FX_DATETIMETYPE_Time &&
4297 FX_TimeFromCanonical(wsSrcDateTime.AsStringC(), dt, pLocale)) { 4272 FX_TimeFromCanonical(wsSrcDateTime.AsStringC(), dt, pLocale)) {
4298 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale, 4273 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale,
4299 wsOutput); 4274 wsOutput);
4300 } 4275 }
4301 } else { 4276 } else {
4302 CFX_WideStringC wsSrcDate((const FX_WCHAR*)wsSrcDateTime, iT); 4277 CFX_WideStringC wsSrcDate(wsSrcDateTime.c_str(), iT);
4303 CFX_WideStringC wsSrcTime((const FX_WCHAR*)wsSrcDateTime + iT + 1, 4278 CFX_WideStringC wsSrcTime(wsSrcDateTime.c_str() + iT + 1,
4304 wsSrcDateTime.GetLength() - iT - 1); 4279 wsSrcDateTime.GetLength() - iT - 1);
4305 if (wsSrcDate.IsEmpty() || wsSrcTime.IsEmpty()) { 4280 if (wsSrcDate.IsEmpty() || wsSrcTime.IsEmpty()) {
4306 return FALSE; 4281 return FALSE;
4307 } 4282 }
4308 if (FX_DateFromCanonical(wsSrcDate, dt) && 4283 if (FX_DateFromCanonical(wsSrcDate, dt) &&
4309 FX_TimeFromCanonical(wsSrcTime, dt, pLocale)) { 4284 FX_TimeFromCanonical(wsSrcTime, dt, pLocale)) {
4310 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, 4285 return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern,
4311 eCategory != FX_DATETIMETYPE_TimeDate, pLocale, 4286 eCategory != FX_DATETIMETYPE_TimeDate, pLocale,
4312 wsOutput); 4287 wsOutput);
4313 } 4288 }
(...skipping 18 matching lines...) Expand all
4332 wsOutput); 4307 wsOutput);
4333 } 4308 }
4334 FX_BOOL CFX_FormatString::FormatZero(const CFX_WideString& wsPattern, 4309 FX_BOOL CFX_FormatString::FormatZero(const CFX_WideString& wsPattern,
4335 CFX_WideString& wsOutput) { 4310 CFX_WideString& wsOutput) {
4336 if (wsPattern.IsEmpty()) { 4311 if (wsPattern.IsEmpty()) {
4337 return FALSE; 4312 return FALSE;
4338 } 4313 }
4339 CFX_WideString wsTextFormat; 4314 CFX_WideString wsTextFormat;
4340 GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat); 4315 GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat);
4341 int32_t iPattern = 0; 4316 int32_t iPattern = 0;
4342 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 4317 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
4343 int32_t iLenPattern = wsTextFormat.GetLength(); 4318 int32_t iLenPattern = wsTextFormat.GetLength();
4344 while (iPattern < iLenPattern) { 4319 while (iPattern < iLenPattern) {
4345 if (pStrPattern[iPattern] == '\'') { 4320 if (pStrPattern[iPattern] == '\'') {
4346 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 4321 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
4347 iPattern++; 4322 iPattern++;
4348 continue; 4323 continue;
4349 } else { 4324 } else {
4350 wsOutput += pStrPattern[iPattern++]; 4325 wsOutput += pStrPattern[iPattern++];
4351 continue; 4326 continue;
4352 } 4327 }
4353 } 4328 }
4354 return TRUE; 4329 return TRUE;
4355 } 4330 }
4356 FX_BOOL CFX_FormatString::FormatNull(const CFX_WideString& wsPattern, 4331 FX_BOOL CFX_FormatString::FormatNull(const CFX_WideString& wsPattern,
4357 CFX_WideString& wsOutput) { 4332 CFX_WideString& wsOutput) {
4358 if (wsPattern.IsEmpty()) { 4333 if (wsPattern.IsEmpty()) {
4359 return FALSE; 4334 return FALSE;
4360 } 4335 }
4361 CFX_WideString wsTextFormat; 4336 CFX_WideString wsTextFormat;
4362 GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat); 4337 GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat);
4363 int32_t iPattern = 0; 4338 int32_t iPattern = 0;
4364 const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; 4339 const FX_WCHAR* pStrPattern = wsTextFormat.c_str();
4365 int32_t iLenPattern = wsTextFormat.GetLength(); 4340 int32_t iLenPattern = wsTextFormat.GetLength();
4366 while (iPattern < iLenPattern) { 4341 while (iPattern < iLenPattern) {
4367 if (pStrPattern[iPattern] == '\'') { 4342 if (pStrPattern[iPattern] == '\'') {
4368 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); 4343 wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern);
4369 iPattern++; 4344 iPattern++;
4370 continue; 4345 continue;
4371 } else { 4346 } else {
4372 wsOutput += pStrPattern[iPattern++]; 4347 wsOutput += pStrPattern[iPattern++];
4373 continue; 4348 continue;
4374 } 4349 }
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
5018 } 4993 }
5019 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { 4994 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const {
5020 return Multiply(val); 4995 return Multiply(val);
5021 } 4996 }
5022 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { 4997 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const {
5023 return Divide(val); 4998 return Divide(val);
5024 } 4999 }
5025 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { 5000 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const {
5026 return Modulus(val); 5001 return Modulus(val);
5027 } 5002 }
OLDNEW
« no previous file with comments | « xfa/fgas/font/fgas_stdfontmgr.cpp ('k') | xfa/fgas/localization/fgas_localemgr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698