| 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 "xfa/fxfa/fm2js/xfa_fm2jscontext.h" | 7 #include "xfa/fxfa/fm2js/xfa_fm2jscontext.h" |
| 8 | 8 |
| 9 #include <time.h> | 9 #include <time.h> |
| 10 | 10 |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 255, 6, 255, 255, 255, 255, 255, 7, 255, 255, 255, | 370 255, 6, 255, 255, 255, 255, 255, 7, 255, 255, 255, |
| 371 255, 255, 1, 17, 255, 255, 255, 255, 255, 255, 255, | 371 255, 255, 1, 17, 255, 255, 255, 255, 255, 255, 255, |
| 372 }; | 372 }; |
| 373 static_assert(FX_ArraySize(g_sAltTable_Time) == L'a' - L'A' + 1, | 373 static_assert(FX_ArraySize(g_sAltTable_Time) == L'a' - L'A' + 1, |
| 374 "Invalid g_sAltTable_Time size."); | 374 "Invalid g_sAltTable_Time size."); |
| 375 | 375 |
| 376 void AlternateDateTimeSymbols(CFX_WideString& wsPattern, | 376 void AlternateDateTimeSymbols(CFX_WideString& wsPattern, |
| 377 const CFX_WideString& wsAltSymbols, | 377 const CFX_WideString& wsAltSymbols, |
| 378 const uint8_t* pAltTable) { | 378 const uint8_t* pAltTable) { |
| 379 int32_t nLength = wsPattern.GetLength(); | 379 int32_t nLength = wsPattern.GetLength(); |
| 380 FX_BOOL bInConstRange = FALSE; | 380 bool bInConstRange = false; |
| 381 FX_BOOL bEscape = FALSE; | 381 bool bEscape = false; |
| 382 int32_t i = 0; | 382 int32_t i = 0; |
| 383 while (i < nLength) { | 383 while (i < nLength) { |
| 384 FX_WCHAR wc = wsPattern[i]; | 384 FX_WCHAR wc = wsPattern[i]; |
| 385 if (wc == L'\'') { | 385 if (wc == L'\'') { |
| 386 bInConstRange = !bInConstRange; | 386 bInConstRange = !bInConstRange; |
| 387 if (bEscape) { | 387 if (bEscape) { |
| 388 i++; | 388 i++; |
| 389 } else { | 389 } else { |
| 390 wsPattern.Delete(i); | 390 wsPattern.Delete(i); |
| 391 nLength--; | 391 nLength--; |
| 392 } | 392 } |
| 393 bEscape = !bEscape; | 393 bEscape = !bEscape; |
| 394 continue; | 394 continue; |
| 395 } | 395 } |
| 396 if (!bInConstRange && wc >= L'A' && wc <= L'a') { | 396 if (!bInConstRange && wc >= L'A' && wc <= L'a') { |
| 397 uint8_t nAlt = pAltTable[wc - L'A']; | 397 uint8_t nAlt = pAltTable[wc - L'A']; |
| 398 if (nAlt != 255) | 398 if (nAlt != 255) |
| 399 wsPattern.SetAt(i, wsAltSymbols[nAlt]); | 399 wsPattern.SetAt(i, wsAltSymbols[nAlt]); |
| 400 } | 400 } |
| 401 i++; | 401 i++; |
| 402 bEscape = FALSE; | 402 bEscape = false; |
| 403 } | 403 } |
| 404 } | 404 } |
| 405 | 405 |
| 406 bool PatternStringType(const CFX_ByteStringC& szPattern, | 406 bool PatternStringType(const CFX_ByteStringC& szPattern, |
| 407 uint32_t& patternType) { | 407 uint32_t& patternType) { |
| 408 CFX_WideString wsPattern = CFX_WideString::FromUTF8(szPattern); | 408 CFX_WideString wsPattern = CFX_WideString::FromUTF8(szPattern); |
| 409 if (FX_WSTRC(L"datetime") == wsPattern.Left(8)) { | 409 if (FX_WSTRC(L"datetime") == wsPattern.Left(8)) { |
| 410 patternType = XFA_VT_DATETIME; | 410 patternType = XFA_VT_DATETIME; |
| 411 return true; | 411 return true; |
| 412 } | 412 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 435 patternType = XFA_VT_FLOAT; | 435 patternType = XFA_VT_FLOAT; |
| 436 } | 436 } |
| 437 return true; | 437 return true; |
| 438 } | 438 } |
| 439 | 439 |
| 440 patternType = XFA_VT_NULL; | 440 patternType = XFA_VT_NULL; |
| 441 wsPattern.MakeLower(); | 441 wsPattern.MakeLower(); |
| 442 const FX_WCHAR* pData = wsPattern.c_str(); | 442 const FX_WCHAR* pData = wsPattern.c_str(); |
| 443 int32_t iLength = wsPattern.GetLength(); | 443 int32_t iLength = wsPattern.GetLength(); |
| 444 int32_t iIndex = 0; | 444 int32_t iIndex = 0; |
| 445 FX_BOOL bSingleQuotation = FALSE; | 445 bool bSingleQuotation = false; |
| 446 FX_WCHAR patternChar; | 446 FX_WCHAR patternChar; |
| 447 while (iIndex < iLength) { | 447 while (iIndex < iLength) { |
| 448 patternChar = pData[iIndex]; | 448 patternChar = pData[iIndex]; |
| 449 if (patternChar == 0x27) { | 449 if (patternChar == 0x27) { |
| 450 bSingleQuotation = !bSingleQuotation; | 450 bSingleQuotation = !bSingleQuotation; |
| 451 } else if (!bSingleQuotation && | 451 } else if (!bSingleQuotation && |
| 452 (patternChar == 'y' || patternChar == 'j')) { | 452 (patternChar == 'y' || patternChar == 'j')) { |
| 453 patternType = XFA_VT_DATE; | 453 patternType = XFA_VT_DATE; |
| 454 iIndex++; | 454 iIndex++; |
| 455 FX_WCHAR timePatternChar; | 455 FX_WCHAR timePatternChar; |
| (...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1226 if (argc > 1) { | 1226 if (argc > 1) { |
| 1227 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1227 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
| 1228 if (argLocal->IsNull()) { | 1228 if (argLocal->IsNull()) { |
| 1229 args.GetReturnValue()->SetNull(); | 1229 args.GetReturnValue()->SetNull(); |
| 1230 return; | 1230 return; |
| 1231 } | 1231 } |
| 1232 ValueToUTF8String(argLocal.get(), szLocal); | 1232 ValueToUTF8String(argLocal.get(), szLocal); |
| 1233 } | 1233 } |
| 1234 | 1234 |
| 1235 CFX_ByteString formatStr; | 1235 CFX_ByteString formatStr; |
| 1236 GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); | 1236 GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, false); |
| 1237 args.GetReturnValue()->SetString(formatStr.AsStringC()); | 1237 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
| 1238 } | 1238 } |
| 1239 | 1239 |
| 1240 // static | 1240 // static |
| 1241 void CXFA_FM2JSContext::LocalTimeFmt(CFXJSE_Value* pThis, | 1241 void CXFA_FM2JSContext::LocalTimeFmt(CFXJSE_Value* pThis, |
| 1242 const CFX_ByteStringC& szFuncName, | 1242 const CFX_ByteStringC& szFuncName, |
| 1243 CFXJSE_Arguments& args) { | 1243 CFXJSE_Arguments& args) { |
| 1244 int32_t argc = args.GetLength(); | 1244 int32_t argc = args.GetLength(); |
| 1245 if (argc > 2) { | 1245 if (argc > 2) { |
| 1246 ToJSContext(pThis, nullptr) | 1246 ToJSContext(pThis, nullptr) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1264 if (argc > 1) { | 1264 if (argc > 1) { |
| 1265 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1265 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
| 1266 if (argLocal->IsNull()) { | 1266 if (argLocal->IsNull()) { |
| 1267 args.GetReturnValue()->SetNull(); | 1267 args.GetReturnValue()->SetNull(); |
| 1268 return; | 1268 return; |
| 1269 } | 1269 } |
| 1270 ValueToUTF8String(argLocal.get(), szLocal); | 1270 ValueToUTF8String(argLocal.get(), szLocal); |
| 1271 } | 1271 } |
| 1272 | 1272 |
| 1273 CFX_ByteString formatStr; | 1273 CFX_ByteString formatStr; |
| 1274 GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); | 1274 GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, false); |
| 1275 args.GetReturnValue()->SetString(formatStr.AsStringC()); | 1275 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
| 1276 } | 1276 } |
| 1277 | 1277 |
| 1278 // static | 1278 // static |
| 1279 void CXFA_FM2JSContext::Num2Date(CFXJSE_Value* pThis, | 1279 void CXFA_FM2JSContext::Num2Date(CFXJSE_Value* pThis, |
| 1280 const CFX_ByteStringC& szFuncName, | 1280 const CFX_ByteStringC& szFuncName, |
| 1281 CFXJSE_Arguments& args) { | 1281 CFXJSE_Arguments& args) { |
| 1282 int32_t argc = args.GetLength(); | 1282 int32_t argc = args.GetLength(); |
| 1283 if (argc < 1 || argc > 3) { | 1283 if (argc < 1 || argc > 3) { |
| 1284 ToJSContext(pThis, nullptr) | 1284 ToJSContext(pThis, nullptr) |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1454 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1454 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
| 1455 if (localValue->IsNull()) { | 1455 if (localValue->IsNull()) { |
| 1456 args.GetReturnValue()->SetNull(); | 1456 args.GetReturnValue()->SetNull(); |
| 1457 return; | 1457 return; |
| 1458 } | 1458 } |
| 1459 ValueToUTF8String(localValue.get(), localString); | 1459 ValueToUTF8String(localValue.get(), localString); |
| 1460 } | 1460 } |
| 1461 | 1461 |
| 1462 CFX_ByteString szGMTTimeString; | 1462 CFX_ByteString szGMTTimeString; |
| 1463 Num2AllTime(pThis, iTime, formatString.AsStringC(), localString.AsStringC(), | 1463 Num2AllTime(pThis, iTime, formatString.AsStringC(), localString.AsStringC(), |
| 1464 TRUE, szGMTTimeString); | 1464 true, szGMTTimeString); |
| 1465 args.GetReturnValue()->SetString(szGMTTimeString.AsStringC()); | 1465 args.GetReturnValue()->SetString(szGMTTimeString.AsStringC()); |
| 1466 } | 1466 } |
| 1467 | 1467 |
| 1468 // static | 1468 // static |
| 1469 void CXFA_FM2JSContext::Num2Time(CFXJSE_Value* pThis, | 1469 void CXFA_FM2JSContext::Num2Time(CFXJSE_Value* pThis, |
| 1470 const CFX_ByteStringC& szFuncName, | 1470 const CFX_ByteStringC& szFuncName, |
| 1471 CFXJSE_Arguments& args) { | 1471 CFXJSE_Arguments& args) { |
| 1472 int32_t argc = args.GetLength(); | 1472 int32_t argc = args.GetLength(); |
| 1473 if (argc < 1 || argc > 3) { | 1473 if (argc < 1 || argc > 3) { |
| 1474 ToJSContext(pThis, nullptr) | 1474 ToJSContext(pThis, nullptr) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1502 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1502 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
| 1503 if (localValue->IsNull()) { | 1503 if (localValue->IsNull()) { |
| 1504 args.GetReturnValue()->SetNull(); | 1504 args.GetReturnValue()->SetNull(); |
| 1505 return; | 1505 return; |
| 1506 } | 1506 } |
| 1507 ValueToUTF8String(localValue.get(), localString); | 1507 ValueToUTF8String(localValue.get(), localString); |
| 1508 } | 1508 } |
| 1509 | 1509 |
| 1510 CFX_ByteString szLocalTimeString; | 1510 CFX_ByteString szLocalTimeString; |
| 1511 Num2AllTime(pThis, (int32_t)fTime, formatString.AsStringC(), | 1511 Num2AllTime(pThis, (int32_t)fTime, formatString.AsStringC(), |
| 1512 localString.AsStringC(), FALSE, szLocalTimeString); | 1512 localString.AsStringC(), false, szLocalTimeString); |
| 1513 args.GetReturnValue()->SetString(szLocalTimeString.AsStringC()); | 1513 args.GetReturnValue()->SetString(szLocalTimeString.AsStringC()); |
| 1514 } | 1514 } |
| 1515 | 1515 |
| 1516 // static | 1516 // static |
| 1517 void CXFA_FM2JSContext::Time(CFXJSE_Value* pThis, | 1517 void CXFA_FM2JSContext::Time(CFXJSE_Value* pThis, |
| 1518 const CFX_ByteStringC& szFuncName, | 1518 const CFX_ByteStringC& szFuncName, |
| 1519 CFXJSE_Arguments& args) { | 1519 CFXJSE_Arguments& args) { |
| 1520 if (args.GetLength() != 0) { | 1520 if (args.GetLength() != 0) { |
| 1521 ToJSContext(pThis, nullptr) | 1521 ToJSContext(pThis, nullptr) |
| 1522 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time"); | 1522 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time"); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 } | 1654 } |
| 1655 ValueToUTF8String(argLocal.get(), szLocal); | 1655 ValueToUTF8String(argLocal.get(), szLocal); |
| 1656 } | 1656 } |
| 1657 | 1657 |
| 1658 CFX_ByteString formatStr; | 1658 CFX_ByteString formatStr; |
| 1659 GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); | 1659 GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); |
| 1660 args.GetReturnValue()->SetString(formatStr.AsStringC()); | 1660 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
| 1661 } | 1661 } |
| 1662 | 1662 |
| 1663 // static | 1663 // static |
| 1664 FX_BOOL CXFA_FM2JSContext::IsIsoDateFormat(const FX_CHAR* pData, | 1664 bool CXFA_FM2JSContext::IsIsoDateFormat(const FX_CHAR* pData, |
| 1665 int32_t iLength, | 1665 int32_t iLength, |
| 1666 int32_t& iStyle, | 1666 int32_t& iStyle, |
| 1667 int32_t& iYear, | 1667 int32_t& iYear, |
| 1668 int32_t& iMonth, | 1668 int32_t& iMonth, |
| 1669 int32_t& iDay) { | 1669 int32_t& iDay) { |
| 1670 iYear = 0; | 1670 iYear = 0; |
| 1671 iMonth = 1; | 1671 iMonth = 1; |
| 1672 iDay = 1; | 1672 iDay = 1; |
| 1673 | 1673 |
| 1674 if (iLength < 4) | 1674 if (iLength < 4) |
| 1675 return FALSE; | 1675 return false; |
| 1676 | 1676 |
| 1677 FX_CHAR strYear[5]; | 1677 FX_CHAR strYear[5]; |
| 1678 strYear[4] = '\0'; | 1678 strYear[4] = '\0'; |
| 1679 for (int32_t i = 0; i < 4; ++i) { | 1679 for (int32_t i = 0; i < 4; ++i) { |
| 1680 if (pData[i] > '9' || pData[i] < '0') | 1680 if (pData[i] > '9' || pData[i] < '0') |
| 1681 return FALSE; | 1681 return false; |
| 1682 | 1682 |
| 1683 strYear[i] = pData[i]; | 1683 strYear[i] = pData[i]; |
| 1684 } | 1684 } |
| 1685 iYear = FXSYS_atoi(strYear); | 1685 iYear = FXSYS_atoi(strYear); |
| 1686 iStyle = 0; | 1686 iStyle = 0; |
| 1687 if (iLength == 4) | 1687 if (iLength == 4) |
| 1688 return TRUE; | 1688 return true; |
| 1689 | 1689 |
| 1690 iStyle = pData[4] == '-' ? 1 : 0; | 1690 iStyle = pData[4] == '-' ? 1 : 0; |
| 1691 | 1691 |
| 1692 FX_CHAR strTemp[3]; | 1692 FX_CHAR strTemp[3]; |
| 1693 strTemp[2] = '\0'; | 1693 strTemp[2] = '\0'; |
| 1694 int32_t iPosOff = iStyle == 0 ? 4 : 5; | 1694 int32_t iPosOff = iStyle == 0 ? 4 : 5; |
| 1695 if ((pData[iPosOff] > '9' || pData[iPosOff] < '0') || | 1695 if ((pData[iPosOff] > '9' || pData[iPosOff] < '0') || |
| 1696 (pData[iPosOff + 1] > '9' || pData[iPosOff + 1] < '0')) | 1696 (pData[iPosOff + 1] > '9' || pData[iPosOff + 1] < '0')) |
| 1697 return FALSE; | 1697 return false; |
| 1698 | 1698 |
| 1699 strTemp[0] = pData[iPosOff]; | 1699 strTemp[0] = pData[iPosOff]; |
| 1700 strTemp[1] = pData[iPosOff + 1]; | 1700 strTemp[1] = pData[iPosOff + 1]; |
| 1701 iMonth = FXSYS_atoi(strTemp); | 1701 iMonth = FXSYS_atoi(strTemp); |
| 1702 if (iMonth > 12 || iMonth < 1) | 1702 if (iMonth > 12 || iMonth < 1) |
| 1703 return FALSE; | 1703 return false; |
| 1704 | 1704 |
| 1705 if (iStyle == 0) { | 1705 if (iStyle == 0) { |
| 1706 iPosOff += 2; | 1706 iPosOff += 2; |
| 1707 if (iLength == 6) | 1707 if (iLength == 6) |
| 1708 return TRUE; | 1708 return true; |
| 1709 } else { | 1709 } else { |
| 1710 iPosOff += 3; | 1710 iPosOff += 3; |
| 1711 if (iLength == 7) | 1711 if (iLength == 7) |
| 1712 return TRUE; | 1712 return true; |
| 1713 } | 1713 } |
| 1714 if ((pData[iPosOff] > '9' || pData[iPosOff] < '0') || | 1714 if ((pData[iPosOff] > '9' || pData[iPosOff] < '0') || |
| 1715 (pData[iPosOff + 1] > '9' || pData[iPosOff + 1] < '0')) | 1715 (pData[iPosOff + 1] > '9' || pData[iPosOff + 1] < '0')) |
| 1716 return FALSE; | 1716 return false; |
| 1717 | 1717 |
| 1718 strTemp[0] = pData[iPosOff]; | 1718 strTemp[0] = pData[iPosOff]; |
| 1719 strTemp[1] = pData[iPosOff + 1]; | 1719 strTemp[1] = pData[iPosOff + 1]; |
| 1720 iDay = FXSYS_atoi(strTemp); | 1720 iDay = FXSYS_atoi(strTemp); |
| 1721 if (iPosOff + 2 < iLength) | 1721 if (iPosOff + 2 < iLength) |
| 1722 return FALSE; | 1722 return false; |
| 1723 | 1723 |
| 1724 if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) { | 1724 if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) { |
| 1725 if (iMonth == 2 && iDay > 29) | 1725 if (iMonth == 2 && iDay > 29) |
| 1726 return FALSE; | 1726 return false; |
| 1727 } else { | 1727 } else { |
| 1728 if (iMonth == 2 && iDay > 28) | 1728 if (iMonth == 2 && iDay > 28) |
| 1729 return FALSE; | 1729 return false; |
| 1730 } | 1730 } |
| 1731 if (iMonth != 2) { | 1731 if (iMonth != 2) { |
| 1732 if (iMonth < 8) { | 1732 if (iMonth < 8) { |
| 1733 if (iDay > (iMonth % 2 == 0 ? 30 : 31)) | 1733 if (iDay > (iMonth % 2 == 0 ? 30 : 31)) |
| 1734 return FALSE; | 1734 return false; |
| 1735 } else if (iDay > (iMonth % 2 == 0 ? 31 : 30)) { | 1735 } else if (iDay > (iMonth % 2 == 0 ? 31 : 30)) { |
| 1736 return FALSE; | 1736 return false; |
| 1737 } | 1737 } |
| 1738 } | 1738 } |
| 1739 return TRUE; | 1739 return true; |
| 1740 } | 1740 } |
| 1741 | 1741 |
| 1742 // static | 1742 // static |
| 1743 FX_BOOL CXFA_FM2JSContext::IsIsoTimeFormat(const FX_CHAR* pData, | 1743 bool CXFA_FM2JSContext::IsIsoTimeFormat(const FX_CHAR* pData, |
| 1744 int32_t iLength, | 1744 int32_t iLength, |
| 1745 int32_t& iHour, | 1745 int32_t& iHour, |
| 1746 int32_t& iMinute, | 1746 int32_t& iMinute, |
| 1747 int32_t& iSecond, | 1747 int32_t& iSecond, |
| 1748 int32_t& iMilliSecond, | 1748 int32_t& iMilliSecond, |
| 1749 int32_t& iZoneHour, | 1749 int32_t& iZoneHour, |
| 1750 int32_t& iZoneMinute) { | 1750 int32_t& iZoneMinute) { |
| 1751 iHour = 0; | 1751 iHour = 0; |
| 1752 iMinute = 0; | 1752 iMinute = 0; |
| 1753 iSecond = 0; | 1753 iSecond = 0; |
| 1754 iMilliSecond = 0; | 1754 iMilliSecond = 0; |
| 1755 iZoneHour = 0; | 1755 iZoneHour = 0; |
| 1756 iZoneMinute = 0; | 1756 iZoneMinute = 0; |
| 1757 if (!pData) | 1757 if (!pData) |
| 1758 return FALSE; | 1758 return false; |
| 1759 | 1759 |
| 1760 FX_CHAR strTemp[3]; | 1760 FX_CHAR strTemp[3]; |
| 1761 strTemp[2] = '\0'; | 1761 strTemp[2] = '\0'; |
| 1762 int32_t iZone = 0; | 1762 int32_t iZone = 0; |
| 1763 int32_t i = 0; | 1763 int32_t i = 0; |
| 1764 while (i < iLength) { | 1764 while (i < iLength) { |
| 1765 if ((pData[i] > '9' || pData[i] < '0') && pData[i] != ':') { | 1765 if ((pData[i] > '9' || pData[i] < '0') && pData[i] != ':') { |
| 1766 iZone = i; | 1766 iZone = i; |
| 1767 break; | 1767 break; |
| 1768 } | 1768 } |
| 1769 ++i; | 1769 ++i; |
| 1770 } | 1770 } |
| 1771 if (i == iLength) | 1771 if (i == iLength) |
| 1772 iZone = iLength; | 1772 iZone = iLength; |
| 1773 | 1773 |
| 1774 int32_t iPos = 0; | 1774 int32_t iPos = 0; |
| 1775 int32_t iIndex = 0; | 1775 int32_t iIndex = 0; |
| 1776 while (iIndex < iZone) { | 1776 while (iIndex < iZone) { |
| 1777 if (iIndex >= iZone) | 1777 if (iIndex >= iZone) |
| 1778 break; | 1778 break; |
| 1779 | 1779 |
| 1780 if (pData[iIndex] > '9' || pData[iIndex] < '0') | 1780 if (pData[iIndex] > '9' || pData[iIndex] < '0') |
| 1781 return FALSE; | 1781 return false; |
| 1782 | 1782 |
| 1783 strTemp[0] = pData[iIndex]; | 1783 strTemp[0] = pData[iIndex]; |
| 1784 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') | 1784 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') |
| 1785 return FALSE; | 1785 return false; |
| 1786 | 1786 |
| 1787 strTemp[1] = pData[iIndex + 1]; | 1787 strTemp[1] = pData[iIndex + 1]; |
| 1788 if (FXSYS_atoi(strTemp) > 60) | 1788 if (FXSYS_atoi(strTemp) > 60) |
| 1789 return FALSE; | 1789 return false; |
| 1790 | 1790 |
| 1791 if (pData[2] == ':') { | 1791 if (pData[2] == ':') { |
| 1792 if (iPos == 0) { | 1792 if (iPos == 0) { |
| 1793 iHour = FXSYS_atoi(strTemp); | 1793 iHour = FXSYS_atoi(strTemp); |
| 1794 ++iPos; | 1794 ++iPos; |
| 1795 } else if (iPos == 1) { | 1795 } else if (iPos == 1) { |
| 1796 iMinute = FXSYS_atoi(strTemp); | 1796 iMinute = FXSYS_atoi(strTemp); |
| 1797 ++iPos; | 1797 ++iPos; |
| 1798 } else { | 1798 } else { |
| 1799 iSecond = FXSYS_atoi(strTemp); | 1799 iSecond = FXSYS_atoi(strTemp); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1811 ++iPos; | 1811 ++iPos; |
| 1812 } | 1812 } |
| 1813 iIndex += 2; | 1813 iIndex += 2; |
| 1814 } | 1814 } |
| 1815 } | 1815 } |
| 1816 if (pData[iIndex] == '.') { | 1816 if (pData[iIndex] == '.') { |
| 1817 ++iIndex; | 1817 ++iIndex; |
| 1818 FX_CHAR strSec[4]; | 1818 FX_CHAR strSec[4]; |
| 1819 strSec[3] = '\0'; | 1819 strSec[3] = '\0'; |
| 1820 if (pData[iIndex] > '9' || pData[iIndex] < '0') | 1820 if (pData[iIndex] > '9' || pData[iIndex] < '0') |
| 1821 return FALSE; | 1821 return false; |
| 1822 | 1822 |
| 1823 strSec[0] = pData[iIndex]; | 1823 strSec[0] = pData[iIndex]; |
| 1824 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') | 1824 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') |
| 1825 return FALSE; | 1825 return false; |
| 1826 | 1826 |
| 1827 strSec[1] = pData[iIndex + 1]; | 1827 strSec[1] = pData[iIndex + 1]; |
| 1828 if (pData[iIndex + 2] > '9' || pData[iIndex + 2] < '0') | 1828 if (pData[iIndex + 2] > '9' || pData[iIndex + 2] < '0') |
| 1829 return FALSE; | 1829 return false; |
| 1830 | 1830 |
| 1831 strSec[2] = pData[iIndex + 2]; | 1831 strSec[2] = pData[iIndex + 2]; |
| 1832 iMilliSecond = FXSYS_atoi(strSec); | 1832 iMilliSecond = FXSYS_atoi(strSec); |
| 1833 if (iMilliSecond > 100) { | 1833 if (iMilliSecond > 100) { |
| 1834 iMilliSecond = 0; | 1834 iMilliSecond = 0; |
| 1835 return FALSE; | 1835 return false; |
| 1836 } | 1836 } |
| 1837 iIndex += 3; | 1837 iIndex += 3; |
| 1838 } | 1838 } |
| 1839 if (pData[iIndex] == 'z' || pData[iIndex] == 'Z') | 1839 if (pData[iIndex] == 'z' || pData[iIndex] == 'Z') |
| 1840 return TRUE; | 1840 return true; |
| 1841 | 1841 |
| 1842 int32_t iSign = 1; | 1842 int32_t iSign = 1; |
| 1843 if (pData[iIndex] == '+') { | 1843 if (pData[iIndex] == '+') { |
| 1844 ++iIndex; | 1844 ++iIndex; |
| 1845 } else if (pData[iIndex] == '-') { | 1845 } else if (pData[iIndex] == '-') { |
| 1846 iSign = -1; | 1846 iSign = -1; |
| 1847 ++iIndex; | 1847 ++iIndex; |
| 1848 } | 1848 } |
| 1849 iPos = 0; | 1849 iPos = 0; |
| 1850 while (iIndex < iLength) { | 1850 while (iIndex < iLength) { |
| 1851 if (iIndex >= iLength) | 1851 if (iIndex >= iLength) |
| 1852 return FALSE; | 1852 return false; |
| 1853 if (pData[iIndex] > '9' || pData[iIndex] < '0') | 1853 if (pData[iIndex] > '9' || pData[iIndex] < '0') |
| 1854 return FALSE; | 1854 return false; |
| 1855 | 1855 |
| 1856 strTemp[0] = pData[iIndex]; | 1856 strTemp[0] = pData[iIndex]; |
| 1857 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') | 1857 if (pData[iIndex + 1] > '9' || pData[iIndex + 1] < '0') |
| 1858 return FALSE; | 1858 return false; |
| 1859 | 1859 |
| 1860 strTemp[1] = pData[iIndex + 1]; | 1860 strTemp[1] = pData[iIndex + 1]; |
| 1861 if (FXSYS_atoi(strTemp) > 60) | 1861 if (FXSYS_atoi(strTemp) > 60) |
| 1862 return FALSE; | 1862 return false; |
| 1863 | 1863 |
| 1864 if (pData[2] == ':') { | 1864 if (pData[2] == ':') { |
| 1865 if (iPos == 0) { | 1865 if (iPos == 0) { |
| 1866 iZoneHour = FXSYS_atoi(strTemp); | 1866 iZoneHour = FXSYS_atoi(strTemp); |
| 1867 } else if (iPos == 1) { | 1867 } else if (iPos == 1) { |
| 1868 iZoneMinute = FXSYS_atoi(strTemp); | 1868 iZoneMinute = FXSYS_atoi(strTemp); |
| 1869 } | 1869 } |
| 1870 iIndex += 3; | 1870 iIndex += 3; |
| 1871 } else { | 1871 } else { |
| 1872 if (!iPos) { | 1872 if (!iPos) { |
| 1873 iZoneHour = FXSYS_atoi(strTemp); | 1873 iZoneHour = FXSYS_atoi(strTemp); |
| 1874 ++iPos; | 1874 ++iPos; |
| 1875 } else if (iPos == 1) { | 1875 } else if (iPos == 1) { |
| 1876 iZoneMinute = FXSYS_atoi(strTemp); | 1876 iZoneMinute = FXSYS_atoi(strTemp); |
| 1877 ++iPos; | 1877 ++iPos; |
| 1878 } | 1878 } |
| 1879 iIndex += 2; | 1879 iIndex += 2; |
| 1880 } | 1880 } |
| 1881 } | 1881 } |
| 1882 if (iIndex < iLength) | 1882 if (iIndex < iLength) |
| 1883 return FALSE; | 1883 return false; |
| 1884 | 1884 |
| 1885 iZoneHour *= iSign; | 1885 iZoneHour *= iSign; |
| 1886 return TRUE; | 1886 return true; |
| 1887 } | 1887 } |
| 1888 | 1888 |
| 1889 // static | 1889 // static |
| 1890 FX_BOOL CXFA_FM2JSContext::IsIsoDateTimeFormat(const FX_CHAR* pData, | 1890 bool CXFA_FM2JSContext::IsIsoDateTimeFormat(const FX_CHAR* pData, |
| 1891 int32_t iLength, | 1891 int32_t iLength, |
| 1892 int32_t& iYear, | 1892 int32_t& iYear, |
| 1893 int32_t& iMonth, | 1893 int32_t& iMonth, |
| 1894 int32_t& iDay, | 1894 int32_t& iDay, |
| 1895 int32_t& iHour, | 1895 int32_t& iHour, |
| 1896 int32_t& iMinute, | 1896 int32_t& iMinute, |
| 1897 int32_t& iSecond, | 1897 int32_t& iSecond, |
| 1898 int32_t& iMillionSecond, | 1898 int32_t& iMillionSecond, |
| 1899 int32_t& iZoneHour, | 1899 int32_t& iZoneHour, |
| 1900 int32_t& iZoneMinute) { | 1900 int32_t& iZoneMinute) { |
| 1901 iYear = 0; | 1901 iYear = 0; |
| 1902 iMonth = 0; | 1902 iMonth = 0; |
| 1903 iDay = 0; | 1903 iDay = 0; |
| 1904 iHour = 0; | 1904 iHour = 0; |
| 1905 iMinute = 0; | 1905 iMinute = 0; |
| 1906 iSecond = 0; | 1906 iSecond = 0; |
| 1907 if (!pData) | 1907 if (!pData) |
| 1908 return FALSE; | 1908 return false; |
| 1909 | 1909 |
| 1910 int32_t iIndex = 0; | 1910 int32_t iIndex = 0; |
| 1911 while (pData[iIndex] != 'T' && pData[iIndex] != 't') { | 1911 while (pData[iIndex] != 'T' && pData[iIndex] != 't') { |
| 1912 if (iIndex >= iLength) | 1912 if (iIndex >= iLength) |
| 1913 return FALSE; | 1913 return false; |
| 1914 ++iIndex; | 1914 ++iIndex; |
| 1915 } | 1915 } |
| 1916 if (iIndex != 8 && iIndex != 10) | 1916 if (iIndex != 8 && iIndex != 10) |
| 1917 return FALSE; | 1917 return false; |
| 1918 | 1918 |
| 1919 int32_t iStyle = -1; | 1919 int32_t iStyle = -1; |
| 1920 if (!IsIsoDateFormat(pData, iIndex, iStyle, iYear, iMonth, iDay)) | 1920 if (!IsIsoDateFormat(pData, iIndex, iStyle, iYear, iMonth, iDay)) |
| 1921 return FALSE; | 1921 return false; |
| 1922 if (pData[iIndex] != 'T' && pData[iIndex] != 't') | 1922 if (pData[iIndex] != 'T' && pData[iIndex] != 't') |
| 1923 return TRUE; | 1923 return true; |
| 1924 | 1924 |
| 1925 ++iIndex; | 1925 ++iIndex; |
| 1926 if (((iLength - iIndex > 13) && (iLength - iIndex < 6)) && | 1926 if (((iLength - iIndex > 13) && (iLength - iIndex < 6)) && |
| 1927 (iLength - iIndex != 15)) { | 1927 (iLength - iIndex != 15)) { |
| 1928 return TRUE; | 1928 return true; |
| 1929 } | 1929 } |
| 1930 if (!IsIsoTimeFormat(pData + iIndex, iLength - iIndex, iHour, iMinute, | 1930 if (!IsIsoTimeFormat(pData + iIndex, iLength - iIndex, iHour, iMinute, |
| 1931 iSecond, iMillionSecond, iZoneHour, iZoneMinute)) { | 1931 iSecond, iMillionSecond, iZoneHour, iZoneMinute)) { |
| 1932 return FALSE; | 1932 return false; |
| 1933 } | 1933 } |
| 1934 | 1934 |
| 1935 return TRUE; | 1935 return true; |
| 1936 } | 1936 } |
| 1937 | 1937 |
| 1938 // static | 1938 // static |
| 1939 FX_BOOL CXFA_FM2JSContext::Local2IsoDate(CFXJSE_Value* pThis, | 1939 bool CXFA_FM2JSContext::Local2IsoDate(CFXJSE_Value* pThis, |
| 1940 const CFX_ByteStringC& szDate, | 1940 const CFX_ByteStringC& szDate, |
| 1941 const CFX_ByteStringC& szFormat, | 1941 const CFX_ByteStringC& szFormat, |
| 1942 const CFX_ByteStringC& szLocale, | 1942 const CFX_ByteStringC& szLocale, |
| 1943 CFX_ByteString& strIsoDate) { | 1943 CFX_ByteString& strIsoDate) { |
| 1944 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 1944 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 1945 if (!pDoc) | 1945 if (!pDoc) |
| 1946 return FALSE; | 1946 return false; |
| 1947 | 1947 |
| 1948 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 1948 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
| 1949 IFX_Locale* pLocale = nullptr; | 1949 IFX_Locale* pLocale = nullptr; |
| 1950 if (szLocale.IsEmpty()) { | 1950 if (szLocale.IsEmpty()) { |
| 1951 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 1951 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
| 1952 ASSERT(pThisNode); | 1952 ASSERT(pThisNode); |
| 1953 | 1953 |
| 1954 CXFA_WidgetData widgetData(pThisNode); | 1954 CXFA_WidgetData widgetData(pThisNode); |
| 1955 pLocale = widgetData.GetLocal(); | 1955 pLocale = widgetData.GetLocal(); |
| 1956 } else { | 1956 } else { |
| 1957 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); | 1957 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); |
| 1958 } | 1958 } |
| 1959 if (!pLocale) | 1959 if (!pLocale) |
| 1960 return FALSE; | 1960 return false; |
| 1961 | 1961 |
| 1962 CFX_WideString wsFormat; | 1962 CFX_WideString wsFormat; |
| 1963 if (szFormat.IsEmpty()) | 1963 if (szFormat.IsEmpty()) |
| 1964 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 1964 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
| 1965 else | 1965 else |
| 1966 wsFormat = CFX_WideString::FromUTF8(szFormat); | 1966 wsFormat = CFX_WideString::FromUTF8(szFormat); |
| 1967 | 1967 |
| 1968 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), | 1968 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), |
| 1969 wsFormat, pLocale, pMgr); | 1969 wsFormat, pLocale, pMgr); |
| 1970 CFX_Unitime dt = widgetValue.GetDate(); | 1970 CFX_Unitime dt = widgetValue.GetDate(); |
| 1971 strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay()); | 1971 strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay()); |
| 1972 return TRUE; | 1972 return true; |
| 1973 } | 1973 } |
| 1974 | 1974 |
| 1975 // static | 1975 // static |
| 1976 FX_BOOL CXFA_FM2JSContext::Local2IsoTime(CFXJSE_Value* pThis, | 1976 bool CXFA_FM2JSContext::Local2IsoTime(CFXJSE_Value* pThis, |
| 1977 const CFX_ByteStringC& szTime, | 1977 const CFX_ByteStringC& szTime, |
| 1978 const CFX_ByteStringC& szFormat, | 1978 const CFX_ByteStringC& szFormat, |
| 1979 const CFX_ByteStringC& szLocale, | 1979 const CFX_ByteStringC& szLocale, |
| 1980 CFX_ByteString& strIsoTime) { | 1980 CFX_ByteString& strIsoTime) { |
| 1981 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 1981 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 1982 if (!pDoc) | 1982 if (!pDoc) |
| 1983 return FALSE; | 1983 return false; |
| 1984 | 1984 |
| 1985 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 1985 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
| 1986 IFX_Locale* pLocale = nullptr; | 1986 IFX_Locale* pLocale = nullptr; |
| 1987 if (szLocale.IsEmpty()) { | 1987 if (szLocale.IsEmpty()) { |
| 1988 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 1988 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
| 1989 ASSERT(pThisNode); | 1989 ASSERT(pThisNode); |
| 1990 | 1990 |
| 1991 CXFA_WidgetData widgetData(pThisNode); | 1991 CXFA_WidgetData widgetData(pThisNode); |
| 1992 pLocale = widgetData.GetLocal(); | 1992 pLocale = widgetData.GetLocal(); |
| 1993 } else { | 1993 } else { |
| 1994 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); | 1994 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); |
| 1995 } | 1995 } |
| 1996 if (!pLocale) | 1996 if (!pLocale) |
| 1997 return FALSE; | 1997 return false; |
| 1998 | 1998 |
| 1999 CFX_WideString wsFormat; | 1999 CFX_WideString wsFormat; |
| 2000 if (szFormat.IsEmpty()) | 2000 if (szFormat.IsEmpty()) |
| 2001 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 2001 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
| 2002 else | 2002 else |
| 2003 wsFormat = CFX_WideString::FromUTF8(szFormat); | 2003 wsFormat = CFX_WideString::FromUTF8(szFormat); |
| 2004 | 2004 |
| 2005 wsFormat = L"time{" + wsFormat + L"}"; | 2005 wsFormat = L"time{" + wsFormat + L"}"; |
| 2006 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), | 2006 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), |
| 2007 wsFormat, pLocale, pMgr); | 2007 wsFormat, pLocale, pMgr); |
| 2008 CFX_Unitime utime = widgetValue.GetTime(); | 2008 CFX_Unitime utime = widgetValue.GetTime(); |
| 2009 strIsoTime.Format("%02d:%02d:%02d.%03d", utime.GetHour(), utime.GetMinute(), | 2009 strIsoTime.Format("%02d:%02d:%02d.%03d", utime.GetHour(), utime.GetMinute(), |
| 2010 utime.GetSecond(), utime.GetMillisecond()); | 2010 utime.GetSecond(), utime.GetMillisecond()); |
| 2011 return TRUE; | 2011 return true; |
| 2012 } | 2012 } |
| 2013 | 2013 |
| 2014 // static | 2014 // static |
| 2015 FX_BOOL CXFA_FM2JSContext::IsoDate2Local(CFXJSE_Value* pThis, | 2015 bool CXFA_FM2JSContext::IsoDate2Local(CFXJSE_Value* pThis, |
| 2016 const CFX_ByteStringC& szDate, | 2016 const CFX_ByteStringC& szDate, |
| 2017 const CFX_ByteStringC& szFormat, | 2017 const CFX_ByteStringC& szFormat, |
| 2018 const CFX_ByteStringC& szLocale, | 2018 const CFX_ByteStringC& szLocale, |
| 2019 CFX_ByteString& strLocalDate) { | 2019 CFX_ByteString& strLocalDate) { |
| 2020 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 2020 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 2021 if (!pDoc) | 2021 if (!pDoc) |
| 2022 return FALSE; | 2022 return false; |
| 2023 | 2023 |
| 2024 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 2024 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
| 2025 IFX_Locale* pLocale = nullptr; | 2025 IFX_Locale* pLocale = nullptr; |
| 2026 if (szLocale.IsEmpty()) { | 2026 if (szLocale.IsEmpty()) { |
| 2027 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 2027 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
| 2028 ASSERT(pThisNode); | 2028 ASSERT(pThisNode); |
| 2029 CXFA_WidgetData widgetData(pThisNode); | 2029 CXFA_WidgetData widgetData(pThisNode); |
| 2030 pLocale = widgetData.GetLocal(); | 2030 pLocale = widgetData.GetLocal(); |
| 2031 } else { | 2031 } else { |
| 2032 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); | 2032 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); |
| 2033 } | 2033 } |
| 2034 if (!pLocale) | 2034 if (!pLocale) |
| 2035 return FALSE; | 2035 return false; |
| 2036 | 2036 |
| 2037 CFX_WideString wsFormat; | 2037 CFX_WideString wsFormat; |
| 2038 if (szFormat.IsEmpty()) | 2038 if (szFormat.IsEmpty()) |
| 2039 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 2039 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
| 2040 else | 2040 else |
| 2041 wsFormat = CFX_WideString::FromUTF8(szFormat); | 2041 wsFormat = CFX_WideString::FromUTF8(szFormat); |
| 2042 | 2042 |
| 2043 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), | 2043 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), |
| 2044 pMgr); | 2044 pMgr); |
| 2045 CFX_WideString wsRet; | 2045 CFX_WideString wsRet; |
| 2046 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, | 2046 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, |
| 2047 XFA_VALUEPICTURE_Display); | 2047 XFA_VALUEPICTURE_Display); |
| 2048 strLocalDate = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); | 2048 strLocalDate = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); |
| 2049 return TRUE; | 2049 return true; |
| 2050 } | 2050 } |
| 2051 | 2051 |
| 2052 // static | 2052 // static |
| 2053 FX_BOOL CXFA_FM2JSContext::IsoTime2Local(CFXJSE_Value* pThis, | 2053 bool CXFA_FM2JSContext::IsoTime2Local(CFXJSE_Value* pThis, |
| 2054 const CFX_ByteStringC& szTime, | 2054 const CFX_ByteStringC& szTime, |
| 2055 const CFX_ByteStringC& szFormat, | 2055 const CFX_ByteStringC& szFormat, |
| 2056 const CFX_ByteStringC& szLocale, | 2056 const CFX_ByteStringC& szLocale, |
| 2057 CFX_ByteString& strLocalTime) { | 2057 CFX_ByteString& strLocalTime) { |
| 2058 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 2058 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 2059 if (!pDoc) | 2059 if (!pDoc) |
| 2060 return FALSE; | 2060 return false; |
| 2061 | 2061 |
| 2062 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 2062 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
| 2063 IFX_Locale* pLocale = nullptr; | 2063 IFX_Locale* pLocale = nullptr; |
| 2064 if (szLocale.IsEmpty()) { | 2064 if (szLocale.IsEmpty()) { |
| 2065 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 2065 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
| 2066 ASSERT(pThisNode); | 2066 ASSERT(pThisNode); |
| 2067 CXFA_WidgetData widgetData(pThisNode); | 2067 CXFA_WidgetData widgetData(pThisNode); |
| 2068 pLocale = widgetData.GetLocal(); | 2068 pLocale = widgetData.GetLocal(); |
| 2069 } else { | 2069 } else { |
| 2070 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); | 2070 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); |
| 2071 } | 2071 } |
| 2072 if (!pLocale) | 2072 if (!pLocale) |
| 2073 return FALSE; | 2073 return false; |
| 2074 | 2074 |
| 2075 CFX_WideString wsFormat; | 2075 CFX_WideString wsFormat; |
| 2076 if (szFormat.IsEmpty()) | 2076 if (szFormat.IsEmpty()) |
| 2077 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 2077 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
| 2078 else | 2078 else |
| 2079 wsFormat = CFX_WideString::FromUTF8(szFormat); | 2079 wsFormat = CFX_WideString::FromUTF8(szFormat); |
| 2080 | 2080 |
| 2081 wsFormat = L"time{" + wsFormat + L"}"; | 2081 wsFormat = L"time{" + wsFormat + L"}"; |
| 2082 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), | 2082 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), |
| 2083 pMgr); | 2083 pMgr); |
| 2084 CFX_WideString wsRet; | 2084 CFX_WideString wsRet; |
| 2085 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, | 2085 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, |
| 2086 XFA_VALUEPICTURE_Display); | 2086 XFA_VALUEPICTURE_Display); |
| 2087 strLocalTime = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); | 2087 strLocalTime = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); |
| 2088 return TRUE; | 2088 return true; |
| 2089 } | 2089 } |
| 2090 | 2090 |
| 2091 // static | 2091 // static |
| 2092 FX_BOOL CXFA_FM2JSContext::GetGMTTime(CFXJSE_Value* pThis, | 2092 bool CXFA_FM2JSContext::GetGMTTime(CFXJSE_Value* pThis, |
| 2093 const CFX_ByteStringC& szTime, | 2093 const CFX_ByteStringC& szTime, |
| 2094 const CFX_ByteStringC& szFormat, | 2094 const CFX_ByteStringC& szFormat, |
| 2095 const CFX_ByteStringC& szLocale, | 2095 const CFX_ByteStringC& szLocale, |
| 2096 CFX_ByteString& strGMTTime) { | 2096 CFX_ByteString& strGMTTime) { |
| 2097 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 2097 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 2098 if (!pDoc) | 2098 if (!pDoc) |
| 2099 return FALSE; | 2099 return false; |
| 2100 | 2100 |
| 2101 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 2101 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
| 2102 IFX_Locale* pLocale = nullptr; | 2102 IFX_Locale* pLocale = nullptr; |
| 2103 if (szLocale.IsEmpty()) { | 2103 if (szLocale.IsEmpty()) { |
| 2104 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 2104 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
| 2105 ASSERT(pThisNode); | 2105 ASSERT(pThisNode); |
| 2106 CXFA_WidgetData widgetData(pThisNode); | 2106 CXFA_WidgetData widgetData(pThisNode); |
| 2107 pLocale = widgetData.GetLocal(); | 2107 pLocale = widgetData.GetLocal(); |
| 2108 } else { | 2108 } else { |
| 2109 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); | 2109 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale)); |
| 2110 } | 2110 } |
| 2111 if (!pLocale) | 2111 if (!pLocale) |
| 2112 return FALSE; | 2112 return false; |
| 2113 | 2113 |
| 2114 CFX_WideString wsFormat; | 2114 CFX_WideString wsFormat; |
| 2115 if (szFormat.IsEmpty()) | 2115 if (szFormat.IsEmpty()) |
| 2116 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 2116 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
| 2117 else | 2117 else |
| 2118 wsFormat = CFX_WideString::FromUTF8(szFormat); | 2118 wsFormat = CFX_WideString::FromUTF8(szFormat); |
| 2119 | 2119 |
| 2120 wsFormat = L"time{" + wsFormat + L"}"; | 2120 wsFormat = L"time{" + wsFormat + L"}"; |
| 2121 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), | 2121 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime), |
| 2122 pMgr); | 2122 pMgr); |
| 2123 CFX_WideString wsRet; | 2123 CFX_WideString wsRet; |
| 2124 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, | 2124 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, |
| 2125 XFA_VALUEPICTURE_Display); | 2125 XFA_VALUEPICTURE_Display); |
| 2126 strGMTTime = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); | 2126 strGMTTime = FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()); |
| 2127 return TRUE; | 2127 return true; |
| 2128 } | 2128 } |
| 2129 | 2129 |
| 2130 // static | 2130 // static |
| 2131 int32_t CXFA_FM2JSContext::DateString2Num(const CFX_ByteStringC& szDateString) { | 2131 int32_t CXFA_FM2JSContext::DateString2Num(const CFX_ByteStringC& szDateString) { |
| 2132 int32_t iLength = szDateString.GetLength(); | 2132 int32_t iLength = szDateString.GetLength(); |
| 2133 int32_t iYear = 0; | 2133 int32_t iYear = 0; |
| 2134 int32_t iMonth = 0; | 2134 int32_t iMonth = 0; |
| 2135 int32_t iDay = 0; | 2135 int32_t iDay = 0; |
| 2136 if (iLength <= 10) { | 2136 if (iLength <= 10) { |
| 2137 int32_t iStyle = -1; | 2137 int32_t iStyle = -1; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2182 ++i; | 2182 ++i; |
| 2183 } | 2183 } |
| 2184 return (int32_t)dDays; | 2184 return (int32_t)dDays; |
| 2185 } | 2185 } |
| 2186 | 2186 |
| 2187 // static | 2187 // static |
| 2188 void CXFA_FM2JSContext::GetLocalDateFormat(CFXJSE_Value* pThis, | 2188 void CXFA_FM2JSContext::GetLocalDateFormat(CFXJSE_Value* pThis, |
| 2189 int32_t iStyle, | 2189 int32_t iStyle, |
| 2190 const CFX_ByteStringC& szLocalStr, | 2190 const CFX_ByteStringC& szLocalStr, |
| 2191 CFX_ByteString& strFormat, | 2191 CFX_ByteString& strFormat, |
| 2192 FX_BOOL bStandard) { | 2192 bool bStandard) { |
| 2193 FX_LOCALEDATETIMESUBCATEGORY strStyle; | 2193 FX_LOCALEDATETIMESUBCATEGORY strStyle; |
| 2194 switch (iStyle) { | 2194 switch (iStyle) { |
| 2195 case 1: | 2195 case 1: |
| 2196 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; | 2196 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; |
| 2197 break; | 2197 break; |
| 2198 case 3: | 2198 case 3: |
| 2199 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; | 2199 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; |
| 2200 break; | 2200 break; |
| 2201 case 4: | 2201 case 4: |
| 2202 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; | 2202 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2233 AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Date); | 2233 AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Date); |
| 2234 } | 2234 } |
| 2235 strFormat = FX_UTF8Encode(strRet.c_str(), strRet.GetLength()); | 2235 strFormat = FX_UTF8Encode(strRet.c_str(), strRet.GetLength()); |
| 2236 } | 2236 } |
| 2237 | 2237 |
| 2238 // static | 2238 // static |
| 2239 void CXFA_FM2JSContext::GetLocalTimeFormat(CFXJSE_Value* pThis, | 2239 void CXFA_FM2JSContext::GetLocalTimeFormat(CFXJSE_Value* pThis, |
| 2240 int32_t iStyle, | 2240 int32_t iStyle, |
| 2241 const CFX_ByteStringC& szLocalStr, | 2241 const CFX_ByteStringC& szLocalStr, |
| 2242 CFX_ByteString& strFormat, | 2242 CFX_ByteString& strFormat, |
| 2243 FX_BOOL bStandard) { | 2243 bool bStandard) { |
| 2244 FX_LOCALEDATETIMESUBCATEGORY strStyle; | 2244 FX_LOCALEDATETIMESUBCATEGORY strStyle; |
| 2245 switch (iStyle) { | 2245 switch (iStyle) { |
| 2246 case 1: | 2246 case 1: |
| 2247 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; | 2247 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; |
| 2248 break; | 2248 break; |
| 2249 case 3: | 2249 case 3: |
| 2250 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; | 2250 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; |
| 2251 break; | 2251 break; |
| 2252 case 4: | 2252 case 4: |
| 2253 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; | 2253 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2284 AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Time); | 2284 AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Time); |
| 2285 } | 2285 } |
| 2286 strFormat = FX_UTF8Encode(strRet.c_str(), strRet.GetLength()); | 2286 strFormat = FX_UTF8Encode(strRet.c_str(), strRet.GetLength()); |
| 2287 } | 2287 } |
| 2288 | 2288 |
| 2289 // static | 2289 // static |
| 2290 void CXFA_FM2JSContext::GetStandardDateFormat(CFXJSE_Value* pThis, | 2290 void CXFA_FM2JSContext::GetStandardDateFormat(CFXJSE_Value* pThis, |
| 2291 int32_t iStyle, | 2291 int32_t iStyle, |
| 2292 const CFX_ByteStringC& szLocalStr, | 2292 const CFX_ByteStringC& szLocalStr, |
| 2293 CFX_ByteString& strFormat) { | 2293 CFX_ByteString& strFormat) { |
| 2294 GetLocalDateFormat(pThis, iStyle, szLocalStr, strFormat, TRUE); | 2294 GetLocalDateFormat(pThis, iStyle, szLocalStr, strFormat, true); |
| 2295 } | 2295 } |
| 2296 | 2296 |
| 2297 // static | 2297 // static |
| 2298 void CXFA_FM2JSContext::GetStandardTimeFormat(CFXJSE_Value* pThis, | 2298 void CXFA_FM2JSContext::GetStandardTimeFormat(CFXJSE_Value* pThis, |
| 2299 int32_t iStyle, | 2299 int32_t iStyle, |
| 2300 const CFX_ByteStringC& szLocalStr, | 2300 const CFX_ByteStringC& szLocalStr, |
| 2301 CFX_ByteString& strFormat) { | 2301 CFX_ByteString& strFormat) { |
| 2302 GetLocalTimeFormat(pThis, iStyle, szLocalStr, strFormat, TRUE); | 2302 GetLocalTimeFormat(pThis, iStyle, szLocalStr, strFormat, true); |
| 2303 } | 2303 } |
| 2304 | 2304 |
| 2305 // static | 2305 // static |
| 2306 void CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis, | 2306 void CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis, |
| 2307 int32_t iTime, | 2307 int32_t iTime, |
| 2308 const CFX_ByteStringC& szFormat, | 2308 const CFX_ByteStringC& szFormat, |
| 2309 const CFX_ByteStringC& szLocale, | 2309 const CFX_ByteStringC& szLocale, |
| 2310 FX_BOOL bGM, | 2310 bool bGM, |
| 2311 CFX_ByteString& strTime) { | 2311 CFX_ByteString& strTime) { |
| 2312 int32_t iHour = 0; | 2312 int32_t iHour = 0; |
| 2313 int32_t iMin = 0; | 2313 int32_t iMin = 0; |
| 2314 int32_t iSec = 0; | 2314 int32_t iSec = 0; |
| 2315 iHour = static_cast<int>(iTime) / 3600000; | 2315 iHour = static_cast<int>(iTime) / 3600000; |
| 2316 iMin = (static_cast<int>(iTime) - iHour * 3600000) / 60000; | 2316 iMin = (static_cast<int>(iTime) - iHour * 3600000) / 60000; |
| 2317 iSec = (static_cast<int>(iTime) - iHour * 3600000 - iMin * 60000) / 1000; | 2317 iSec = (static_cast<int>(iTime) - iHour * 3600000 - iMin * 60000) / 1000; |
| 2318 | 2318 |
| 2319 if (!bGM) { | 2319 if (!bGM) { |
| 2320 int32_t iZoneHour = 0; | 2320 int32_t iZoneHour = 0; |
| 2321 int32_t iZoneMin = 0; | 2321 int32_t iZoneMin = 0; |
| 2322 int32_t iZoneSec = 0; | 2322 int32_t iZoneSec = 0; |
| 2323 GetLocalTimeZone(iZoneHour, iZoneMin, iZoneSec); | 2323 GetLocalTimeZone(iZoneHour, iZoneMin, iZoneSec); |
| 2324 iHour += iZoneHour; | 2324 iHour += iZoneHour; |
| 2325 iMin += iZoneMin; | 2325 iMin += iZoneMin; |
| 2326 iSec += iZoneSec; | 2326 iSec += iZoneSec; |
| 2327 } | 2327 } |
| 2328 | 2328 |
| 2329 FX_BOOL iRet = FALSE; | 2329 bool iRet = false; |
| 2330 CFX_ByteString strIsoTime; | 2330 CFX_ByteString strIsoTime; |
| 2331 strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec); | 2331 strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec); |
| 2332 if (bGM) { | 2332 if (bGM) { |
| 2333 iRet = | 2333 iRet = |
| 2334 GetGMTTime(pThis, strIsoTime.AsStringC(), szFormat, szLocale, strTime); | 2334 GetGMTTime(pThis, strIsoTime.AsStringC(), szFormat, szLocale, strTime); |
| 2335 } else { | 2335 } else { |
| 2336 iRet = IsoTime2Local(pThis, strIsoTime.AsStringC(), szFormat, szLocale, | 2336 iRet = IsoTime2Local(pThis, strIsoTime.AsStringC(), szFormat, szLocale, |
| 2337 strTime); | 2337 strTime); |
| 2338 } | 2338 } |
| 2339 if (!iRet) | 2339 if (!iRet) |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2789 args.GetReturnValue()->SetNull(); | 2789 args.GetReturnValue()->SetNull(); |
| 2790 return; | 2790 return; |
| 2791 } | 2791 } |
| 2792 | 2792 |
| 2793 int32_t iIndex = (int32_t)ValueToFloat(pThis, argOne.get()); | 2793 int32_t iIndex = (int32_t)ValueToFloat(pThis, argOne.get()); |
| 2794 if (iIndex < 1) { | 2794 if (iIndex < 1) { |
| 2795 args.GetReturnValue()->SetString(""); | 2795 args.GetReturnValue()->SetString(""); |
| 2796 return; | 2796 return; |
| 2797 } | 2797 } |
| 2798 | 2798 |
| 2799 FX_BOOL bFound = FALSE; | 2799 bool bFound = false; |
| 2800 FX_BOOL bStopCounterFlags = FALSE; | 2800 bool bStopCounterFlags = false; |
| 2801 int32_t iArgIndex = 1; | 2801 int32_t iArgIndex = 1; |
| 2802 int32_t iValueIndex = 0; | 2802 int32_t iValueIndex = 0; |
| 2803 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 2803 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
| 2804 while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) { | 2804 while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) { |
| 2805 std::unique_ptr<CFXJSE_Value> argIndexValue = args.GetValue(iArgIndex); | 2805 std::unique_ptr<CFXJSE_Value> argIndexValue = args.GetValue(iArgIndex); |
| 2806 if (argIndexValue->IsArray()) { | 2806 if (argIndexValue->IsArray()) { |
| 2807 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 2807 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
| 2808 argIndexValue->GetObjectProperty("length", lengthValue.get()); | 2808 argIndexValue->GetObjectProperty("length", lengthValue.get()); |
| 2809 int32_t iLength = lengthValue->ToInteger(); | 2809 int32_t iLength = lengthValue->ToInteger(); |
| 2810 if (iLength > 3) | 2810 if (iLength > 3) |
| 2811 bStopCounterFlags = TRUE; | 2811 bStopCounterFlags = true; |
| 2812 | 2812 |
| 2813 iValueIndex += (iLength - 2); | 2813 iValueIndex += (iLength - 2); |
| 2814 if (iValueIndex >= iIndex) { | 2814 if (iValueIndex >= iIndex) { |
| 2815 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 2815 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
| 2816 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 2816 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
| 2817 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 2817 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
| 2818 new CFXJSE_Value(pIsolate)); | 2818 new CFXJSE_Value(pIsolate)); |
| 2819 argIndexValue->GetObjectPropertyByIdx(1, propertyValue.get()); | 2819 argIndexValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
| 2820 argIndexValue->GetObjectPropertyByIdx( | 2820 argIndexValue->GetObjectPropertyByIdx( |
| 2821 (iLength - 1) - (iValueIndex - iIndex), jsObjectValue.get()); | 2821 (iLength - 1) - (iValueIndex - iIndex), jsObjectValue.get()); |
| 2822 if (propertyValue->IsNull()) { | 2822 if (propertyValue->IsNull()) { |
| 2823 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 2823 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
| 2824 } else { | 2824 } else { |
| 2825 jsObjectValue->GetObjectProperty( | 2825 jsObjectValue->GetObjectProperty( |
| 2826 propertyValue->ToString().AsStringC(), newPropertyValue.get()); | 2826 propertyValue->ToString().AsStringC(), newPropertyValue.get()); |
| 2827 } | 2827 } |
| 2828 CFX_ByteString bsChoosed; | 2828 CFX_ByteString bsChoosed; |
| 2829 ValueToUTF8String(newPropertyValue.get(), bsChoosed); | 2829 ValueToUTF8String(newPropertyValue.get(), bsChoosed); |
| 2830 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); | 2830 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); |
| 2831 bFound = TRUE; | 2831 bFound = true; |
| 2832 } | 2832 } |
| 2833 } else { | 2833 } else { |
| 2834 iValueIndex++; | 2834 iValueIndex++; |
| 2835 if (iValueIndex == iIndex) { | 2835 if (iValueIndex == iIndex) { |
| 2836 CFX_ByteString bsChoosed; | 2836 CFX_ByteString bsChoosed; |
| 2837 ValueToUTF8String(argIndexValue.get(), bsChoosed); | 2837 ValueToUTF8String(argIndexValue.get(), bsChoosed); |
| 2838 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); | 2838 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); |
| 2839 bFound = TRUE; | 2839 bFound = true; |
| 2840 } | 2840 } |
| 2841 } | 2841 } |
| 2842 iArgIndex++; | 2842 iArgIndex++; |
| 2843 } | 2843 } |
| 2844 if (!bFound) | 2844 if (!bFound) |
| 2845 args.GetReturnValue()->SetString(""); | 2845 args.GetReturnValue()->SetString(""); |
| 2846 } | 2846 } |
| 2847 | 2847 |
| 2848 // static | 2848 // static |
| 2849 void CXFA_FM2JSContext::Exists(CFXJSE_Value* pThis, | 2849 void CXFA_FM2JSContext::Exists(CFXJSE_Value* pThis, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2882 // static | 2882 // static |
| 2883 void CXFA_FM2JSContext::Oneof(CFXJSE_Value* pThis, | 2883 void CXFA_FM2JSContext::Oneof(CFXJSE_Value* pThis, |
| 2884 const CFX_ByteStringC& szFuncName, | 2884 const CFX_ByteStringC& szFuncName, |
| 2885 CFXJSE_Arguments& args) { | 2885 CFXJSE_Arguments& args) { |
| 2886 if (args.GetLength() < 2) { | 2886 if (args.GetLength() < 2) { |
| 2887 ToJSContext(pThis, nullptr) | 2887 ToJSContext(pThis, nullptr) |
| 2888 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Oneof"); | 2888 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Oneof"); |
| 2889 return; | 2889 return; |
| 2890 } | 2890 } |
| 2891 | 2891 |
| 2892 FX_BOOL bFlags = FALSE; | 2892 bool bFlags = false; |
| 2893 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2893 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
| 2894 CFXJSE_Value** parametersValue = nullptr; | 2894 CFXJSE_Value** parametersValue = nullptr; |
| 2895 int32_t iCount = 0; | 2895 int32_t iCount = 0; |
| 2896 unfoldArgs(pThis, args, parametersValue, iCount, 1); | 2896 unfoldArgs(pThis, args, parametersValue, iCount, 1); |
| 2897 for (int32_t i = 0; i < iCount; i++) { | 2897 for (int32_t i = 0; i < iCount; i++) { |
| 2898 if (simpleValueCompare(pThis, argOne.get(), parametersValue[i])) { | 2898 if (simpleValueCompare(pThis, argOne.get(), parametersValue[i])) { |
| 2899 bFlags = TRUE; | 2899 bFlags = true; |
| 2900 break; | 2900 break; |
| 2901 } | 2901 } |
| 2902 } | 2902 } |
| 2903 for (int32_t i = 0; i < iCount; i++) | 2903 for (int32_t i = 0; i < iCount; i++) |
| 2904 delete parametersValue[i]; | 2904 delete parametersValue[i]; |
| 2905 FX_Free(parametersValue); | 2905 FX_Free(parametersValue); |
| 2906 | 2906 |
| 2907 args.GetReturnValue()->SetInteger(bFlags); | 2907 args.GetReturnValue()->SetInteger(bFlags); |
| 2908 } | 2908 } |
| 2909 | 2909 |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3353 const CFX_ByteStringC& szFuncName, | 3353 const CFX_ByteStringC& szFuncName, |
| 3354 CFXJSE_Arguments& args) { | 3354 CFXJSE_Arguments& args) { |
| 3355 int32_t argc = args.GetLength(); | 3355 int32_t argc = args.GetLength(); |
| 3356 if (argc < 1) { | 3356 if (argc < 1) { |
| 3357 ToJSContext(pThis, nullptr) | 3357 ToJSContext(pThis, nullptr) |
| 3358 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Concat"); | 3358 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Concat"); |
| 3359 return; | 3359 return; |
| 3360 } | 3360 } |
| 3361 | 3361 |
| 3362 CFX_ByteString resultString; | 3362 CFX_ByteString resultString; |
| 3363 FX_BOOL bAllNull = TRUE; | 3363 bool bAllNull = true; |
| 3364 for (int32_t i = 0; i < argc; i++) { | 3364 for (int32_t i = 0; i < argc; i++) { |
| 3365 std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, args, i); | 3365 std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, args, i); |
| 3366 if (ValueIsNull(pThis, value.get())) | 3366 if (ValueIsNull(pThis, value.get())) |
| 3367 continue; | 3367 continue; |
| 3368 | 3368 |
| 3369 bAllNull = FALSE; | 3369 bAllNull = false; |
| 3370 | 3370 |
| 3371 CFX_ByteString valueStr; | 3371 CFX_ByteString valueStr; |
| 3372 ValueToUTF8String(value.get(), valueStr); | 3372 ValueToUTF8String(value.get(), valueStr); |
| 3373 resultString += valueStr; | 3373 resultString += valueStr; |
| 3374 } | 3374 } |
| 3375 | 3375 |
| 3376 if (bAllNull) { | 3376 if (bAllNull) { |
| 3377 args.GetReturnValue()->SetNull(); | 3377 args.GetReturnValue()->SetNull(); |
| 3378 return; | 3378 return; |
| 3379 } | 3379 } |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3926 } | 3926 } |
| 3927 } | 3927 } |
| 3928 wsResultBuf.AppendChar(0); | 3928 wsResultBuf.AppendChar(0); |
| 3929 szResultBuf.Clear(); | 3929 szResultBuf.Clear(); |
| 3930 | 3930 |
| 3931 szResultBuf << FX_UTF8Encode(wsResultBuf.GetBuffer(), wsResultBuf.GetLength()) | 3931 szResultBuf << FX_UTF8Encode(wsResultBuf.GetBuffer(), wsResultBuf.GetLength()) |
| 3932 .AsStringC(); | 3932 .AsStringC(); |
| 3933 } | 3933 } |
| 3934 | 3934 |
| 3935 // static | 3935 // static |
| 3936 FX_BOOL CXFA_FM2JSContext::HTMLSTR2Code(const CFX_WideStringC& pData, | 3936 bool CXFA_FM2JSContext::HTMLSTR2Code(const CFX_WideStringC& pData, |
| 3937 uint32_t& iCode) { | 3937 uint32_t& iCode) { |
| 3938 uint32_t uHash = FX_HashCode_GetW(pData, false); | 3938 uint32_t uHash = FX_HashCode_GetW(pData, false); |
| 3939 int32_t iStart = 0; | 3939 int32_t iStart = 0; |
| 3940 int32_t iEnd = FX_ArraySize(reservesForDecode) - 1; | 3940 int32_t iEnd = FX_ArraySize(reservesForDecode) - 1; |
| 3941 do { | 3941 do { |
| 3942 int32_t iMid = (iStart + iEnd) / 2; | 3942 int32_t iMid = (iStart + iEnd) / 2; |
| 3943 XFA_FMHtmlHashedReserveCode htmlhashedreservecode = reservesForDecode[iMid]; | 3943 XFA_FMHtmlHashedReserveCode htmlhashedreservecode = reservesForDecode[iMid]; |
| 3944 if (uHash == htmlhashedreservecode.m_uHash) { | 3944 if (uHash == htmlhashedreservecode.m_uHash) { |
| 3945 iCode = htmlhashedreservecode.m_uCode; | 3945 iCode = htmlhashedreservecode.m_uCode; |
| 3946 return TRUE; | 3946 return true; |
| 3947 } | 3947 } |
| 3948 | 3948 |
| 3949 if (uHash < htmlhashedreservecode.m_uHash) | 3949 if (uHash < htmlhashedreservecode.m_uHash) |
| 3950 iEnd = iMid - 1; | 3950 iEnd = iMid - 1; |
| 3951 else | 3951 else |
| 3952 iStart = iMid + 1; | 3952 iStart = iMid + 1; |
| 3953 } while (iStart <= iEnd); | 3953 } while (iStart <= iEnd); |
| 3954 return FALSE; | 3954 return false; |
| 3955 } | 3955 } |
| 3956 | 3956 |
| 3957 // static | 3957 // static |
| 3958 FX_BOOL CXFA_FM2JSContext::HTMLCode2STR(uint32_t iCode, | 3958 bool CXFA_FM2JSContext::HTMLCode2STR(uint32_t iCode, |
| 3959 CFX_WideString& wsHTMLReserve) { | 3959 CFX_WideString& wsHTMLReserve) { |
| 3960 int32_t iStart = 0; | 3960 int32_t iStart = 0; |
| 3961 int32_t iEnd = FX_ArraySize(reservesForEncode) - 1; | 3961 int32_t iEnd = FX_ArraySize(reservesForEncode) - 1; |
| 3962 do { | 3962 do { |
| 3963 int32_t iMid = (iStart + iEnd) / 2; | 3963 int32_t iMid = (iStart + iEnd) / 2; |
| 3964 XFA_FMHtmlReserveCode htmlreservecode = reservesForEncode[iMid]; | 3964 XFA_FMHtmlReserveCode htmlreservecode = reservesForEncode[iMid]; |
| 3965 if (iCode == htmlreservecode.m_uCode) { | 3965 if (iCode == htmlreservecode.m_uCode) { |
| 3966 wsHTMLReserve = htmlreservecode.m_htmlReserve; | 3966 wsHTMLReserve = htmlreservecode.m_htmlReserve; |
| 3967 return TRUE; | 3967 return true; |
| 3968 } | 3968 } |
| 3969 | 3969 |
| 3970 if (iCode < htmlreservecode.m_uCode) | 3970 if (iCode < htmlreservecode.m_uCode) |
| 3971 iEnd = iMid - 1; | 3971 iEnd = iMid - 1; |
| 3972 else | 3972 else |
| 3973 iStart = iMid + 1; | 3973 iStart = iMid + 1; |
| 3974 } while (iStart <= iEnd); | 3974 } while (iStart <= iEnd); |
| 3975 return FALSE; | 3975 return false; |
| 3976 } | 3976 } |
| 3977 | 3977 |
| 3978 // static | 3978 // static |
| 3979 void CXFA_FM2JSContext::Format(CFXJSE_Value* pThis, | 3979 void CXFA_FM2JSContext::Format(CFXJSE_Value* pThis, |
| 3980 const CFX_ByteStringC& szFuncName, | 3980 const CFX_ByteStringC& szFuncName, |
| 3981 CFXJSE_Arguments& args) { | 3981 CFXJSE_Arguments& args) { |
| 3982 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 3982 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
| 3983 if (args.GetLength() < 2) { | 3983 if (args.GetLength() < 2) { |
| 3984 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Format"); | 3984 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Format"); |
| 3985 return; | 3985 return; |
| (...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5183 argSecond->ToString()); | 5183 argSecond->ToString()); |
| 5184 return; | 5184 return; |
| 5185 } | 5185 } |
| 5186 | 5186 |
| 5187 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5187 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
| 5188 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5188 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
| 5189 args.GetReturnValue()->SetInteger(first != second); | 5189 args.GetReturnValue()->SetInteger(first != second); |
| 5190 } | 5190 } |
| 5191 | 5191 |
| 5192 // static | 5192 // static |
| 5193 FX_BOOL CXFA_FM2JSContext::fm_ref_equal(CFXJSE_Value* pThis, | 5193 bool CXFA_FM2JSContext::fm_ref_equal(CFXJSE_Value* pThis, |
| 5194 CFXJSE_Arguments& args) { | 5194 CFXJSE_Arguments& args) { |
| 5195 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); | 5195 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); |
| 5196 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); | 5196 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); |
| 5197 if (!argFirst->IsArray() || !argSecond->IsArray()) | 5197 if (!argFirst->IsArray() || !argSecond->IsArray()) |
| 5198 return FALSE; | 5198 return false; |
| 5199 | 5199 |
| 5200 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 5200 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
| 5201 std::unique_ptr<CFXJSE_Value> firstFlagValue(new CFXJSE_Value(pIsolate)); | 5201 std::unique_ptr<CFXJSE_Value> firstFlagValue(new CFXJSE_Value(pIsolate)); |
| 5202 std::unique_ptr<CFXJSE_Value> secondFlagValue(new CFXJSE_Value(pIsolate)); | 5202 std::unique_ptr<CFXJSE_Value> secondFlagValue(new CFXJSE_Value(pIsolate)); |
| 5203 argFirst->GetObjectPropertyByIdx(0, firstFlagValue.get()); | 5203 argFirst->GetObjectPropertyByIdx(0, firstFlagValue.get()); |
| 5204 argSecond->GetObjectPropertyByIdx(0, secondFlagValue.get()); | 5204 argSecond->GetObjectPropertyByIdx(0, secondFlagValue.get()); |
| 5205 if (firstFlagValue->ToInteger() != 3 || secondFlagValue->ToInteger() != 3) | 5205 if (firstFlagValue->ToInteger() != 3 || secondFlagValue->ToInteger() != 3) |
| 5206 return FALSE; | 5206 return false; |
| 5207 | 5207 |
| 5208 std::unique_ptr<CFXJSE_Value> firstJSObject(new CFXJSE_Value(pIsolate)); | 5208 std::unique_ptr<CFXJSE_Value> firstJSObject(new CFXJSE_Value(pIsolate)); |
| 5209 std::unique_ptr<CFXJSE_Value> secondJSObject(new CFXJSE_Value(pIsolate)); | 5209 std::unique_ptr<CFXJSE_Value> secondJSObject(new CFXJSE_Value(pIsolate)); |
| 5210 argFirst->GetObjectPropertyByIdx(2, firstJSObject.get()); | 5210 argFirst->GetObjectPropertyByIdx(2, firstJSObject.get()); |
| 5211 argSecond->GetObjectPropertyByIdx(2, secondJSObject.get()); | 5211 argSecond->GetObjectPropertyByIdx(2, secondJSObject.get()); |
| 5212 if (firstJSObject->IsNull() || secondJSObject->IsNull()) | 5212 if (firstJSObject->IsNull() || secondJSObject->IsNull()) |
| 5213 return FALSE; | 5213 return false; |
| 5214 | 5214 |
| 5215 return (firstJSObject->ToHostObject(nullptr) == | 5215 return (firstJSObject->ToHostObject(nullptr) == |
| 5216 secondJSObject->ToHostObject(nullptr)); | 5216 secondJSObject->ToHostObject(nullptr)); |
| 5217 } | 5217 } |
| 5218 | 5218 |
| 5219 // static | 5219 // static |
| 5220 void CXFA_FM2JSContext::less_operator(CFXJSE_Value* pThis, | 5220 void CXFA_FM2JSContext::less_operator(CFXJSE_Value* pThis, |
| 5221 const CFX_ByteStringC& szFuncName, | 5221 const CFX_ByteStringC& szFuncName, |
| 5222 CFXJSE_Arguments& args) { | 5222 CFXJSE_Arguments& args) { |
| 5223 if (args.GetLength() != 2) { | 5223 if (args.GetLength() != 2) { |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5498 if (argAccessor->IsArray()) { | 5498 if (argAccessor->IsArray()) { |
| 5499 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); | 5499 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
| 5500 argAccessor->GetObjectProperty("length", pLengthValue.get()); | 5500 argAccessor->GetObjectProperty("length", pLengthValue.get()); |
| 5501 int32_t iLength = pLengthValue->ToInteger(); | 5501 int32_t iLength = pLengthValue->ToInteger(); |
| 5502 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); | 5502 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
| 5503 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); | 5503 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
| 5504 for (int32_t i = 0; i < (iLength - 2); i++) | 5504 for (int32_t i = 0; i < (iLength - 2); i++) |
| 5505 iSizes[i] = 0; | 5505 iSizes[i] = 0; |
| 5506 | 5506 |
| 5507 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); | 5507 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
| 5508 FX_BOOL bAttribute = FALSE; | 5508 bool bAttribute = false; |
| 5509 int32_t iCounter = 0; | 5509 int32_t iCounter = 0; |
| 5510 for (int32_t i = 2; i < iLength; i++) { | 5510 for (int32_t i = 2; i < iLength; i++) { |
| 5511 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); | 5511 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
| 5512 | 5512 |
| 5513 XFA_RESOLVENODE_RS resoveNodeRS; | 5513 XFA_RESOLVENODE_RS resoveNodeRS; |
| 5514 if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), | 5514 if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
| 5515 resoveNodeRS, TRUE, szName.IsEmpty()) > 0) { | 5515 resoveNodeRS, true, szName.IsEmpty()) > 0) { |
| 5516 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), | 5516 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
| 5517 hResolveValues[i - 2], iSizes[i - 2], bAttribute); | 5517 hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
| 5518 iCounter += iSizes[i - 2]; | 5518 iCounter += iSizes[i - 2]; |
| 5519 } | 5519 } |
| 5520 } | 5520 } |
| 5521 if (iCounter < 1) { | 5521 if (iCounter < 1) { |
| 5522 CFX_WideString wsPropertyName = | 5522 CFX_WideString wsPropertyName = |
| 5523 CFX_WideString::FromUTF8(szName.AsStringC()); | 5523 CFX_WideString::FromUTF8(szName.AsStringC()); |
| 5524 CFX_WideString wsSomExpression = | 5524 CFX_WideString wsSomExpression = |
| 5525 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5525 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5563 | 5563 |
| 5564 return; | 5564 return; |
| 5565 } | 5565 } |
| 5566 | 5566 |
| 5567 XFA_RESOLVENODE_RS resoveNodeRS; | 5567 XFA_RESOLVENODE_RS resoveNodeRS; |
| 5568 int32_t iRet = 0; | 5568 int32_t iRet = 0; |
| 5569 CFX_ByteString bsAccessorName = args.GetUTF8String(1); | 5569 CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
| 5570 if (argAccessor->IsObject() || | 5570 if (argAccessor->IsObject() || |
| 5571 (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { | 5571 (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
| 5572 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), | 5572 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
| 5573 resoveNodeRS, TRUE, szName.IsEmpty()); | 5573 resoveNodeRS, true, szName.IsEmpty()); |
| 5574 } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && | 5574 } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && |
| 5575 GetObjectForName(pThis, argAccessor.get(), | 5575 GetObjectForName(pThis, argAccessor.get(), |
| 5576 bsAccessorName.AsStringC())) { | 5576 bsAccessorName.AsStringC())) { |
| 5577 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), | 5577 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
| 5578 resoveNodeRS, TRUE, szName.IsEmpty()); | 5578 resoveNodeRS, true, szName.IsEmpty()); |
| 5579 } | 5579 } |
| 5580 if (iRet < 1) { | 5580 if (iRet < 1) { |
| 5581 CFX_WideString wsPropertyName = | 5581 CFX_WideString wsPropertyName = |
| 5582 CFX_WideString::FromUTF8(szName.AsStringC()); | 5582 CFX_WideString::FromUTF8(szName.AsStringC()); |
| 5583 CFX_WideString wsSomExpression = | 5583 CFX_WideString wsSomExpression = |
| 5584 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5584 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
| 5585 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, | 5585 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
| 5586 wsPropertyName.c_str(), wsSomExpression.c_str()); | 5586 wsPropertyName.c_str(), wsSomExpression.c_str()); |
| 5587 return; | 5587 return; |
| 5588 } | 5588 } |
| 5589 | 5589 |
| 5590 CFXJSE_Value** hResolveValues; | 5590 CFXJSE_Value** hResolveValues; |
| 5591 int32_t iSize = 0; | 5591 int32_t iSize = 0; |
| 5592 FX_BOOL bAttribute = FALSE; | 5592 bool bAttribute = false; |
| 5593 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, | 5593 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, |
| 5594 iSize, bAttribute); | 5594 iSize, bAttribute); |
| 5595 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); | 5595 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
| 5596 for (int32_t i = 0; i < (iSize + 2); i++) | 5596 for (int32_t i = 0; i < (iSize + 2); i++) |
| 5597 rgValues[i] = new CFXJSE_Value(pIsolate); | 5597 rgValues[i] = new CFXJSE_Value(pIsolate); |
| 5598 | 5598 |
| 5599 rgValues[0]->SetInteger(1); | 5599 rgValues[0]->SetInteger(1); |
| 5600 if (bAttribute) | 5600 if (bAttribute) |
| 5601 rgValues[1]->SetString(szName.AsStringC()); | 5601 rgValues[1]->SetString(szName.AsStringC()); |
| 5602 else | 5602 else |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5642 std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); | 5642 std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); |
| 5643 if (argAccessor->IsArray()) { | 5643 if (argAccessor->IsArray()) { |
| 5644 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); | 5644 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
| 5645 argAccessor->GetObjectProperty("length", pLengthValue.get()); | 5645 argAccessor->GetObjectProperty("length", pLengthValue.get()); |
| 5646 int32_t iLength = pLengthValue->ToInteger(); | 5646 int32_t iLength = pLengthValue->ToInteger(); |
| 5647 int32_t iCounter = 0; | 5647 int32_t iCounter = 0; |
| 5648 | 5648 |
| 5649 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); | 5649 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
| 5650 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); | 5650 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
| 5651 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); | 5651 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
| 5652 FX_BOOL bAttribute = FALSE; | 5652 bool bAttribute = false; |
| 5653 for (int32_t i = 2; i < iLength; i++) { | 5653 for (int32_t i = 2; i < iLength; i++) { |
| 5654 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); | 5654 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
| 5655 XFA_RESOLVENODE_RS resoveNodeRS; | 5655 XFA_RESOLVENODE_RS resoveNodeRS; |
| 5656 if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), | 5656 if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
| 5657 resoveNodeRS, FALSE) > 0) { | 5657 resoveNodeRS, false) > 0) { |
| 5658 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), | 5658 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
| 5659 hResolveValues[i - 2], iSizes[i - 2], bAttribute); | 5659 hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
| 5660 iCounter += iSizes[i - 2]; | 5660 iCounter += iSizes[i - 2]; |
| 5661 } | 5661 } |
| 5662 } | 5662 } |
| 5663 if (iCounter < 1) { | 5663 if (iCounter < 1) { |
| 5664 CFX_WideString wsPropertyName = | 5664 CFX_WideString wsPropertyName = |
| 5665 CFX_WideString::FromUTF8(szName.AsStringC()); | 5665 CFX_WideString::FromUTF8(szName.AsStringC()); |
| 5666 CFX_WideString wsSomExpression = | 5666 CFX_WideString wsSomExpression = |
| 5667 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5667 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5701 FX_Free(iSizes); | 5701 FX_Free(iSizes); |
| 5702 return; | 5702 return; |
| 5703 } | 5703 } |
| 5704 | 5704 |
| 5705 XFA_RESOLVENODE_RS resoveNodeRS; | 5705 XFA_RESOLVENODE_RS resoveNodeRS; |
| 5706 int32_t iRet = 0; | 5706 int32_t iRet = 0; |
| 5707 CFX_ByteString bsAccessorName = args.GetUTF8String(1); | 5707 CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
| 5708 if (argAccessor->IsObject() || | 5708 if (argAccessor->IsObject() || |
| 5709 (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { | 5709 (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
| 5710 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), | 5710 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
| 5711 resoveNodeRS, FALSE); | 5711 resoveNodeRS, false); |
| 5712 } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && | 5712 } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && |
| 5713 GetObjectForName(pThis, argAccessor.get(), | 5713 GetObjectForName(pThis, argAccessor.get(), |
| 5714 bsAccessorName.AsStringC())) { | 5714 bsAccessorName.AsStringC())) { |
| 5715 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), | 5715 iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
| 5716 resoveNodeRS, FALSE); | 5716 resoveNodeRS, false); |
| 5717 } | 5717 } |
| 5718 if (iRet < 1) { | 5718 if (iRet < 1) { |
| 5719 CFX_WideString wsPropertyName = | 5719 CFX_WideString wsPropertyName = |
| 5720 CFX_WideString::FromUTF8(szName.AsStringC()); | 5720 CFX_WideString::FromUTF8(szName.AsStringC()); |
| 5721 CFX_WideString wsSomExpression = | 5721 CFX_WideString wsSomExpression = |
| 5722 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5722 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
| 5723 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, | 5723 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
| 5724 wsPropertyName.c_str(), wsSomExpression.c_str()); | 5724 wsPropertyName.c_str(), wsSomExpression.c_str()); |
| 5725 return; | 5725 return; |
| 5726 } | 5726 } |
| 5727 | 5727 |
| 5728 CFXJSE_Value** hResolveValues; | 5728 CFXJSE_Value** hResolveValues; |
| 5729 int32_t iSize = 0; | 5729 int32_t iSize = 0; |
| 5730 FX_BOOL bAttribute = FALSE; | 5730 bool bAttribute = false; |
| 5731 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, | 5731 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, |
| 5732 iSize, bAttribute); | 5732 iSize, bAttribute); |
| 5733 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); | 5733 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
| 5734 for (int32_t i = 0; i < (iSize + 2); i++) | 5734 for (int32_t i = 0; i < (iSize + 2); i++) |
| 5735 rgValues[i] = new CFXJSE_Value(pIsolate); | 5735 rgValues[i] = new CFXJSE_Value(pIsolate); |
| 5736 | 5736 |
| 5737 rgValues[0]->SetInteger(1); | 5737 rgValues[0]->SetInteger(1); |
| 5738 if (bAttribute) | 5738 if (bAttribute) |
| 5739 rgValues[1]->SetString(szName.AsStringC()); | 5739 rgValues[1]->SetString(szName.AsStringC()); |
| 5740 else | 5740 else |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5785 CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); | 5785 CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); |
| 5786 args.GetReturnValue()->SetString( | 5786 args.GetReturnValue()->SetString( |
| 5787 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()).AsStringC()); | 5787 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()).AsStringC()); |
| 5788 } | 5788 } |
| 5789 | 5789 |
| 5790 // static | 5790 // static |
| 5791 void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis, | 5791 void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis, |
| 5792 const CFX_ByteStringC& szFuncName, | 5792 const CFX_ByteStringC& szFuncName, |
| 5793 CFXJSE_Arguments& args) { | 5793 CFXJSE_Arguments& args) { |
| 5794 if (args.GetLength() != 1) { | 5794 if (args.GetLength() != 1) { |
| 5795 args.GetReturnValue()->SetBoolean(FALSE); | 5795 args.GetReturnValue()->SetBoolean(false); |
| 5796 return; | 5796 return; |
| 5797 } | 5797 } |
| 5798 | 5798 |
| 5799 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5799 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
| 5800 args.GetReturnValue()->SetBoolean(argOne->IsObject()); | 5800 args.GetReturnValue()->SetBoolean(argOne->IsObject()); |
| 5801 } | 5801 } |
| 5802 | 5802 |
| 5803 // static | 5803 // static |
| 5804 void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis, | 5804 void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis, |
| 5805 const CFX_ByteStringC& szFuncName, | 5805 const CFX_ByteStringC& szFuncName, |
| 5806 CFXJSE_Arguments& args) { | 5806 CFXJSE_Arguments& args) { |
| 5807 if (args.GetLength() != 1) { | 5807 if (args.GetLength() != 1) { |
| 5808 args.GetReturnValue()->SetBoolean(FALSE); | 5808 args.GetReturnValue()->SetBoolean(false); |
| 5809 return; | 5809 return; |
| 5810 } | 5810 } |
| 5811 | 5811 |
| 5812 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5812 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
| 5813 args.GetReturnValue()->SetBoolean(argOne->IsArray()); | 5813 args.GetReturnValue()->SetBoolean(argOne->IsArray()); |
| 5814 } | 5814 } |
| 5815 | 5815 |
| 5816 // static | 5816 // static |
| 5817 void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis, | 5817 void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis, |
| 5818 const CFX_ByteStringC& szFuncName, | 5818 const CFX_ByteStringC& szFuncName, |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6010 simpleValue.get()); | 6010 simpleValue.get()); |
| 6011 return simpleValue; | 6011 return simpleValue; |
| 6012 } | 6012 } |
| 6013 | 6013 |
| 6014 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); | 6014 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
| 6015 GetObjectDefaultValue(argIndex.get(), defaultValue.get()); | 6015 GetObjectDefaultValue(argIndex.get(), defaultValue.get()); |
| 6016 return defaultValue; | 6016 return defaultValue; |
| 6017 } | 6017 } |
| 6018 | 6018 |
| 6019 // static | 6019 // static |
| 6020 FX_BOOL CXFA_FM2JSContext::ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* arg) { | 6020 bool CXFA_FM2JSContext::ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* arg) { |
| 6021 if (!arg || arg->IsNull()) | 6021 if (!arg || arg->IsNull()) |
| 6022 return TRUE; | 6022 return true; |
| 6023 | 6023 |
| 6024 if (!arg->IsArray() && !arg->IsObject()) | 6024 if (!arg->IsArray() && !arg->IsObject()) |
| 6025 return FALSE; | 6025 return false; |
| 6026 | 6026 |
| 6027 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6027 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
| 6028 if (arg->IsArray()) { | 6028 if (arg->IsArray()) { |
| 6029 int32_t iLength = hvalue_get_array_length(pThis, arg); | 6029 int32_t iLength = hvalue_get_array_length(pThis, arg); |
| 6030 if (iLength < 3) | 6030 if (iLength < 3) |
| 6031 return TRUE; | 6031 return true; |
| 6032 | 6032 |
| 6033 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6033 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
| 6034 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6034 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
| 6035 arg->GetObjectPropertyByIdx(1, propertyValue.get()); | 6035 arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
| 6036 arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); | 6036 arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
| 6037 if (propertyValue->IsNull()) { | 6037 if (propertyValue->IsNull()) { |
| 6038 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); | 6038 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
| 6039 GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); | 6039 GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); |
| 6040 return defaultValue->IsNull(); | 6040 return defaultValue->IsNull(); |
| 6041 } | 6041 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 6057 if (!arg || !arg->IsArray()) | 6057 if (!arg || !arg->IsArray()) |
| 6058 return 0; | 6058 return 0; |
| 6059 | 6059 |
| 6060 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6060 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
| 6061 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6061 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
| 6062 arg->GetObjectProperty("length", lengthValue.get()); | 6062 arg->GetObjectProperty("length", lengthValue.get()); |
| 6063 return lengthValue->ToInteger(); | 6063 return lengthValue->ToInteger(); |
| 6064 } | 6064 } |
| 6065 | 6065 |
| 6066 // static | 6066 // static |
| 6067 FX_BOOL CXFA_FM2JSContext::simpleValueCompare(CFXJSE_Value* pThis, | 6067 bool CXFA_FM2JSContext::simpleValueCompare(CFXJSE_Value* pThis, |
| 6068 CFXJSE_Value* firstValue, | 6068 CFXJSE_Value* firstValue, |
| 6069 CFXJSE_Value* secondValue) { | 6069 CFXJSE_Value* secondValue) { |
| 6070 if (!firstValue) | 6070 if (!firstValue) |
| 6071 return FALSE; | 6071 return false; |
| 6072 | 6072 |
| 6073 if (firstValue->IsString()) { | 6073 if (firstValue->IsString()) { |
| 6074 CFX_ByteString firstString, secondString; | 6074 CFX_ByteString firstString, secondString; |
| 6075 ValueToUTF8String(firstValue, firstString); | 6075 ValueToUTF8String(firstValue, firstString); |
| 6076 ValueToUTF8String(secondValue, secondString); | 6076 ValueToUTF8String(secondValue, secondString); |
| 6077 return firstString == secondString; | 6077 return firstString == secondString; |
| 6078 } | 6078 } |
| 6079 if (firstValue->IsNumber()) { | 6079 if (firstValue->IsNumber()) { |
| 6080 FX_FLOAT first = ValueToFloat(pThis, firstValue); | 6080 FX_FLOAT first = ValueToFloat(pThis, firstValue); |
| 6081 FX_FLOAT second = ValueToFloat(pThis, secondValue); | 6081 FX_FLOAT second = ValueToFloat(pThis, secondValue); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6150 } | 6150 } |
| 6151 | 6151 |
| 6152 // static | 6152 // static |
| 6153 void CXFA_FM2JSContext::GetObjectDefaultValue(CFXJSE_Value* pValue, | 6153 void CXFA_FM2JSContext::GetObjectDefaultValue(CFXJSE_Value* pValue, |
| 6154 CFXJSE_Value* pDefaultValue) { | 6154 CFXJSE_Value* pDefaultValue) { |
| 6155 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); | 6155 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); |
| 6156 if (!pNode) { | 6156 if (!pNode) { |
| 6157 pDefaultValue->SetNull(); | 6157 pDefaultValue->SetNull(); |
| 6158 return; | 6158 return; |
| 6159 } | 6159 } |
| 6160 pNode->Script_Som_DefaultValue(pDefaultValue, FALSE, (XFA_ATTRIBUTE)-1); | 6160 pNode->Script_Som_DefaultValue(pDefaultValue, false, (XFA_ATTRIBUTE)-1); |
| 6161 } | 6161 } |
| 6162 | 6162 |
| 6163 // static | 6163 // static |
| 6164 FX_BOOL CXFA_FM2JSContext::SetObjectDefaultValue(CFXJSE_Value* pValue, | 6164 bool CXFA_FM2JSContext::SetObjectDefaultValue(CFXJSE_Value* pValue, |
| 6165 CFXJSE_Value* hNewValue) { | 6165 CFXJSE_Value* hNewValue) { |
| 6166 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); | 6166 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); |
| 6167 if (!pNode) | 6167 if (!pNode) |
| 6168 return FALSE; | 6168 return false; |
| 6169 | 6169 |
| 6170 pNode->Script_Som_DefaultValue(hNewValue, TRUE, (XFA_ATTRIBUTE)-1); | 6170 pNode->Script_Som_DefaultValue(hNewValue, true, (XFA_ATTRIBUTE)-1); |
| 6171 return TRUE; | 6171 return true; |
| 6172 } | 6172 } |
| 6173 | 6173 |
| 6174 // static | 6174 // static |
| 6175 void CXFA_FM2JSContext::GenerateSomExpression(const CFX_ByteStringC& szName, | 6175 void CXFA_FM2JSContext::GenerateSomExpression(const CFX_ByteStringC& szName, |
| 6176 int32_t iIndexFlags, | 6176 int32_t iIndexFlags, |
| 6177 int32_t iIndexValue, | 6177 int32_t iIndexValue, |
| 6178 bool bIsStar, | 6178 bool bIsStar, |
| 6179 CFX_ByteString& szSomExp) { | 6179 CFX_ByteString& szSomExp) { |
| 6180 if (bIsStar) { | 6180 if (bIsStar) { |
| 6181 szSomExp = szName + "[*]"; | 6181 szSomExp = szName + "[*]"; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 6196 szSomExp += "]"; | 6196 szSomExp += "]"; |
| 6197 } else { | 6197 } else { |
| 6198 szSomExp = (iIndexValue < 0) ? (szName + "[") : (szName + "[-"); | 6198 szSomExp = (iIndexValue < 0) ? (szName + "[") : (szName + "[-"); |
| 6199 iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue; | 6199 iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue; |
| 6200 szSomExp += CFX_ByteString::FormatInteger(iIndexValue); | 6200 szSomExp += CFX_ByteString::FormatInteger(iIndexValue); |
| 6201 szSomExp += "]"; | 6201 szSomExp += "]"; |
| 6202 } | 6202 } |
| 6203 } | 6203 } |
| 6204 | 6204 |
| 6205 // static | 6205 // static |
| 6206 FX_BOOL CXFA_FM2JSContext::GetObjectForName( | 6206 bool CXFA_FM2JSContext::GetObjectForName( |
| 6207 CFXJSE_Value* pThis, | 6207 CFXJSE_Value* pThis, |
| 6208 CFXJSE_Value* accessorValue, | 6208 CFXJSE_Value* accessorValue, |
| 6209 const CFX_ByteStringC& szAccessorName) { | 6209 const CFX_ByteStringC& szAccessorName) { |
| 6210 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 6210 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 6211 if (!pDoc) | 6211 if (!pDoc) |
| 6212 return FALSE; | 6212 return false; |
| 6213 | 6213 |
| 6214 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); | 6214 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); |
| 6215 XFA_RESOLVENODE_RS resoveNodeRS; | 6215 XFA_RESOLVENODE_RS resoveNodeRS; |
| 6216 uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 6216 uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
| 6217 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; | 6217 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; |
| 6218 int32_t iRet = pScriptContext->ResolveObjects( | 6218 int32_t iRet = pScriptContext->ResolveObjects( |
| 6219 pScriptContext->GetThisObject(), | 6219 pScriptContext->GetThisObject(), |
| 6220 CFX_WideString::FromUTF8(szAccessorName).AsStringC(), resoveNodeRS, | 6220 CFX_WideString::FromUTF8(szAccessorName).AsStringC(), resoveNodeRS, |
| 6221 dwFlags); | 6221 dwFlags); |
| 6222 if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { | 6222 if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
| 6223 accessorValue->Assign( | 6223 accessorValue->Assign( |
| 6224 pScriptContext->GetJSValueFromMap(resoveNodeRS.nodes.GetAt(0))); | 6224 pScriptContext->GetJSValueFromMap(resoveNodeRS.nodes.GetAt(0))); |
| 6225 return TRUE; | 6225 return true; |
| 6226 } | 6226 } |
| 6227 return FALSE; | 6227 return false; |
| 6228 } | 6228 } |
| 6229 | 6229 |
| 6230 // static | 6230 // static |
| 6231 int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, | 6231 int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, |
| 6232 CFXJSE_Value* pRefValue, | 6232 CFXJSE_Value* pRefValue, |
| 6233 const CFX_ByteStringC& bsSomExp, | 6233 const CFX_ByteStringC& bsSomExp, |
| 6234 XFA_RESOLVENODE_RS& resoveNodeRS, | 6234 XFA_RESOLVENODE_RS& resoveNodeRS, |
| 6235 FX_BOOL bdotAccessor, | 6235 bool bdotAccessor, |
| 6236 FX_BOOL bHasNoResolveName) { | 6236 bool bHasNoResolveName) { |
| 6237 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 6237 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
| 6238 if (!pDoc) | 6238 if (!pDoc) |
| 6239 return -1; | 6239 return -1; |
| 6240 | 6240 |
| 6241 CFX_WideString wsSomExpression = CFX_WideString::FromUTF8(bsSomExp); | 6241 CFX_WideString wsSomExpression = CFX_WideString::FromUTF8(bsSomExp); |
| 6242 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); | 6242 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); |
| 6243 CXFA_Object* pNode = nullptr; | 6243 CXFA_Object* pNode = nullptr; |
| 6244 uint32_t dFlags = 0UL; | 6244 uint32_t dFlags = 0UL; |
| 6245 if (bdotAccessor) { | 6245 if (bdotAccessor) { |
| 6246 if (pRefValue && pRefValue->IsNull()) { | 6246 if (pRefValue && pRefValue->IsNull()) { |
| 6247 pNode = pScriptContext->GetThisObject(); | 6247 pNode = pScriptContext->GetThisObject(); |
| 6248 dFlags = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; | 6248 dFlags = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; |
| 6249 } else { | 6249 } else { |
| 6250 pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr); | 6250 pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr); |
| 6251 ASSERT(pNode); | 6251 ASSERT(pNode); |
| 6252 if (bHasNoResolveName) { | 6252 if (bHasNoResolveName) { |
| 6253 CFX_WideString wsName; | 6253 CFX_WideString wsName; |
| 6254 if (CXFA_Node* pXFANode = pNode->AsNode()) | 6254 if (CXFA_Node* pXFANode = pNode->AsNode()) |
| 6255 pXFANode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); | 6255 pXFANode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, false); |
| 6256 if (wsName.IsEmpty()) | 6256 if (wsName.IsEmpty()) |
| 6257 wsName = FX_WSTRC(L"#") + pNode->GetClassName(); | 6257 wsName = FX_WSTRC(L"#") + pNode->GetClassName(); |
| 6258 | 6258 |
| 6259 wsSomExpression = wsName + wsSomExpression; | 6259 wsSomExpression = wsName + wsSomExpression; |
| 6260 dFlags = XFA_RESOLVENODE_Siblings; | 6260 dFlags = XFA_RESOLVENODE_Siblings; |
| 6261 } else { | 6261 } else { |
| 6262 dFlags = (bsSomExp == "*") | 6262 dFlags = (bsSomExp == "*") |
| 6263 ? (XFA_RESOLVENODE_Children) | 6263 ? (XFA_RESOLVENODE_Children) |
| 6264 : (XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | | 6264 : (XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | |
| 6265 XFA_RESOLVENODE_Properties); | 6265 XFA_RESOLVENODE_Properties); |
| 6266 } | 6266 } |
| 6267 } | 6267 } |
| 6268 } else { | 6268 } else { |
| 6269 pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr); | 6269 pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr); |
| 6270 dFlags = XFA_RESOLVENODE_AnyChild; | 6270 dFlags = XFA_RESOLVENODE_AnyChild; |
| 6271 } | 6271 } |
| 6272 return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringC(), | 6272 return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringC(), |
| 6273 resoveNodeRS, dFlags); | 6273 resoveNodeRS, dFlags); |
| 6274 } | 6274 } |
| 6275 | 6275 |
| 6276 // static | 6276 // static |
| 6277 void CXFA_FM2JSContext::ParseResolveResult( | 6277 void CXFA_FM2JSContext::ParseResolveResult( |
| 6278 CFXJSE_Value* pThis, | 6278 CFXJSE_Value* pThis, |
| 6279 const XFA_RESOLVENODE_RS& resoveNodeRS, | 6279 const XFA_RESOLVENODE_RS& resoveNodeRS, |
| 6280 CFXJSE_Value* pParentValue, | 6280 CFXJSE_Value* pParentValue, |
| 6281 CFXJSE_Value**& resultValues, | 6281 CFXJSE_Value**& resultValues, |
| 6282 int32_t& iSize, | 6282 int32_t& iSize, |
| 6283 FX_BOOL& bAttribute) { | 6283 bool& bAttribute) { |
| 6284 iSize = 0; | 6284 iSize = 0; |
| 6285 resultValues = nullptr; | 6285 resultValues = nullptr; |
| 6286 | 6286 |
| 6287 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 6287 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
| 6288 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 6288 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
| 6289 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { | 6289 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
| 6290 bAttribute = FALSE; | 6290 bAttribute = false; |
| 6291 iSize = resoveNodeRS.nodes.GetSize(); | 6291 iSize = resoveNodeRS.nodes.GetSize(); |
| 6292 resultValues = FX_Alloc(CFXJSE_Value*, iSize); | 6292 resultValues = FX_Alloc(CFXJSE_Value*, iSize); |
| 6293 for (int32_t i = 0; i < iSize; i++) { | 6293 for (int32_t i = 0; i < iSize; i++) { |
| 6294 resultValues[i] = new CFXJSE_Value(pIsolate); | 6294 resultValues[i] = new CFXJSE_Value(pIsolate); |
| 6295 resultValues[i]->Assign( | 6295 resultValues[i]->Assign( |
| 6296 pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( | 6296 pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( |
| 6297 resoveNodeRS.nodes.GetAt(i))); | 6297 resoveNodeRS.nodes.GetAt(i))); |
| 6298 } | 6298 } |
| 6299 return; | 6299 return; |
| 6300 } | 6300 } |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6518 CFX_WideString wsFormat; | 6518 CFX_WideString wsFormat; |
| 6519 pAppProvider->LoadString(iStringID, wsFormat); | 6519 pAppProvider->LoadString(iStringID, wsFormat); |
| 6520 CFX_WideString wsMessage; | 6520 CFX_WideString wsMessage; |
| 6521 va_list arg_ptr; | 6521 va_list arg_ptr; |
| 6522 va_start(arg_ptr, iStringID); | 6522 va_start(arg_ptr, iStringID); |
| 6523 wsMessage.FormatV(wsFormat.c_str(), arg_ptr); | 6523 wsMessage.FormatV(wsFormat.c_str(), arg_ptr); |
| 6524 va_end(arg_ptr); | 6524 va_end(arg_ptr); |
| 6525 FXJSE_ThrowMessage( | 6525 FXJSE_ThrowMessage( |
| 6526 FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); | 6526 FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); |
| 6527 } | 6527 } |
| OLD | NEW |