| 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 "fpdfsdk/javascript/PublicMethods.h" | 7 #include "fpdfsdk/javascript/PublicMethods.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "core/fxcrt/include/fx_ext.h" | 13 #include "core/fxcrt/include/fx_ext.h" |
| 14 #include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment. | 14 #include "fpdfsdk/include/fsdk_mgr.h" |
| 15 #include "fpdfsdk/include/javascript/IJavaScript.h" | |
| 16 #include "fpdfsdk/javascript/Field.h" | 15 #include "fpdfsdk/javascript/Field.h" |
| 17 #include "fpdfsdk/javascript/JS_Context.h" | |
| 18 #include "fpdfsdk/javascript/JS_Define.h" | 16 #include "fpdfsdk/javascript/JS_Define.h" |
| 19 #include "fpdfsdk/javascript/JS_EventHandler.h" | 17 #include "fpdfsdk/javascript/JS_EventHandler.h" |
| 20 #include "fpdfsdk/javascript/JS_Object.h" | 18 #include "fpdfsdk/javascript/JS_Object.h" |
| 21 #include "fpdfsdk/javascript/JS_Runtime.h" | |
| 22 #include "fpdfsdk/javascript/JS_Value.h" | 19 #include "fpdfsdk/javascript/JS_Value.h" |
| 20 #include "fpdfsdk/javascript/cjs_context.h" |
| 21 #include "fpdfsdk/javascript/cjs_runtime.h" |
| 23 #include "fpdfsdk/javascript/color.h" | 22 #include "fpdfsdk/javascript/color.h" |
| 24 #include "fpdfsdk/javascript/resource.h" | 23 #include "fpdfsdk/javascript/resource.h" |
| 25 #include "fpdfsdk/javascript/util.h" | 24 #include "fpdfsdk/javascript/util.h" |
| 26 | 25 |
| 27 #define DOUBLE_CORRECT 0.000000000000001 | 26 #define DOUBLE_CORRECT 0.000000000000001 |
| 28 | 27 |
| 29 BEGIN_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods) | 28 BEGIN_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods) |
| 30 JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format) | 29 JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format) |
| 31 JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke) | 30 JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke) |
| 32 JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format) | 31 JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format) |
| (...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 sPart += c; | 731 sPart += c; |
| 733 break; | 732 break; |
| 734 } | 733 } |
| 735 | 734 |
| 736 sRet += sPart; | 735 sRet += sPart; |
| 737 } | 736 } |
| 738 | 737 |
| 739 return sRet; | 738 return sRet; |
| 740 } | 739 } |
| 741 | 740 |
| 742 /* -------------------------------------------------------------------------- */ | |
| 743 | |
| 744 // function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, | 741 // function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, |
| 745 // bCurrencyPrepend) | 742 // bCurrencyPrepend) |
| 746 FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, | 743 FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, |
| 747 const std::vector<CJS_Value>& params, | 744 const std::vector<CJS_Value>& params, |
| 748 CJS_Value& vRet, | 745 CJS_Value& vRet, |
| 749 CFX_WideString& sError) { | 746 CFX_WideString& sError) { |
| 750 #if _FX_OS_ != _FX_ANDROID_ | 747 #if _FX_OS_ != _FX_ANDROID_ |
| 751 CJS_Context* pContext = (CJS_Context*)cc; | 748 CJS_Context* pContext = (CJS_Context*)cc; |
| 752 if (params.size() != 6) { | 749 if (params.size() != 6) { |
| 753 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); | 750 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 773 | 770 |
| 774 if (iDec < 0) | 771 if (iDec < 0) |
| 775 iDec = -iDec; | 772 iDec = -iDec; |
| 776 | 773 |
| 777 if (iSepStyle < 0 || iSepStyle > 3) | 774 if (iSepStyle < 0 || iSepStyle > 3) |
| 778 iSepStyle = 0; | 775 iSepStyle = 0; |
| 779 | 776 |
| 780 if (iNegStyle < 0 || iNegStyle > 3) | 777 if (iNegStyle < 0 || iNegStyle > 3) |
| 781 iNegStyle = 0; | 778 iNegStyle = 0; |
| 782 | 779 |
| 783 ////////////////////////////////////////////////////// | |
| 784 // for processing decimal places | 780 // for processing decimal places |
| 785 strValue.Replace(",", "."); | 781 strValue.Replace(",", "."); |
| 786 double dValue = atof(strValue); | 782 double dValue = atof(strValue); |
| 787 if (iDec > 0) | 783 if (iDec > 0) |
| 788 dValue += DOUBLE_CORRECT; | 784 dValue += DOUBLE_CORRECT; |
| 789 | 785 |
| 790 int iDec2; | 786 int iDec2; |
| 791 int iNegative = 0; | 787 int iNegative = 0; |
| 792 | 788 |
| 793 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); | 789 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 806 } | 802 } |
| 807 iDec2 = 0; | 803 iDec2 = 0; |
| 808 } | 804 } |
| 809 int iMax = strValue.GetLength(); | 805 int iMax = strValue.GetLength(); |
| 810 if (iDec2 > iMax) { | 806 if (iDec2 > iMax) { |
| 811 for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { | 807 for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { |
| 812 strValue += "0"; | 808 strValue += "0"; |
| 813 } | 809 } |
| 814 iMax = iDec2 + 1; | 810 iMax = iDec2 + 1; |
| 815 } | 811 } |
| 816 /////////////////////////////////////////////////////// | 812 |
| 817 // for processing seperator style | 813 // for processing seperator style |
| 818 if (iDec2 < iMax) { | 814 if (iDec2 < iMax) { |
| 819 if (iSepStyle == 0 || iSepStyle == 1) { | 815 if (iSepStyle == 0 || iSepStyle == 1) { |
| 820 strValue.Insert(iDec2, '.'); | 816 strValue.Insert(iDec2, '.'); |
| 821 iMax++; | 817 iMax++; |
| 822 } else if (iSepStyle == 2 || iSepStyle == 3) { | 818 } else if (iSepStyle == 2 || iSepStyle == 3) { |
| 823 strValue.Insert(iDec2, ','); | 819 strValue.Insert(iDec2, ','); |
| 824 iMax++; | 820 iMax++; |
| 825 } | 821 } |
| 826 | 822 |
| 827 if (iDec2 == 0) | 823 if (iDec2 == 0) |
| 828 strValue.Insert(iDec2, '0'); | 824 strValue.Insert(iDec2, '0'); |
| 829 } | 825 } |
| 830 if (iSepStyle == 0 || iSepStyle == 2) { | 826 if (iSepStyle == 0 || iSepStyle == 2) { |
| 831 char cSeperator; | 827 char cSeperator; |
| 832 if (iSepStyle == 0) | 828 if (iSepStyle == 0) |
| 833 cSeperator = ','; | 829 cSeperator = ','; |
| 834 else | 830 else |
| 835 cSeperator = '.'; | 831 cSeperator = '.'; |
| 836 | 832 |
| 837 for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { | 833 for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { |
| 838 strValue.Insert(iDecPositive, cSeperator); | 834 strValue.Insert(iDecPositive, cSeperator); |
| 839 iMax++; | 835 iMax++; |
| 840 } | 836 } |
| 841 } | 837 } |
| 842 | 838 |
| 843 ////////////////////////////////////////////////////////////////////// | |
| 844 // for processing currency string | 839 // for processing currency string |
| 845 | |
| 846 Value = CFX_WideString::FromLocal(strValue); | 840 Value = CFX_WideString::FromLocal(strValue); |
| 847 std::wstring strValue2 = Value.c_str(); | 841 std::wstring strValue2 = Value.c_str(); |
| 848 | 842 |
| 849 if (bCurrencyPrepend) | 843 if (bCurrencyPrepend) |
| 850 strValue2 = wstrCurrency + strValue2; | 844 strValue2 = wstrCurrency + strValue2; |
| 851 else | 845 else |
| 852 strValue2 = strValue2 + wstrCurrency; | 846 strValue2 = strValue2 + wstrCurrency; |
| 853 | 847 |
| 854 ///////////////////////////////////////////////////////////////////////// | |
| 855 // for processing negative style | 848 // for processing negative style |
| 856 if (iNegative) { | 849 if (iNegative) { |
| 857 if (iNegStyle == 0) { | 850 if (iNegStyle == 0) { |
| 858 strValue2.insert(0, L"-"); | 851 strValue2.insert(0, L"-"); |
| 859 } | 852 } |
| 860 if (iNegStyle == 2 || iNegStyle == 3) { | 853 if (iNegStyle == 2 || iNegStyle == 3) { |
| 861 strValue2.insert(0, L"("); | 854 strValue2.insert(0, L"("); |
| 862 strValue2.insert(strValue2.length(), L")"); | 855 strValue2.insert(strValue2.length(), L")"); |
| 863 } | 856 } |
| 864 if (iNegStyle == 1 || iNegStyle == 3) { | 857 if (iNegStyle == 1 || iNegStyle == 3) { |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1062 return TRUE; | 1055 return TRUE; |
| 1063 | 1056 |
| 1064 int iDec = params[0].ToInt(); | 1057 int iDec = params[0].ToInt(); |
| 1065 if (iDec < 0) | 1058 if (iDec < 0) |
| 1066 iDec = -iDec; | 1059 iDec = -iDec; |
| 1067 | 1060 |
| 1068 int iSepStyle = params[1].ToInt(); | 1061 int iSepStyle = params[1].ToInt(); |
| 1069 if (iSepStyle < 0 || iSepStyle > 3) | 1062 if (iSepStyle < 0 || iSepStyle > 3) |
| 1070 iSepStyle = 0; | 1063 iSepStyle = 0; |
| 1071 | 1064 |
| 1072 ////////////////////////////////////////////////////// | |
| 1073 // for processing decimal places | 1065 // for processing decimal places |
| 1074 double dValue = atof(strValue); | 1066 double dValue = atof(strValue); |
| 1075 dValue *= 100; | 1067 dValue *= 100; |
| 1076 if (iDec > 0) | 1068 if (iDec > 0) |
| 1077 dValue += DOUBLE_CORRECT; | 1069 dValue += DOUBLE_CORRECT; |
| 1078 | 1070 |
| 1079 int iDec2; | 1071 int iDec2; |
| 1080 int iNegative = 0; | 1072 int iNegative = 0; |
| 1081 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); | 1073 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); |
| 1082 if (strValue.IsEmpty()) { | 1074 if (strValue.IsEmpty()) { |
| 1083 dValue = 0; | 1075 dValue = 0; |
| 1084 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); | 1076 strValue = fcvt(dValue, iDec, &iDec2, &iNegative); |
| 1085 } | 1077 } |
| 1086 | 1078 |
| 1087 if (iDec2 < 0) { | 1079 if (iDec2 < 0) { |
| 1088 for (int iNum = 0; iNum < abs(iDec2); iNum++) { | 1080 for (int iNum = 0; iNum < abs(iDec2); iNum++) { |
| 1089 strValue = "0" + strValue; | 1081 strValue = "0" + strValue; |
| 1090 } | 1082 } |
| 1091 iDec2 = 0; | 1083 iDec2 = 0; |
| 1092 } | 1084 } |
| 1093 int iMax = strValue.GetLength(); | 1085 int iMax = strValue.GetLength(); |
| 1094 if (iDec2 > iMax) { | 1086 if (iDec2 > iMax) { |
| 1095 for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { | 1087 for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { |
| 1096 strValue += "0"; | 1088 strValue += "0"; |
| 1097 } | 1089 } |
| 1098 iMax = iDec2 + 1; | 1090 iMax = iDec2 + 1; |
| 1099 } | 1091 } |
| 1100 /////////////////////////////////////////////////////// | 1092 |
| 1101 // for processing seperator style | 1093 // for processing seperator style |
| 1102 if (iDec2 < iMax) { | 1094 if (iDec2 < iMax) { |
| 1103 if (iSepStyle == 0 || iSepStyle == 1) { | 1095 if (iSepStyle == 0 || iSepStyle == 1) { |
| 1104 strValue.Insert(iDec2, '.'); | 1096 strValue.Insert(iDec2, '.'); |
| 1105 iMax++; | 1097 iMax++; |
| 1106 } else if (iSepStyle == 2 || iSepStyle == 3) { | 1098 } else if (iSepStyle == 2 || iSepStyle == 3) { |
| 1107 strValue.Insert(iDec2, ','); | 1099 strValue.Insert(iDec2, ','); |
| 1108 iMax++; | 1100 iMax++; |
| 1109 } | 1101 } |
| 1110 | 1102 |
| 1111 if (iDec2 == 0) | 1103 if (iDec2 == 0) |
| 1112 strValue.Insert(iDec2, '0'); | 1104 strValue.Insert(iDec2, '0'); |
| 1113 } | 1105 } |
| 1114 if (iSepStyle == 0 || iSepStyle == 2) { | 1106 if (iSepStyle == 0 || iSepStyle == 2) { |
| 1115 char cSeperator; | 1107 char cSeperator; |
| 1116 if (iSepStyle == 0) | 1108 if (iSepStyle == 0) |
| 1117 cSeperator = ','; | 1109 cSeperator = ','; |
| 1118 else | 1110 else |
| 1119 cSeperator = '.'; | 1111 cSeperator = '.'; |
| 1120 | 1112 |
| 1121 for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { | 1113 for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { |
| 1122 strValue.Insert(iDecPositive, cSeperator); | 1114 strValue.Insert(iDecPositive, cSeperator); |
| 1123 iMax++; | 1115 iMax++; |
| 1124 } | 1116 } |
| 1125 } | 1117 } |
| 1126 //////////////////////////////////////////////////////////////////// | 1118 |
| 1127 // negative mark | 1119 // negative mark |
| 1128 if (iNegative) | 1120 if (iNegative) |
| 1129 strValue = "-" + strValue; | 1121 strValue = "-" + strValue; |
| 1130 strValue += "%"; | 1122 strValue += "%"; |
| 1131 Value = CFX_WideString::FromLocal(strValue); | 1123 Value = CFX_WideString::FromLocal(strValue); |
| 1132 #endif | 1124 #endif |
| 1133 return TRUE; | 1125 return TRUE; |
| 1134 } | 1126 } |
| 1135 // AFPercent_Keystroke(nDec, sepStyle) | 1127 // AFPercent_Keystroke(nDec, sepStyle) |
| 1136 FX_BOOL CJS_PublicMethods::AFPercent_Keystroke( | 1128 FX_BOOL CJS_PublicMethods::AFPercent_Keystroke( |
| (...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1875 nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str())); | 1867 nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str())); |
| 1876 } | 1868 } |
| 1877 | 1869 |
| 1878 if (nums.GetLength() > 0) | 1870 if (nums.GetLength() > 0) |
| 1879 vRet = nums; | 1871 vRet = nums; |
| 1880 else | 1872 else |
| 1881 vRet.SetNull(); | 1873 vRet.SetNull(); |
| 1882 | 1874 |
| 1883 return TRUE; | 1875 return TRUE; |
| 1884 } | 1876 } |
| OLD | NEW |