1 // Copyright 2014 PDFium Authors. All rights reserved.
\r
2 // Use of this source code is governed by a BSD-style license that can be
\r
3 // found in the LICENSE file.
\r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
\r
7 #include "xfa_fm2js.h"
\r
9 #define FINANCIAL_PRECISION 0.00000001
\r
10 struct XFA_FMHtmlReserveCode {
\r
12 FX_LPCWSTR m_htmlReserve;
\r
14 struct XFA_FMHtmlHashedReserveCode {
\r
16 FX_LPCWSTR m_htmlReserve;
\r
19 static XFA_FMHtmlHashedReserveCode reservesForDecode [] = {
\r
20 {0x00018b62, (FX_LPCWSTR)L"Mu", 924},
\r
21 {0x00019083, (FX_LPCWSTR)L"Nu", 925},
\r
22 {0x00019ab9, (FX_LPCWSTR)L"Pi", 928},
\r
23 {0x0001c3c1, (FX_LPCWSTR)L"Xi", 926},
\r
24 {0x000210ac, (FX_LPCWSTR)L"ge", 8805},
\r
25 {0x000210bb, (FX_LPCWSTR)L"gt", 62},
\r
26 {0x00022a51, (FX_LPCWSTR)L"le", 8804},
\r
27 {0x00022a60, (FX_LPCWSTR)L"lt", 60},
\r
28 {0x00022f82, (FX_LPCWSTR)L"mu", 956},
\r
29 {0x00023493, (FX_LPCWSTR)L"ne", 8800},
\r
30 {0x00023497, (FX_LPCWSTR)L"ni", 8715},
\r
31 {0x000234a3, (FX_LPCWSTR)L"nu", 957},
\r
32 {0x000239c1, (FX_LPCWSTR)L"or", 8744},
\r
33 {0x00023ed9, (FX_LPCWSTR)L"pi", 960},
\r
34 {0x000267e1, (FX_LPCWSTR)L"xi", 958},
\r
35 {0x00c41789, (FX_LPCWSTR)L"lceil", 8968},
\r
36 {0x00eef34f, (FX_LPCWSTR)L"thetasym", 977},
\r
37 {0x012d7ead, (FX_LPCWSTR)L"lcirc", 206},
\r
38 {0x01637b56, (FX_LPCWSTR)L"agrave", 224},
\r
39 {0x020856da, (FX_LPCWSTR)L"crarr", 8629},
\r
40 {0x022188c3, (FX_LPCWSTR)L"gamma", 947},
\r
41 {0x033586d3, (FX_LPCWSTR)L"nbsp", 160},
\r
42 {0x04f4c358, (FX_LPCWSTR)L"nsub", 8836},
\r
43 {0x0581466a, (FX_LPCWSTR)L"dagger", 8224},
\r
44 {0x06b1f790, (FX_LPCWSTR)L"oelig", 339},
\r
45 {0x06e490d4, (FX_LPCWSTR)L"Chi", 935},
\r
46 {0x0718c6a1, (FX_LPCWSTR)L"ETH", 208},
\r
47 {0x07196ada, (FX_LPCWSTR)L"Eta", 919},
\r
48 {0x07f667ca, (FX_LPCWSTR)L"Ugrave", 217},
\r
49 {0x083a8a21, (FX_LPCWSTR)L"Phi", 934},
\r
50 {0x083ac28c, (FX_LPCWSTR)L"Psi", 936},
\r
51 {0x086f26a9, (FX_LPCWSTR)L"Rho", 929},
\r
52 {0x089b5b51, (FX_LPCWSTR)L"aring", 229},
\r
53 {0x08a39f4a, (FX_LPCWSTR)L"Tau", 932},
\r
54 {0x08b6188b, (FX_LPCWSTR)L"THORN", 222},
\r
55 {0x09ce792a, (FX_LPCWSTR)L"icirc", 238},
\r
56 {0x09f9d61e, (FX_LPCWSTR)L"amp", 38},
\r
57 {0x09f9db33, (FX_LPCWSTR)L"and", 8743},
\r
58 {0x09f9db36, (FX_LPCWSTR)L"ang", 8736},
\r
59 {0x0a2e3514, (FX_LPCWSTR)L"cap", 8745},
\r
60 {0x0a2e58f4, (FX_LPCWSTR)L"chi", 967},
\r
61 {0x0a2e9ba8, (FX_LPCWSTR)L"cup", 8746},
\r
62 {0x0a4897d0, (FX_LPCWSTR)L"deg", 176},
\r
63 {0x0a6332fa, (FX_LPCWSTR)L"eta", 951},
\r
64 {0x0a633301, (FX_LPCWSTR)L"eth", 240},
\r
65 {0x0acc4d4b, (FX_LPCWSTR)L"int", 8747},
\r
66 {0x0b1b3d35, (FX_LPCWSTR)L"loz", 9674},
\r
67 {0x0b1b4c8b, (FX_LPCWSTR)L"lrm", 8206},
\r
68 {0x0b4fd9b1, (FX_LPCWSTR)L"not", 172},
\r
69 {0x0b845241, (FX_LPCWSTR)L"phi", 966},
\r
70 {0x0b84576f, (FX_LPCWSTR)L"piv", 982},
\r
71 {0x0b848aac, (FX_LPCWSTR)L"psi", 968},
\r
72 {0x0bb8df5e, (FX_LPCWSTR)L"reg", 174},
\r
73 {0x0bb8eec9, (FX_LPCWSTR)L"rho", 961},
\r
74 {0x0bb9034b, (FX_LPCWSTR)L"rlm", 8207},
\r
75 {0x0bd33d14, (FX_LPCWSTR)L"shy", 173},
\r
76 {0x0bd34229, (FX_LPCWSTR)L"sim", 8764},
\r
77 {0x0bd37faa, (FX_LPCWSTR)L"sub", 8834},
\r
78 {0x0bd37fb5, (FX_LPCWSTR)L"sum", 8721},
\r
79 {0x0bd37fb8, (FX_LPCWSTR)L"sup", 8835},
\r
80 {0x0bed676a, (FX_LPCWSTR)L"tau", 964},
\r
81 {0x0c07f32e, (FX_LPCWSTR)L"uml", 168},
\r
82 {0x0c71032c, (FX_LPCWSTR)L"yen", 165},
\r
83 {0x0c7f2889, (FX_LPCWSTR)L"szlig", 223},
\r
84 {0x0c8badbb, (FX_LPCWSTR)L"zwj", 8205},
\r
85 {0x10ba4dba, (FX_LPCWSTR)L"Egrave", 200},
\r
86 {0x10f1ea24, (FX_LPCWSTR)L"para", 182},
\r
87 {0x10f1ea37, (FX_LPCWSTR)L"part", 8706},
\r
88 {0x115b2337, (FX_LPCWSTR)L"perp", 8869},
\r
89 {0x12b10d15, (FX_LPCWSTR)L"prod", 8719},
\r
90 {0x12b10d21, (FX_LPCWSTR)L"prop", 8733},
\r
91 {0x12dfa9f4, (FX_LPCWSTR)L"rfloor", 8971},
\r
92 {0x12eb4736, (FX_LPCWSTR)L"Agrave", 192},
\r
93 {0x12fff2b7, (FX_LPCWSTR)L"pund", 163},
\r
94 {0x13fda9f2, (FX_LPCWSTR)L"tilde", 732},
\r
95 {0x1417fd62, (FX_LPCWSTR)L"times", 215},
\r
96 {0x154fc726, (FX_LPCWSTR)L"ecirc", 234},
\r
97 {0x165aa451, (FX_LPCWSTR)L"sigma", 963},
\r
98 {0x1709124a, (FX_LPCWSTR)L"Dagger", 8225},
\r
99 {0x192f78d5, (FX_LPCWSTR)L"iexcl", 161},
\r
100 {0x1b7ed8d7, (FX_LPCWSTR)L"rArr", 8658},
\r
101 {0x1ec88c68, (FX_LPCWSTR)L"rang", 9002},
\r
102 {0x1ec8a0f7, (FX_LPCWSTR)L"rarr", 8594},
\r
103 {0x1eda07f3, (FX_LPCWSTR)L"atilde", 227},
\r
104 {0x1f3182c4, (FX_LPCWSTR)L"real", 8476},
\r
105 {0x1fc34f8b, (FX_LPCWSTR)L"yacute", 253},
\r
106 {0x20d11522, (FX_LPCWSTR)L"acirc", 226},
\r
107 {0x21933a9b, (FX_LPCWSTR)L"rsaquo", 8250},
\r
108 {0x21f44907, (FX_LPCWSTR)L"uacute", 250},
\r
109 {0x220cca72, (FX_LPCWSTR)L"acute", 180},
\r
110 {0x242cded1, (FX_LPCWSTR)L"alefsym", 8501},
\r
111 {0x2655c66a, (FX_LPCWSTR)L"delta", 948},
\r
112 {0x269e4b4d, (FX_LPCWSTR)L"exist", 8707},
\r
113 {0x273379fa, (FX_LPCWSTR)L"micro", 181},
\r
114 {0x27a37440, (FX_LPCWSTR)L"forall", 8704},
\r
115 {0x2854e62c, (FX_LPCWSTR)L"minus", 8722},
\r
116 {0x28636f81, (FX_LPCWSTR)L"cedil", 184},
\r
117 {0x2887357b, (FX_LPCWSTR)L"iacute", 237},
\r
118 {0x2994d5ff, (FX_LPCWSTR)L"frac12", 189},
\r
119 {0x2994d601, (FX_LPCWSTR)L"frac14", 188},
\r
120 {0x2994e043, (FX_LPCWSTR)L"frac34", 190},
\r
121 {0x2a1feb41, (FX_LPCWSTR)L"lambda", 955},
\r
122 {0x2ab215f3, (FX_LPCWSTR)L"apos", 39},
\r
123 {0x2ab82ef7, (FX_LPCWSTR)L"eacute", 233},
\r
124 {0x2b3592ef, (FX_LPCWSTR)L"auml", 228},
\r
125 {0x2ce92873, (FX_LPCWSTR)L"aacute", 225},
\r
126 {0x2daff48a, (FX_LPCWSTR)L"oslash", 248},
\r
127 {0x2ef68882, (FX_LPCWSTR)L"aelig", 230},
\r
128 {0x3061d3d3, (FX_LPCWSTR)L"Atilde", 195},
\r
129 {0x314b1b6b, (FX_LPCWSTR)L"Yacute", 221},
\r
130 {0x337c14e7, (FX_LPCWSTR)L"Uacute", 218},
\r
131 {0x37676aca, (FX_LPCWSTR)L"cent", 162},
\r
132 {0x37d0b841, (FX_LPCWSTR)L"circ", 710},
\r
133 {0x386e7947, (FX_LPCWSTR)L"cong", 8773},
\r
134 {0x386e839b, (FX_LPCWSTR)L"copy", 169},
\r
135 {0x3a0e225a, (FX_LPCWSTR)L"Epsilon", 917},
\r
136 {0x3ba7b721, (FX_LPCWSTR)L"Lambda", 923},
\r
137 {0x3bd9abe6, (FX_LPCWSTR)L"Alpha", 913},
\r
138 {0x3c3ffad7, (FX_LPCWSTR)L"Eacute", 201},
\r
139 {0x3cfaf69f, (FX_LPCWSTR)L"brvbar", 166},
\r
140 {0x3d54a489, (FX_LPCWSTR)L"omega", 969},
\r
141 {0x3e70f453, (FX_LPCWSTR)L"Aacute", 193},
\r
142 {0x3f37c06a, (FX_LPCWSTR)L"Oslash", 216},
\r
143 {0x40e1b34e, (FX_LPCWSTR)L"diams", 9830},
\r
144 {0x416596df, (FX_LPCWSTR)L"plusmn", 177},
\r
145 {0x4354ff16, (FX_LPCWSTR)L"Ucirc", 219},
\r
146 {0x454fce6a, (FX_LPCWSTR)L"Upsilon", 933},
\r
147 {0x4610ad35, (FX_LPCWSTR)L"emsp", 8195},
\r
148 {0x462afb76, (FX_LPCWSTR)L"ensp", 8194},
\r
149 {0x46e30073, (FX_LPCWSTR)L"euml", 235},
\r
150 {0x46e31a1b, (FX_LPCWSTR)L"euro", 8364},
\r
151 {0x46f2eada, (FX_LPCWSTR)L"lowast", 8727},
\r
152 {0x4dca26cf, (FX_LPCWSTR)L"Auml", 196},
\r
153 {0x4e2d6083, (FX_LPCWSTR)L"image", 8465},
\r
154 {0x4f964ee8, (FX_LPCWSTR)L"notin", 8713},
\r
155 {0x50917a7a, (FX_LPCWSTR)L"epsilon", 949},
\r
156 {0x52f9a4cd, (FX_LPCWSTR)L"Kappa", 922},
\r
157 {0x5496f410, (FX_LPCWSTR)L"Ocirc", 212},
\r
158 {0x568cbf34, (FX_LPCWSTR)L"zeta", 950},
\r
159 {0x57badd20, (FX_LPCWSTR)L"ntilde", 241},
\r
160 {0x58662109, (FX_LPCWSTR)L"zwnj", 8204},
\r
161 {0x5b39870f, (FX_LPCWSTR)L"empty", 8709},
\r
162 {0x5bd3268a, (FX_LPCWSTR)L"upsilon", 965},
\r
163 {0x5e2bf8a3, (FX_LPCWSTR)L"Gamma", 915},
\r
164 {0x5f73c13a, (FX_LPCWSTR)L"rsquo", 8217},
\r
165 {0x61f2bc4d, (FX_LPCWSTR)L"iota", 953},
\r
166 {0x625bbcf3, (FX_LPCWSTR)L"isin", 8712},
\r
167 {0x62906df7, (FX_LPCWSTR)L"iuml", 239},
\r
168 {0x64a5cb31, (FX_LPCWSTR)L"Aring", 197},
\r
169 {0x66f25c4a, (FX_LPCWSTR)L"sbquo", 8218},
\r
170 {0x6851ab60, (FX_LPCWSTR)L"spades", 9824},
\r
171 {0x6942a900, (FX_LPCWSTR)L"Ntilde", 209},
\r
172 {0x69779453, (FX_LPCWSTR)L"Euml", 203},
\r
173 {0x6cda6e23, (FX_LPCWSTR)L"current", 164},
\r
174 {0x70b5b634, (FX_LPCWSTR)L"lsquo", 8216},
\r
175 {0x715a3706, (FX_LPCWSTR)L"Ecirc", 202},
\r
176 {0x71e8bf8d, (FX_LPCWSTR)L"tdquo", 8221},
\r
177 {0x72651431, (FX_LPCWSTR)L"Sigma", 931},
\r
178 {0x7569813b, (FX_LPCWSTR)L"iquest", 191},
\r
179 {0x776a436a, (FX_LPCWSTR)L"equiv", 8801},
\r
180 {0x79215314, (FX_LPCWSTR)L"Zeta", 918},
\r
181 {0x79b81224, (FX_LPCWSTR)L"ograve", 242},
\r
182 {0x7c2f8b23, (FX_LPCWSTR)L"macr", 175},
\r
183 {0x7cdb8502, (FX_LPCWSTR)L"Acirc", 194},
\r
184 {0x8185c62e, (FX_LPCWSTR)L"ndash", 8211},
\r
185 {0x8260364a, (FX_LPCWSTR)L"Delta", 916},
\r
186 {0x846619ad, (FX_LPCWSTR)L"mdash", 8212},
\r
187 {0x8550fb50, (FX_LPCWSTR)L"OElig", 338},
\r
188 {0x88eb5b85, (FX_LPCWSTR)L"ldquo", 8220},
\r
189 {0x8b3fde04, (FX_LPCWSTR)L"Ograve", 210},
\r
190 {0x8bc5794b, (FX_LPCWSTR)L"ordf", 170},
\r
191 {0x8bc57952, (FX_LPCWSTR)L"ordm", 186},
\r
192 {0x8c14923d, (FX_LPCWSTR)L"ouml", 246},
\r
193 {0x8c5a7cd6, (FX_LPCWSTR)L"theta", 952},
\r
194 {0x8d61812b, (FX_LPCWSTR)L"thorn", 254},
\r
195 {0x912b95aa, (FX_LPCWSTR)L"asymp", 8776},
\r
196 {0x947faf81, (FX_LPCWSTR)L"middot", 183},
\r
197 {0x9629202e, (FX_LPCWSTR)L"lfloor", 8970},
\r
198 {0x972e9ec1, (FX_LPCWSTR)L"otilde", 245},
\r
199 {0x9748f231, (FX_LPCWSTR)L"otimes", 8855},
\r
200 {0x995f1469, (FX_LPCWSTR)L"Omega", 937},
\r
201 {0x99eb5349, (FX_LPCWSTR)L"quot", 34},
\r
202 {0x9aeb639e, (FX_LPCWSTR)L"hellip", 8230},
\r
203 {0xa0ae2f86, (FX_LPCWSTR)L"Scaron", 352},
\r
204 {0xa4dcb0d5, (FX_LPCWSTR)L"lsaquo", 8249},
\r
205 {0xa53dbf41, (FX_LPCWSTR)L"oacute", 243},
\r
206 {0xa5ae9e7b, (FX_LPCWSTR)L"bdquo", 8222},
\r
207 {0xa602d7ba, (FX_LPCWSTR)L"sdot", 8901},
\r
208 {0xa61ce86f, (FX_LPCWSTR)L"sect", 167},
\r
209 {0xa6e4c3d7, (FX_LPCWSTR)L"sigmaf", 962},
\r
210 {0xa7c1c74f, (FX_LPCWSTR)L"sube", 8838},
\r
211 {0xa7c20ee9, (FX_LPCWSTR)L"sup1", 185},
\r
212 {0xa7c20eea, (FX_LPCWSTR)L"sup2", 178},
\r
213 {0xa7c20eeb, (FX_LPCWSTR)L"sup3", 179},
\r
214 {0xa7c20f1d, (FX_LPCWSTR)L"supe", 8839},
\r
215 {0xa8b66aa1, (FX_LPCWSTR)L"Otilde", 213},
\r
216 {0xad958c42, (FX_LPCWSTR)L"AElig", 198},
\r
217 {0xaea9261d, (FX_LPCWSTR)L"Ouml", 214},
\r
218 {0xb040eafa, (FX_LPCWSTR)L"uArr", 8657},
\r
219 {0xb07c2e1c, (FX_LPCWSTR)L"beta", 946},
\r
220 {0xb220e92f, (FX_LPCWSTR)L"bull", 8226},
\r
221 {0xb22750c4, (FX_LPCWSTR)L"ccedil", 231},
\r
222 {0xb38ab31a, (FX_LPCWSTR)L"uarr", 8593},
\r
223 {0xb598b683, (FX_LPCWSTR)L"uuml", 252},
\r
224 {0xb6c58b21, (FX_LPCWSTR)L"Oacute", 211},
\r
225 {0xb6d2a617, (FX_LPCWSTR)L"oline", 8254},
\r
226 {0xba9fd989, (FX_LPCWSTR)L"dArr", 8659},
\r
227 {0xbb5ccd41, (FX_LPCWSTR)L"lgrave", 204},
\r
228 {0xbd39b44c, (FX_LPCWSTR)L"weierp", 8472},
\r
229 {0xbde9a1a9, (FX_LPCWSTR)L"darr", 8595},
\r
230 {0xc027e329, (FX_LPCWSTR)L"permil", 8240},
\r
231 {0xc2451389, (FX_LPCWSTR)L"upsih", 978},
\r
232 {0xc3af1ca4, (FX_LPCWSTR)L"Ccedil", 199},
\r
233 {0xcd164249, (FX_LPCWSTR)L"fnof", 402},
\r
234 {0xcf6c8467, (FX_LPCWSTR)L"hearts", 9829},
\r
235 {0xd1228390, (FX_LPCWSTR)L"trade", 8482},
\r
236 {0xd1462407, (FX_LPCWSTR)L"yuml", 255},
\r
237 {0xd2cf2253, (FX_LPCWSTR)L"oplus", 8853},
\r
238 {0xd310c1fc, (FX_LPCWSTR)L"Beta", 914},
\r
239 {0xd59c4d74, (FX_LPCWSTR)L"infin", 8734},
\r
240 {0xd64d470d, (FX_LPCWSTR)L"hArr", 8660},
\r
241 {0xd67d9c75, (FX_LPCWSTR)L"divide", 247},
\r
242 {0xd698dd37, (FX_LPCWSTR)L"Omicron", 927},
\r
243 {0xd82d4a63, (FX_LPCWSTR)L"Uuml", 220},
\r
244 {0xd9970f2d, (FX_LPCWSTR)L"harr", 8596},
\r
245 {0xda91fd99, (FX_LPCWSTR)L"clubs", 9827},
\r
246 {0xdbe5bdcc, (FX_LPCWSTR)L"there4", 8756},
\r
247 {0xdd7671bd, (FX_LPCWSTR)L"prime", 8242},
\r
248 {0xdfcf3c06, (FX_LPCWSTR)L"alpha", 945},
\r
249 {0xe0213063, (FX_LPCWSTR)L"saron", 353},
\r
250 {0xe1911d83, (FX_LPCWSTR)L"radic", 8730},
\r
251 {0xe2e75468, (FX_LPCWSTR)L"raquo", 187},
\r
252 {0xe6e27a5e, (FX_LPCWSTR)L"lacute", 205},
\r
253 {0xe74a8f36, (FX_LPCWSTR)L"ucirc", 251},
\r
254 {0xe864ecb6, (FX_LPCWSTR)L"Theta", 920},
\r
255 {0xecddde5e, (FX_LPCWSTR)L"nabla", 8711},
\r
256 {0xed1c3557, (FX_LPCWSTR)L"omicron", 959},
\r
257 {0xef82228f, (FX_LPCWSTR)L"rceil", 8969},
\r
258 {0xf1fab491, (FX_LPCWSTR)L"lArr", 8656},
\r
259 {0xf3dab7e7, (FX_LPCWSTR)L"Yuml", 376},
\r
260 {0xf4294962, (FX_LPCWSTR)L"laquo", 171},
\r
261 {0xf5446822, (FX_LPCWSTR)L"lang", 9001},
\r
262 {0xf5447cb1, (FX_LPCWSTR)L"larr", 8592},
\r
263 {0xf66e9bea, (FX_LPCWSTR)L"ugrave", 249},
\r
264 {0xf6b4ce70, (FX_LPCWSTR)L"lota", 921},
\r
265 {0xf6ef34ed, (FX_LPCWSTR)L"kappa", 954},
\r
266 {0xf72a3a56, (FX_LPCWSTR)L"thinsp", 8201},
\r
267 {0xf752801a, (FX_LPCWSTR)L"luml", 207},
\r
268 {0xf88c8430, (FX_LPCWSTR)L"ocirc", 244},
\r
269 {0xf9676178, (FX_LPCWSTR)L"frasl", 8260},
\r
270 {0xfd01885e, (FX_LPCWSTR)L"igrave", 236},
\r
271 {0xff3281da, (FX_LPCWSTR)L"egrave", 232},
\r
273 static XFA_FMHtmlReserveCode reservesForEncode [] = {
\r
274 {34, (FX_LPCWSTR)(L"quot")},
\r
275 {38, (FX_LPCWSTR)(L"amp")},
\r
276 {39, (FX_LPCWSTR)(L"apos")},
\r
277 {60, (FX_LPCWSTR)(L"lt")},
\r
278 {62, (FX_LPCWSTR)(L"gt")},
\r
279 {160, (FX_LPCWSTR)(L"nbsp")},
\r
280 {161, (FX_LPCWSTR)(L"iexcl")},
\r
281 {162, (FX_LPCWSTR)(L"cent")},
\r
282 {163, (FX_LPCWSTR)(L"pund")},
\r
283 {164, (FX_LPCWSTR)(L"current")},
\r
284 {165, (FX_LPCWSTR)(L"yen")},
\r
285 {166, (FX_LPCWSTR)(L"brvbar")},
\r
286 {167, (FX_LPCWSTR)(L"sect")},
\r
287 {168, (FX_LPCWSTR)(L"uml")},
\r
288 {169, (FX_LPCWSTR)(L"copy")},
\r
289 {170, (FX_LPCWSTR)(L"ordf")},
\r
290 {171, (FX_LPCWSTR)(L"laquo")},
\r
291 {172, (FX_LPCWSTR)(L"not")},
\r
292 {173, (FX_LPCWSTR)(L"shy")},
\r
293 {174, (FX_LPCWSTR)(L"reg")},
\r
294 {175, (FX_LPCWSTR)(L"macr")},
\r
295 {176, (FX_LPCWSTR)(L"deg")},
\r
296 {177, (FX_LPCWSTR)(L"plusmn")},
\r
297 {178, (FX_LPCWSTR)(L"sup2")},
\r
298 {179, (FX_LPCWSTR)(L"sup3")},
\r
299 {180, (FX_LPCWSTR)(L"acute")},
\r
300 {181, (FX_LPCWSTR)(L"micro")},
\r
301 {182, (FX_LPCWSTR)(L"para")},
\r
302 {183, (FX_LPCWSTR)(L"middot")},
\r
303 {184, (FX_LPCWSTR)(L"cedil")},
\r
304 {185, (FX_LPCWSTR)(L"sup1")},
\r
305 {186, (FX_LPCWSTR)(L"ordm")},
\r
306 {187, (FX_LPCWSTR)(L"raquo")},
\r
307 {188, (FX_LPCWSTR)(L"frac14")},
\r
308 {189, (FX_LPCWSTR)(L"frac12")},
\r
309 {190, (FX_LPCWSTR)(L"frac34")},
\r
310 {191, (FX_LPCWSTR)(L"iquest")},
\r
311 {192, (FX_LPCWSTR)(L"Agrave")},
\r
312 {193, (FX_LPCWSTR)(L"Aacute")},
\r
313 {194, (FX_LPCWSTR)(L"Acirc")},
\r
314 {195, (FX_LPCWSTR)(L"Atilde")},
\r
315 {196, (FX_LPCWSTR)(L"Auml")},
\r
316 {197, (FX_LPCWSTR)(L"Aring")},
\r
317 {198, (FX_LPCWSTR)(L"AElig")},
\r
318 {199, (FX_LPCWSTR)(L"Ccedil")},
\r
319 {200, (FX_LPCWSTR)(L"Egrave")},
\r
320 {201, (FX_LPCWSTR)(L"Eacute")},
\r
321 {202, (FX_LPCWSTR)(L"Ecirc")},
\r
322 {203, (FX_LPCWSTR)(L"Euml")},
\r
323 {204, (FX_LPCWSTR)(L"lgrave")},
\r
324 {205, (FX_LPCWSTR)(L"lacute")},
\r
325 {206, (FX_LPCWSTR)(L"lcirc")},
\r
326 {207, (FX_LPCWSTR)(L"luml")},
\r
327 {208, (FX_LPCWSTR)(L"ETH")},
\r
328 {209, (FX_LPCWSTR)(L"Ntilde")},
\r
329 {210, (FX_LPCWSTR)(L"Ograve")},
\r
330 {211, (FX_LPCWSTR)(L"Oacute")},
\r
331 {212, (FX_LPCWSTR)(L"Ocirc")},
\r
332 {213, (FX_LPCWSTR)(L"Otilde")},
\r
333 {214, (FX_LPCWSTR)(L"Ouml")},
\r
334 {215, (FX_LPCWSTR)(L"times")},
\r
335 {216, (FX_LPCWSTR)(L"Oslash")},
\r
336 {217, (FX_LPCWSTR)(L"Ugrave")},
\r
337 {218, (FX_LPCWSTR)(L"Uacute")},
\r
338 {219, (FX_LPCWSTR)(L"Ucirc")},
\r
339 {220, (FX_LPCWSTR)(L"Uuml")},
\r
340 {221, (FX_LPCWSTR)(L"Yacute")},
\r
341 {222, (FX_LPCWSTR)(L"THORN")},
\r
342 {223, (FX_LPCWSTR)(L"szlig")},
\r
343 {224, (FX_LPCWSTR)(L"agrave")},
\r
344 {225, (FX_LPCWSTR)(L"aacute")},
\r
345 {226, (FX_LPCWSTR)(L"acirc")},
\r
346 {227, (FX_LPCWSTR)(L"atilde")},
\r
347 {228, (FX_LPCWSTR)(L"auml")},
\r
348 {229, (FX_LPCWSTR)(L"aring")},
\r
349 {230, (FX_LPCWSTR)(L"aelig") },
\r
350 {231, (FX_LPCWSTR)(L"ccedil") },
\r
351 {232, (FX_LPCWSTR)(L"egrave") },
\r
352 {233, (FX_LPCWSTR)(L"eacute") },
\r
353 {234, (FX_LPCWSTR)(L"ecirc") },
\r
354 {235, (FX_LPCWSTR)(L"euml") },
\r
355 {236, (FX_LPCWSTR)(L"igrave") },
\r
356 {237, (FX_LPCWSTR)(L"iacute") },
\r
357 {238, (FX_LPCWSTR)(L"icirc") },
\r
358 {239, (FX_LPCWSTR)(L"iuml") },
\r
359 {240, (FX_LPCWSTR)(L"eth") },
\r
360 {241, (FX_LPCWSTR)(L"ntilde") },
\r
361 {242, (FX_LPCWSTR)(L"ograve") },
\r
362 {243, (FX_LPCWSTR)(L"oacute") },
\r
363 {244, (FX_LPCWSTR)(L"ocirc") },
\r
364 {245, (FX_LPCWSTR)(L"otilde") },
\r
365 {246, (FX_LPCWSTR)(L"ouml") },
\r
366 {247, (FX_LPCWSTR)(L"divide") },
\r
367 {248, (FX_LPCWSTR)(L"oslash") },
\r
368 {249, (FX_LPCWSTR)(L"ugrave") },
\r
369 {250, (FX_LPCWSTR)(L"uacute") },
\r
370 {251, (FX_LPCWSTR)(L"ucirc") },
\r
371 {252, (FX_LPCWSTR)(L"uuml") },
\r
372 {253, (FX_LPCWSTR)(L"yacute") },
\r
373 {254, (FX_LPCWSTR)(L"thorn") },
\r
374 {255, (FX_LPCWSTR)(L"yuml") },
\r
375 {338, (FX_LPCWSTR)(L"OElig") },
\r
376 {339, (FX_LPCWSTR)(L"oelig") },
\r
377 {352, (FX_LPCWSTR)(L"Scaron") },
\r
378 {353, (FX_LPCWSTR)(L"saron") },
\r
379 {376, (FX_LPCWSTR)(L"Yuml") },
\r
380 {402, (FX_LPCWSTR)(L"fnof") },
\r
381 {710, (FX_LPCWSTR)(L"circ") },
\r
382 {732, (FX_LPCWSTR)(L"tilde") },
\r
383 {913, (FX_LPCWSTR)(L"Alpha") },
\r
384 {914, (FX_LPCWSTR)(L"Beta") },
\r
385 {915, (FX_LPCWSTR)(L"Gamma") },
\r
386 {916, (FX_LPCWSTR)(L"Delta") },
\r
387 {917, (FX_LPCWSTR)(L"Epsilon") },
\r
388 {918, (FX_LPCWSTR)(L"Zeta") },
\r
389 {919, (FX_LPCWSTR)(L"Eta") },
\r
390 {920, (FX_LPCWSTR)(L"Theta") },
\r
391 {921, (FX_LPCWSTR)(L"lota") },
\r
392 {922, (FX_LPCWSTR)(L"Kappa") },
\r
393 {923, (FX_LPCWSTR)(L"Lambda") },
\r
394 {924, (FX_LPCWSTR)(L"Mu") },
\r
395 {925, (FX_LPCWSTR)(L"Nu") },
\r
396 {926, (FX_LPCWSTR)(L"Xi") },
\r
397 {927, (FX_LPCWSTR)(L"Omicron") },
\r
398 {928, (FX_LPCWSTR)(L"Pi") },
\r
399 {929, (FX_LPCWSTR)(L"Rho") },
\r
400 {931, (FX_LPCWSTR)(L"Sigma") },
\r
401 {932, (FX_LPCWSTR)(L"Tau") },
\r
402 {933, (FX_LPCWSTR)(L"Upsilon") },
\r
403 {934, (FX_LPCWSTR)(L"Phi") },
\r
404 {935, (FX_LPCWSTR)(L"Chi") },
\r
405 {936, (FX_LPCWSTR)(L"Psi") },
\r
406 {937, (FX_LPCWSTR)(L"Omega") },
\r
407 {945, (FX_LPCWSTR)(L"alpha") },
\r
408 {946, (FX_LPCWSTR)(L"beta") },
\r
409 {947, (FX_LPCWSTR)(L"gamma") },
\r
410 {948, (FX_LPCWSTR)(L"delta") },
\r
411 {949, (FX_LPCWSTR)(L"epsilon") },
\r
412 {950, (FX_LPCWSTR)(L"zeta") },
\r
413 {951, (FX_LPCWSTR)(L"eta") },
\r
414 {952, (FX_LPCWSTR)(L"theta") },
\r
415 {953, (FX_LPCWSTR)(L"iota") },
\r
416 {954, (FX_LPCWSTR)(L"kappa") },
\r
417 {955, (FX_LPCWSTR)(L"lambda") },
\r
418 {956, (FX_LPCWSTR)(L"mu") },
\r
419 {957, (FX_LPCWSTR)(L"nu") },
\r
420 {958, (FX_LPCWSTR)(L"xi") },
\r
421 {959, (FX_LPCWSTR)(L"omicron") },
\r
422 {960, (FX_LPCWSTR)(L"pi") },
\r
423 {961, (FX_LPCWSTR)(L"rho") },
\r
424 {962, (FX_LPCWSTR)(L"sigmaf") },
\r
425 {963, (FX_LPCWSTR)(L"sigma") },
\r
426 {964, (FX_LPCWSTR)(L"tau") },
\r
427 {965, (FX_LPCWSTR)(L"upsilon") },
\r
428 {966, (FX_LPCWSTR)(L"phi") },
\r
429 {967, (FX_LPCWSTR)(L"chi") },
\r
430 {968, (FX_LPCWSTR)(L"psi") },
\r
431 {969, (FX_LPCWSTR)(L"omega") },
\r
432 {977, (FX_LPCWSTR)(L"thetasym") },
\r
433 {978, (FX_LPCWSTR)(L"upsih") },
\r
434 {982, (FX_LPCWSTR)(L"piv") },
\r
435 {8194, (FX_LPCWSTR)(L"ensp") },
\r
436 {8195, (FX_LPCWSTR)(L"emsp") },
\r
437 {8201, (FX_LPCWSTR)(L"thinsp") },
\r
438 {8204, (FX_LPCWSTR)(L"zwnj") },
\r
439 {8205, (FX_LPCWSTR)(L"zwj") },
\r
440 {8206, (FX_LPCWSTR)(L"lrm") },
\r
441 {8207, (FX_LPCWSTR)(L"rlm") },
\r
442 {8211, (FX_LPCWSTR)(L"ndash") },
\r
443 {8212, (FX_LPCWSTR)(L"mdash") },
\r
444 {8216, (FX_LPCWSTR)(L"lsquo") },
\r
445 {8217, (FX_LPCWSTR)(L"rsquo") },
\r
446 {8218, (FX_LPCWSTR)(L"sbquo") },
\r
447 {8220, (FX_LPCWSTR)(L"ldquo") },
\r
448 {8221, (FX_LPCWSTR)(L"tdquo") },
\r
449 {8222, (FX_LPCWSTR)(L"bdquo") },
\r
450 {8224, (FX_LPCWSTR)(L"dagger") },
\r
451 {8225, (FX_LPCWSTR)(L"Dagger") },
\r
452 {8226, (FX_LPCWSTR)(L"bull") },
\r
453 {8230, (FX_LPCWSTR)(L"hellip") },
\r
454 {8240, (FX_LPCWSTR)(L"permil") },
\r
455 {8242, (FX_LPCWSTR)(L"prime") },
\r
456 {8249, (FX_LPCWSTR)(L"lsaquo") },
\r
457 {8250, (FX_LPCWSTR)(L"rsaquo") },
\r
458 {8254, (FX_LPCWSTR)(L"oline") },
\r
459 {8260, (FX_LPCWSTR)(L"frasl") },
\r
460 {8364, (FX_LPCWSTR)(L"euro") },
\r
461 {8465, (FX_LPCWSTR)(L"image") },
\r
462 {8472, (FX_LPCWSTR)(L"weierp") },
\r
463 {8476, (FX_LPCWSTR)(L"real") },
\r
464 {8482, (FX_LPCWSTR)(L"trade") },
\r
465 {8501, (FX_LPCWSTR)(L"alefsym") },
\r
466 {8592, (FX_LPCWSTR)(L"larr") },
\r
467 {8593, (FX_LPCWSTR)(L"uarr") },
\r
468 {8594, (FX_LPCWSTR)(L"rarr") },
\r
469 {8595, (FX_LPCWSTR)(L"darr") },
\r
470 {8596, (FX_LPCWSTR)(L"harr") },
\r
471 {8629, (FX_LPCWSTR)(L"crarr") },
\r
472 {8656, (FX_LPCWSTR)(L"lArr") },
\r
473 {8657, (FX_LPCWSTR)(L"uArr") },
\r
474 {8658, (FX_LPCWSTR)(L"rArr") },
\r
475 {8659, (FX_LPCWSTR)(L"dArr") },
\r
476 {8660, (FX_LPCWSTR)(L"hArr") },
\r
477 {8704, (FX_LPCWSTR)(L"forall") },
\r
478 {8706, (FX_LPCWSTR)(L"part") },
\r
479 {8707, (FX_LPCWSTR)(L"exist") },
\r
480 {8709, (FX_LPCWSTR)(L"empty") },
\r
481 {8711, (FX_LPCWSTR)(L"nabla") },
\r
482 {8712, (FX_LPCWSTR)(L"isin") },
\r
483 {8713, (FX_LPCWSTR)(L"notin") },
\r
484 {8715, (FX_LPCWSTR)(L"ni") },
\r
485 {8719, (FX_LPCWSTR)(L"prod") },
\r
486 {8721, (FX_LPCWSTR)(L"sum") },
\r
487 {8722, (FX_LPCWSTR)(L"minus") },
\r
488 {8727, (FX_LPCWSTR)(L"lowast") },
\r
489 {8730, (FX_LPCWSTR)(L"radic") },
\r
490 {8733, (FX_LPCWSTR)(L"prop") },
\r
491 {8734, (FX_LPCWSTR)(L"infin") },
\r
492 {8736, (FX_LPCWSTR)(L"ang") },
\r
493 {8743, (FX_LPCWSTR)(L"and") },
\r
494 {8744, (FX_LPCWSTR)(L"or") },
\r
495 {8745, (FX_LPCWSTR)(L"cap") },
\r
496 {8746, (FX_LPCWSTR)(L"cup") },
\r
497 {8747, (FX_LPCWSTR)(L"int") },
\r
498 {8756, (FX_LPCWSTR)(L"there4") },
\r
499 {8764, (FX_LPCWSTR)(L"sim") },
\r
500 {8773, (FX_LPCWSTR)(L"cong") },
\r
501 {8776, (FX_LPCWSTR)(L"asymp") },
\r
502 {8800, (FX_LPCWSTR)(L"ne") },
\r
503 {8801, (FX_LPCWSTR)(L"equiv") },
\r
504 {8804, (FX_LPCWSTR)(L"le") },
\r
505 {8805, (FX_LPCWSTR)(L"ge") },
\r
506 {8834, (FX_LPCWSTR)(L"sub") },
\r
507 {8835, (FX_LPCWSTR)(L"sup") },
\r
508 {8836, (FX_LPCWSTR)(L"nsub") },
\r
509 {8838, (FX_LPCWSTR)(L"sube") },
\r
510 {8839, (FX_LPCWSTR)(L"supe") },
\r
511 {8853, (FX_LPCWSTR)(L"oplus") },
\r
512 {8855, (FX_LPCWSTR)(L"otimes") },
\r
513 {8869, (FX_LPCWSTR)(L"perp") },
\r
514 {8901, (FX_LPCWSTR)(L"sdot") },
\r
515 {8968, (FX_LPCWSTR)(L"lceil") },
\r
516 {8969, (FX_LPCWSTR)(L"rceil") },
\r
517 {8970, (FX_LPCWSTR)(L"lfloor") },
\r
518 {8971, (FX_LPCWSTR)(L"rfloor") },
\r
519 {9001, (FX_LPCWSTR)(L"lang") },
\r
520 {9002, (FX_LPCWSTR)(L"rang") },
\r
521 {9674, (FX_LPCWSTR)(L"loz") },
\r
522 {9824, (FX_LPCWSTR)(L"spades") },
\r
523 {9827, (FX_LPCWSTR)(L"clubs") },
\r
524 {9829, (FX_LPCWSTR)(L"hearts") },
\r
525 {9830, (FX_LPCWSTR)(L"diams") },
\r
527 void CXFA_FM2JSContext::Abs(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
529 if(args.GetLength() == 1) {
\r
530 FXJSE_HVALUE argOne = args.GetValue(0);
\r
531 if(HValueIsNull(hThis, argOne)) {
\r
532 FXJSE_Value_SetNull(args.GetReturnValue());
\r
534 FX_DOUBLE dValue = HValueToDouble(hThis, argOne);
\r
538 FXJSE_Value_SetDouble(args.GetReturnValue(), dValue);
\r
540 FXJSE_Value_Release(argOne);
\r
542 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
543 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Abs"));
\r
546 void CXFA_FM2JSContext::Avg(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
548 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
549 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
550 FX_INT32 argc = args.GetLength();
\r
551 FX_UINT32 uCount = 0;
\r
552 FX_DOUBLE dSum = 0.0;
\r
554 FXJSE_HVALUE argValue = 0;
\r
555 for(FX_INT32 i = 0; i < argc; i++) {
\r
556 argValue = args.GetValue(i);
\r
557 if(FXJSE_Value_IsNull(argValue)) {
\r
558 FXJSE_Value_Release(argValue);
\r
560 } else if(FXJSE_Value_IsArray(argValue)) {
\r
561 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
562 FXJSE_Value_GetObjectProp(argValue, FX_BSTRC("length"), lengthValue);
\r
563 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
564 FXJSE_Value_Release(lengthValue);
\r
566 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
567 FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue);
\r
568 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
569 if(FXJSE_Value_IsNull(propertyValue)) {
\r
570 for(FX_INT32 j = 2; j < iLength; j++) {
\r
571 FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue);
\r
572 FXJSE_HVALUE defaultPropValue = FXJSE_Value_Create(hruntime);
\r
573 GetObjectDefaultValue(jsObjectValue, defaultPropValue);
\r
574 if (!FXJSE_Value_IsNull(defaultPropValue)) {
\r
575 dSum += HValueToDouble(hThis, defaultPropValue);
\r
578 FXJSE_Value_Release(defaultPropValue);
\r
581 CFX_ByteString propertyStr;
\r
582 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
583 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
584 for(FX_INT32 j = 2; j < iLength; j++) {
\r
585 FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue);
\r
586 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
587 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
588 dSum += HValueToDouble(hThis, newPropertyValue);
\r
592 FXJSE_Value_Release(newPropertyValue);
\r
594 FXJSE_Value_Release(jsObjectValue);
\r
595 FXJSE_Value_Release(propertyValue);
\r
598 dSum += HValueToDouble(hThis, argValue);
\r
601 FXJSE_Value_Release(argValue);
\r
606 FXJSE_Value_SetNull(args.GetReturnValue());
\r
608 FXJSE_Value_SetDouble(args.GetReturnValue(), dSum / uCount);
\r
611 void CXFA_FM2JSContext::Ceil(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
613 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
614 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
615 if(args.GetLength() == 1) {
\r
616 FXJSE_HVALUE argValue = GetSimpleHValue(hThis, args, 0);
\r
617 if (HValueIsNull(hThis, argValue)) {
\r
618 FXJSE_Value_SetNull(args.GetReturnValue());
\r
620 FXJSE_Value_SetFloat(args.GetReturnValue(), FXSYS_ceil(HValueToFloat(hThis, argValue)));
\r
622 FXJSE_Value_Release(argValue);
\r
624 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Ceil"));
\r
627 void CXFA_FM2JSContext::Count(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
629 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
630 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
631 FX_INT32 argc = args.GetLength();
\r
632 FX_UINT32 uCount = 0;
\r
633 FXJSE_HVALUE argValue = 0;
\r
634 for(FX_INT32 i = 0; i < argc; i++) {
\r
635 argValue = args.GetValue(i);
\r
636 if(FXJSE_Value_IsNull(argValue)) {
\r
637 FXJSE_Value_Release(argValue);
\r
639 } else if(FXJSE_Value_IsArray(argValue)) {
\r
640 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
641 FXJSE_Value_GetObjectProp(argValue, FX_BSTRC("length"), lengthValue);
\r
642 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
643 FXJSE_Value_Release(lengthValue);
\r
645 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
646 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
647 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
648 FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue);
\r
649 FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue);
\r
650 if(FXJSE_Value_IsNull(propertyValue)) {
\r
651 for(FX_INT32 i = 2; i < iLength; i++) {
\r
652 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
653 GetObjectDefaultValue(jsObjectValue, newPropertyValue);
\r
654 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
659 CFX_ByteString propertyStr;
\r
660 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
661 for(FX_INT32 i = 2; i < iLength; i++) {
\r
662 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
663 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
664 uCount += (FXJSE_Value_IsNull(newPropertyValue) ? 0 : 1);
\r
667 FXJSE_Value_Release(propertyValue);
\r
668 FXJSE_Value_Release(jsObjectValue);
\r
669 FXJSE_Value_Release(newPropertyValue);
\r
671 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
673 } else if(FXJSE_Value_IsObject(argValue)) {
\r
674 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
675 GetObjectDefaultValue(argValue, newPropertyValue);
\r
676 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
679 FXJSE_Value_Release(newPropertyValue);
\r
683 FXJSE_Value_Release(argValue);
\r
686 FXJSE_Value_SetInteger(args.GetReturnValue(), (FX_INT32)uCount);
\r
688 void CXFA_FM2JSContext::Floor(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
690 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
691 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
692 if(args.GetLength() == 1) {
\r
693 FXJSE_HVALUE argValue = GetSimpleHValue(hThis, args, 0);
\r
694 if (HValueIsNull(hThis, argValue)) {
\r
695 FXJSE_Value_SetNull(args.GetReturnValue());
\r
697 FXJSE_Value_SetFloat(args.GetReturnValue(), FXSYS_floor(HValueToFloat(hThis, argValue)));
\r
699 FXJSE_Value_Release(argValue);
\r
701 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Floor"));
\r
704 void CXFA_FM2JSContext::Max(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
706 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
707 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
708 FX_INT32 argc = args.GetLength();
\r
709 FX_UINT32 uCount = 0;
\r
710 FX_DOUBLE dMaxValue = 0.0;
\r
711 FXJSE_HVALUE argValue = 0;
\r
712 for(FX_INT32 i = 0; i < argc; i++) {
\r
713 argValue = args.GetValue(i);
\r
714 if(FXJSE_Value_IsNull(argValue)) {
\r
715 FXJSE_Value_Release(argValue);
\r
717 } else if(FXJSE_Value_IsArray(argValue)) {
\r
718 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
719 FXJSE_Value_GetObjectProp(argValue, FX_BSTRC("length"), lengthValue);
\r
720 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
721 FXJSE_Value_Release(lengthValue);
\r
723 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
724 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
725 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
726 FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue);
\r
727 FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue);
\r
728 if(FXJSE_Value_IsNull(propertyValue)) {
\r
729 for(FX_INT32 i = 2; i < iLength; i++) {
\r
730 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
731 GetObjectDefaultValue(jsObjectValue, newPropertyValue);
\r
732 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
735 dMaxValue = HValueToDouble(hThis, newPropertyValue);
\r
737 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
738 if(dMaxValue < dValue) {
\r
739 dMaxValue = dValue;
\r
745 CFX_ByteString propertyStr;
\r
746 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
747 for(FX_INT32 i = 2; i < iLength; i++) {
\r
748 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
749 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
750 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
753 dMaxValue = HValueToDouble(hThis, newPropertyValue);
\r
755 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
756 if(dMaxValue < dValue) {
\r
757 dMaxValue = dValue;
\r
763 FXJSE_Value_Release(propertyValue);
\r
764 FXJSE_Value_Release(jsObjectValue);
\r
765 FXJSE_Value_Release(newPropertyValue);
\r
767 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
769 } else if(FXJSE_Value_IsObject(argValue)) {
\r
770 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
771 GetObjectDefaultValue(argValue, newPropertyValue);
\r
772 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
775 dMaxValue = HValueToDouble(hThis, newPropertyValue);
\r
777 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
778 if(dMaxValue < dValue) {
\r
779 dMaxValue = dValue;
\r
783 FXJSE_Value_Release(newPropertyValue);
\r
787 dMaxValue = HValueToDouble(hThis, argValue);
\r
789 FX_DOUBLE dValue = HValueToDouble(hThis, argValue);
\r
790 if(dMaxValue < dValue) {
\r
791 dMaxValue = dValue;
\r
795 FXJSE_Value_Release(argValue);
\r
799 FXJSE_Value_SetDouble(args.GetReturnValue(), dMaxValue);
\r
801 FXJSE_Value_SetNull(args.GetReturnValue());
\r
804 void CXFA_FM2JSContext::Min(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
806 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
807 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
808 FX_INT32 argc = args.GetLength();
\r
809 FX_UINT32 uCount = 0;
\r
810 FX_DOUBLE dMinValue = 0.0;
\r
811 FXJSE_HVALUE argValue = 0;
\r
812 for(FX_INT32 i = 0; i < argc; i++) {
\r
813 argValue = args.GetValue(i);
\r
814 if(FXJSE_Value_IsNull(argValue)) {
\r
815 FXJSE_Value_Release(argValue);
\r
817 } else if(FXJSE_Value_IsArray(argValue)) {
\r
818 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
819 FXJSE_Value_GetObjectProp(argValue, FX_BSTRC("length"), lengthValue);
\r
820 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
821 FXJSE_Value_Release(lengthValue);
\r
823 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
824 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
825 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
826 FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue);
\r
827 FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue);
\r
828 if(FXJSE_Value_IsNull(propertyValue)) {
\r
829 for(FX_INT32 i = 2; i < iLength; i++) {
\r
830 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
831 GetObjectDefaultValue(jsObjectValue, newPropertyValue);
\r
832 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
835 dMinValue = HValueToDouble(hThis, newPropertyValue);
\r
837 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
838 if(dMinValue > dValue) {
\r
839 dMinValue = dValue;
\r
845 CFX_ByteString propertyStr;
\r
846 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
847 for(FX_INT32 i = 2; i < iLength; i++) {
\r
848 FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue);
\r
849 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
850 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
853 dMinValue = HValueToDouble(hThis, newPropertyValue);
\r
855 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
856 if(dMinValue > dValue) {
\r
857 dMinValue = dValue;
\r
863 FXJSE_Value_Release(propertyValue);
\r
864 FXJSE_Value_Release(jsObjectValue);
\r
865 FXJSE_Value_Release(newPropertyValue);
\r
867 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
869 } else if(FXJSE_Value_IsObject(argValue)) {
\r
870 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
871 GetObjectDefaultValue(argValue, newPropertyValue);
\r
872 if(!FXJSE_Value_IsNull(newPropertyValue)) {
\r
875 dMinValue = HValueToDouble(hThis, newPropertyValue);
\r
877 FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue);
\r
878 if(dMinValue > dValue) {
\r
879 dMinValue = dValue;
\r
883 FXJSE_Value_Release(newPropertyValue);
\r
887 dMinValue = HValueToDouble(hThis, argValue);
\r
889 FX_DOUBLE dValue = HValueToDouble(hThis, argValue);
\r
890 if(dMinValue > dValue) {
\r
891 dMinValue = dValue;
\r
895 FXJSE_Value_Release(argValue);
\r
899 FXJSE_Value_SetDouble(args.GetReturnValue(), dMinValue);
\r
901 FXJSE_Value_SetNull(args.GetReturnValue());
\r
904 void CXFA_FM2JSContext::Mod(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
906 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
907 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
908 if(args.GetLength() == 2) {
\r
909 FXJSE_HVALUE argOne = args.GetValue(0);
\r
910 FXJSE_HVALUE argTwo = args.GetValue(1);
\r
911 if(FXJSE_Value_IsNull(argOne) || FXJSE_Value_IsNull(argTwo)) {
\r
912 FXJSE_Value_SetNull(args.GetReturnValue());
\r
914 FX_DOUBLE dDividend = 0.0;
\r
915 FX_DOUBLE dDividor = 0.0;
\r
916 if(FXJSE_Value_IsArray(argOne)) {
\r
917 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
918 FXJSE_Value_GetObjectProp(argOne, FX_BSTRC("length"), lengthValue);
\r
919 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
920 FXJSE_Value_Release(lengthValue);
\r
922 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
923 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
924 FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue);
\r
925 FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue);
\r
926 if(FXJSE_Value_IsNull(propertyValue)) {
\r
927 dDividend = HValueToDouble(hThis, jsObjectValue);
\r
929 CFX_ByteString propertyStr;
\r
930 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
931 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
932 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
933 dDividend = HValueToDouble(hThis, newPropertyValue);
\r
934 FXJSE_Value_Release(newPropertyValue);
\r
936 FXJSE_Value_Release(propertyValue);
\r
937 FXJSE_Value_Release(jsObjectValue);
\r
939 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
942 dDividend = HValueToDouble(hThis, argOne);
\r
944 if(FXJSE_Value_IsArray(argTwo)) {
\r
945 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
946 FXJSE_Value_GetObjectProp(argTwo, FX_BSTRC("length"), lengthValue);
\r
947 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
948 FXJSE_Value_Release(lengthValue);
\r
950 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
951 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
952 FXJSE_Value_GetObjectPropByIdx(argTwo, 1, propertyValue);
\r
953 FXJSE_Value_GetObjectPropByIdx(argTwo, 2, jsObjectValue);
\r
954 if(FXJSE_Value_IsNull(propertyValue)) {
\r
955 dDividor = HValueToDouble(hThis, jsObjectValue);
\r
957 CFX_ByteString propertyStr;
\r
958 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
959 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
960 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
961 dDividor = HValueToDouble(hThis, newPropertyValue);
\r
962 FXJSE_Value_Release(newPropertyValue);
\r
964 FXJSE_Value_Release(propertyValue);
\r
965 FXJSE_Value_Release(jsObjectValue);
\r
967 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
970 dDividor = HValueToDouble(hThis, argTwo);
\r
973 FXJSE_Value_SetDouble(args.GetReturnValue(), dDividend - dDividor * (FX_INT32)(dDividend / dDividor));
\r
975 pContext->ThrowScriptErrorMessage(XFA_IDS_DIVIDE_ZERO);
\r
978 FXJSE_Value_Release(argOne);
\r
979 FXJSE_Value_Release(argTwo);
\r
981 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Mod"));
\r
984 void CXFA_FM2JSContext::Round(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
986 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
987 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
988 FX_INT32 argc = args.GetLength();
\r
989 FX_UINT8 uPrecision = 0;
\r
991 FXJSE_HVALUE argOne = args.GetValue(0);
\r
992 if(FXJSE_Value_IsNull(argOne)) {
\r
993 FXJSE_Value_SetNull(args.GetReturnValue());
\r
995 FX_DOUBLE dValue = 0.0;
\r
996 if(FXJSE_Value_IsArray(argOne)) {
\r
997 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
998 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
999 FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue);
\r
1000 FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue);
\r
1001 if(FXJSE_Value_IsNull(propertyValue)) {
\r
1002 dValue = HValueToDouble(hThis, jsObjectValue);
\r
1004 CFX_ByteString propertyStr;
\r
1005 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
1006 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
1007 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
1008 dValue = HValueToDouble(hThis, newPropertyValue);
\r
1009 FXJSE_Value_Release(newPropertyValue);
\r
1011 FXJSE_Value_Release(propertyValue);
\r
1012 FXJSE_Value_Release(jsObjectValue);
\r
1014 dValue = HValueToDouble(hThis, argOne);
\r
1016 CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision);
\r
1017 CFX_WideString wsValue = decimalValue;
\r
1018 FXJSE_Value_SetUTF8String(args.GetReturnValue(), wsValue.UTF8Encode());
\r
1020 FXJSE_Value_Release(argOne);
\r
1021 } else if(argc == 2) {
\r
1022 FXJSE_HVALUE argOne = args.GetValue(0);
\r
1023 FXJSE_HVALUE argTwo = args.GetValue(1);
\r
1024 if(FXJSE_Value_IsNull(argOne) || FXJSE_Value_IsNull(argTwo)) {
\r
1025 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1027 FX_DOUBLE dValue = 0.0;
\r
1028 if(FXJSE_Value_IsArray(argOne)) {
\r
1029 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
1030 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
1031 FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue);
\r
1032 FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue);
\r
1033 if(FXJSE_Value_IsNull(propertyValue)) {
\r
1034 dValue = HValueToDouble(hThis, jsObjectValue);
\r
1036 CFX_ByteString propertyStr;
\r
1037 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
1038 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
1039 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
1040 dValue = HValueToDouble(hThis, newPropertyValue);
\r
1041 FXJSE_Value_Release(newPropertyValue);
\r
1043 FXJSE_Value_Release(propertyValue);
\r
1044 FXJSE_Value_Release(jsObjectValue);
\r
1046 dValue = HValueToDouble(hThis, argOne);
\r
1048 FX_DOUBLE dPrecision = 0.0;
\r
1049 if(FXJSE_Value_IsArray(argTwo)) {
\r
1050 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
1051 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
1052 FXJSE_Value_GetObjectPropByIdx(argTwo, 1, propertyValue);
\r
1053 FXJSE_Value_GetObjectPropByIdx(argTwo, 2, jsObjectValue);
\r
1054 if(FXJSE_Value_IsNull(propertyValue)) {
\r
1055 dPrecision = HValueToDouble(hThis, jsObjectValue);
\r
1057 CFX_ByteString propertyStr;
\r
1058 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
1059 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
1060 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
1061 dPrecision = HValueToDouble(hThis, newPropertyValue);
\r
1062 FXJSE_Value_Release(newPropertyValue);
\r
1064 FXJSE_Value_Release(propertyValue);
\r
1065 FXJSE_Value_Release(jsObjectValue);
\r
1067 dPrecision = HValueToDouble(hThis, argTwo);
\r
1069 if(dPrecision < 0) {
\r
1071 } else if(dPrecision > 12.0) {
\r
1074 uPrecision = (FX_UINT8)dPrecision;
\r
1076 CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision);
\r
1077 CFX_WideString wsValue = decimalValue;
\r
1078 FXJSE_Value_SetUTF8String(args.GetReturnValue(), wsValue.UTF8Encode());
\r
1080 FXJSE_Value_Release(argOne);
\r
1081 FXJSE_Value_Release(argTwo);
\r
1083 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Round"));
\r
1086 void CXFA_FM2JSContext::Sum(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1088 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1089 FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime();
\r
1090 FX_INT32 argc = args.GetLength();
\r
1091 FX_UINT32 uCount = 0;
\r
1092 FX_DOUBLE dSum = 0.0;
\r
1094 FXJSE_HVALUE argValue = 0;
\r
1095 for(FX_INT32 i = 0; i < argc; i++) {
\r
1096 argValue = args.GetValue(i);
\r
1097 if(FXJSE_Value_IsNull(argValue)) {
\r
1098 FXJSE_Value_Release(argValue);
\r
1100 } else if(FXJSE_Value_IsArray(argValue)) {
\r
1101 FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime);
\r
1102 FXJSE_Value_GetObjectProp(argValue, FX_BSTRC("length"), lengthValue);
\r
1103 FX_INT32 iLength = FXJSE_Value_ToInteger(lengthValue);
\r
1104 FXJSE_Value_Release(lengthValue);
\r
1106 FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime);
\r
1107 FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue);
\r
1108 FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime);
\r
1109 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
1110 if(FXJSE_Value_IsNull(propertyValue)) {
\r
1111 for(FX_INT32 j = 2; j < iLength; j++) {
\r
1112 FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue);
\r
1113 GetObjectDefaultValue(jsObjectValue, newPropertyValue);
\r
1114 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
1115 dSum += HValueToDouble(hThis, jsObjectValue);
\r
1120 CFX_ByteString propertyStr;
\r
1121 FXJSE_Value_ToUTF8String(propertyValue, propertyStr);
\r
1122 for(FX_INT32 j = 2; j < iLength; j++) {
\r
1123 FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue);
\r
1124 FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue);
\r
1125 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
1126 dSum += HValueToDouble(hThis, newPropertyValue);
\r
1131 FXJSE_Value_Release(newPropertyValue);
\r
1132 FXJSE_Value_Release(jsObjectValue);
\r
1133 FXJSE_Value_Release(propertyValue);
\r
1135 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
1137 } else if (FXJSE_Value_IsObject(argValue)) {
\r
1138 FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime);
\r
1139 GetObjectDefaultValue(argValue, newPropertyValue);
\r
1140 if (!FXJSE_Value_IsNull(newPropertyValue)) {
\r
1141 dSum += HValueToDouble(hThis, argValue);
\r
1144 FXJSE_Value_Release(newPropertyValue);
\r
1146 dSum += HValueToDouble(hThis, argValue);
\r
1149 FXJSE_Value_Release(argValue);
\r
1154 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1156 FXJSE_Value_SetDouble(args.GetReturnValue(), dSum);
\r
1159 void CXFA_FM2JSContext::Date(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1161 if (args.GetLength() == 0) {
\r
1162 struct tm *pTmStruct = 0;
\r
1163 time_t currentTime;
\r
1164 time(¤tTime);
\r
1165 pTmStruct = gmtime(¤tTime);
\r
1166 CFX_ByteString bufferYear;
\r
1167 CFX_ByteString bufferMon;
\r
1168 CFX_ByteString bufferDay;
\r
1169 bufferYear.Format("%d", pTmStruct->tm_year + 1900);
\r
1170 bufferMon.Format("%02d", pTmStruct->tm_mon + 1);
\r
1171 bufferDay.Format("%02d", pTmStruct->tm_mday);
\r
1172 CFX_ByteString bufferCurrent = bufferYear + bufferMon + bufferDay;
\r
1173 FX_INT32 dDays = DateString2Num(bufferCurrent);
\r
1174 FXJSE_Value_SetInteger(args.GetReturnValue(), dDays);
\r
1176 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1177 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Date"));
\r
1180 void CXFA_FM2JSContext::Date2Num(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1182 FX_INT32 argc = args.GetLength();
\r
1183 if ((argc > 0) && (argc < 4)) {
\r
1184 FX_BOOL bFlags = FALSE;
\r
1185 CFX_ByteString dateString;
\r
1186 CFX_ByteString formatString;
\r
1187 CFX_ByteString localString;
\r
1188 FXJSE_HVALUE dateValue = GetSimpleHValue(hThis, args, 0);
\r
1189 FXJSE_HVALUE formatValue = 0;
\r
1190 FXJSE_HVALUE localValue = 0;
\r
1191 if(HValueIsNull(hThis, dateValue)) {
\r
1194 HValueToUTF8String(dateValue, dateString);
\r
1197 formatValue = GetSimpleHValue(hThis, args, 1);
\r
1198 if (HValueIsNull(hThis, formatValue)) {
\r
1201 HValueToUTF8String(formatValue, formatString);
\r
1205 localValue = GetSimpleHValue(hThis, args, 2);
\r
1206 if (HValueIsNull(hThis, localValue)) {
\r
1209 HValueToUTF8String(localValue, localString);
\r
1213 CFX_ByteString szIsoDateString;
\r
1214 FX_BOOL bRet = Local2IsoDate(hThis, dateString, formatString, localString, szIsoDateString);
\r
1216 FXJSE_Value_SetInteger(args.GetReturnValue(), DateString2Num(szIsoDateString));
\r
1218 FXJSE_Value_SetInteger(args.GetReturnValue(), 0);
\r
1221 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1223 FXJSE_Value_Release(dateValue);
\r
1225 FXJSE_Value_Release(formatValue);
\r
1227 FXJSE_Value_Release(localValue);
\r
1231 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1232 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Date2Num"));
\r
1235 void CXFA_FM2JSContext::DateFmt(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1237 FX_INT32 argc = args.GetLength();
\r
1239 FX_BOOL bFlags = FALSE;
\r
1240 FX_INT32 iStyle = 0;
\r
1241 CFX_ByteString szLocal;
\r
1242 FXJSE_HVALUE argStyle = 0;
\r
1243 FXJSE_HVALUE argLocal = 0;
\r
1245 argStyle = GetSimpleHValue(hThis, args, 0);
\r
1246 if (FXJSE_Value_IsNull(argStyle)) {
\r
1249 iStyle = (FX_INT32)HValueToFloat(hThis, argStyle);
\r
1250 if (iStyle > 4 || iStyle < 0) {
\r
1255 argLocal = GetSimpleHValue(hThis, args, 1);
\r
1256 if (FXJSE_Value_IsNull(argLocal)) {
\r
1259 HValueToUTF8String(argLocal, szLocal);
\r
1263 CFX_ByteString formatStr;
\r
1264 GetStandardDateFormat(hThis, iStyle, szLocal, formatStr);
\r
1265 if (formatStr.IsEmpty()) {
\r
1266 formatStr = FX_BSTRC("");
\r
1268 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr);
\r
1270 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1273 FXJSE_Value_Release(argStyle);
\r
1275 FXJSE_Value_Release(argLocal);
\r
1279 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1280 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Date2Num"));
\r
1283 void CXFA_FM2JSContext::IsoDate2Num(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1285 if(args.GetLength() == 1) {
\r
1286 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
1287 if(FXJSE_Value_IsNull(argOne)) {
\r
1288 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1290 CFX_ByteString szArgString;
\r
1291 HValueToUTF8String(argOne, szArgString);
\r
1292 FX_INT32 dDays = DateString2Num(szArgString);
\r
1293 FXJSE_Value_SetInteger(args.GetReturnValue(), (FX_INT32)dDays);
\r
1295 FXJSE_Value_Release(argOne);
\r
1297 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1298 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"IsoDate2Num"));
\r
1301 void CXFA_FM2JSContext::IsoTime2Num(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1303 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1304 if(args.GetLength() == 1) {
\r
1305 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
1306 if(HValueIsNull(hThis, argOne)) {
\r
1307 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1309 CXFA_Document *pDoc = pContext->GetDocument();
\r
1310 FXSYS_assert(pDoc);
\r
1311 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
1312 CFX_ByteString szArgString;
\r
1313 HValueToUTF8String(argOne, szArgString);
\r
1314 szArgString = szArgString.Mid(szArgString.Find('T', 0) + 1);
\r
1315 if (szArgString.IsEmpty()) {
\r
1316 FXJSE_Value_SetInteger(args.GetReturnValue(), 0);
\r
1317 FXJSE_Value_Release(argOne);
\r
1320 CXFA_LocaleValue timeValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szArgString, szArgString.GetLength()), (CXFA_LocaleMgr*)pMgr);
\r
1321 if (timeValue.IsValid()) {
\r
1322 CFX_Unitime uniTime = timeValue.GetTime();
\r
1323 FX_INT32 hour = uniTime.GetHour();
\r
1324 FX_INT32 min = uniTime.GetMinute();
\r
1325 FX_INT32 second = uniTime.GetSecond();
\r
1326 FX_INT32 milSecond = uniTime.GetMillisecond();
\r
1327 IFX_Locale* pDefLocale = pMgr->GetDefLocale();
\r
1328 FXSYS_assert(pDefLocale);
\r
1329 FX_TIMEZONE tzLocale;
\r
1330 pDefLocale->GetTimeZone(tzLocale);
\r
1331 FX_INT32 mins = hour * 60 + min;
\r
1332 mins -= (tzLocale.tzHour * 60);
\r
1333 while (mins > 1440) {
\r
1336 while (mins < 0) {
\r
1341 FX_INT32 iResult = hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1;
\r
1342 FXJSE_Value_SetInteger(args.GetReturnValue(), iResult);
\r
1344 FXJSE_Value_SetInteger(args.GetReturnValue(), 0);
\r
1347 FXJSE_Value_Release(argOne);
\r
1349 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"IsoTime2Num"));
\r
1352 void CXFA_FM2JSContext::LocalDateFmt(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1354 FX_INT32 argc = args.GetLength();
\r
1356 FX_BOOL bFlags = FALSE;
\r
1357 FX_INT32 iStyle = 0;
\r
1358 CFX_ByteString szLocal;
\r
1359 FXJSE_HVALUE argStyle = 0;
\r
1360 FXJSE_HVALUE argLocal = 0;
\r
1362 argStyle = GetSimpleHValue(hThis, args, 0);
\r
1363 if (FXJSE_Value_IsNull(argStyle)) {
\r
1366 iStyle = (FX_INT32)HValueToFloat(hThis, argStyle);
\r
1367 if (iStyle > 4 || iStyle < 0) {
\r
1372 argLocal = GetSimpleHValue(hThis, args, 1);
\r
1373 if (FXJSE_Value_IsNull(argLocal)) {
\r
1376 HValueToUTF8String(argLocal, szLocal);
\r
1380 CFX_ByteString formatStr;
\r
1381 GetLocalDateFormat(hThis, iStyle, szLocal, formatStr, FALSE);
\r
1382 if (formatStr.IsEmpty()) {
\r
1383 formatStr = FX_BSTRC("");
\r
1385 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr);
\r
1387 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1390 FXJSE_Value_Release(argStyle);
\r
1392 FXJSE_Value_Release(argLocal);
\r
1396 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1397 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"LocalDateFmt"));
\r
1400 void CXFA_FM2JSContext::LocalTimeFmt(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1402 FX_INT32 argc = args.GetLength();
\r
1404 FX_BOOL bFlags = FALSE;
\r
1405 FX_INT32 iStyle = 0;
\r
1406 CFX_ByteString szLocal;
\r
1407 FXJSE_HVALUE argStyle = 0;
\r
1408 FXJSE_HVALUE argLocal = 0;
\r
1410 argStyle = GetSimpleHValue(hThis, args, 0);
\r
1411 if (FXJSE_Value_IsNull(argStyle)) {
\r
1414 iStyle = (FX_INT32)HValueToFloat(hThis, argStyle);
\r
1415 if (iStyle > 4 || iStyle < 0) {
\r
1420 argLocal = GetSimpleHValue(hThis, args, 1);
\r
1421 if (FXJSE_Value_IsNull(argLocal)) {
\r
1424 HValueToUTF8String(argLocal, szLocal);
\r
1428 CFX_ByteString formatStr;
\r
1429 GetLocalTimeFormat(hThis, iStyle, szLocal, formatStr, FALSE);
\r
1430 if (formatStr.IsEmpty()) {
\r
1431 formatStr = FX_BSTRC("");
\r
1433 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr);
\r
1435 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1438 FXJSE_Value_Release(argStyle);
\r
1440 FXJSE_Value_Release(argLocal);
\r
1444 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1445 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"LocalTimeFmt"));
\r
1448 void CXFA_FM2JSContext::Num2Date(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1450 FX_INT32 argc = args.GetLength();
\r
1451 if ((argc > 0) && (argc < 4)) {
\r
1452 FX_BOOL bFlags = FALSE;
\r
1454 CFX_ByteString formatString;
\r
1455 CFX_ByteString localString;
\r
1456 FXJSE_HVALUE dateValue = GetSimpleHValue(hThis, args, 0);
\r
1457 FXJSE_HVALUE formatValue = 0;
\r
1458 FXJSE_HVALUE localValue = 0;
\r
1459 if(HValueIsNull(hThis, dateValue)) {
\r
1462 dDate = (FX_INT32)HValueToFloat(hThis, dateValue);
\r
1463 bFlags = dDate < 1;
\r
1466 formatValue = GetSimpleHValue(hThis, args, 1);
\r
1467 if (HValueIsNull(hThis, formatValue)) {
\r
1470 HValueToUTF8String(formatValue, formatString);
\r
1474 localValue = GetSimpleHValue(hThis, args, 2);
\r
1475 if (HValueIsNull(hThis, localValue)) {
\r
1478 HValueToUTF8String(localValue, localString);
\r
1482 FX_INT32 iYear = 1900;
\r
1483 FX_INT32 iMonth = 1;
\r
1484 FX_INT32 iDay = 1;
\r
1486 while (dDate > 0) {
\r
1487 if (iMonth == 2) {
\r
1488 if ((!((iYear + i) % 4) && ((iYear + i) % 100)) || !((iYear + i) % 400)) {
\r
1491 if (iMonth > 12) {
\r
1498 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1504 if (iMonth > 12) {
\r
1511 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1515 } else if (iMonth < 8) {
\r
1516 if ((iMonth % 2 == 0)) {
\r
1519 if (iMonth > 12) {
\r
1526 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1532 if (iMonth > 12) {
\r
1539 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1544 if (iMonth % 2 != 0) {
\r
1547 if (iMonth > 12) {
\r
1554 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1560 if (iMonth > 12) {
\r
1567 iDay += static_cast<FX_INT32>(dDate) - 1;
\r
1573 CFX_ByteString szIsoDateString;
\r
1574 szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay);
\r
1575 CFX_ByteString szLocalDateString;
\r
1576 FX_BOOL bRet = IsoDate2Local(hThis, szIsoDateString, formatString, localString, szLocalDateString);
\r
1577 if (szLocalDateString.IsEmpty()) {
\r
1578 szLocalDateString = FX_BSTRC("");
\r
1580 FXJSE_Value_SetUTF8String(args.GetReturnValue(), szLocalDateString);
\r
1582 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1584 FXJSE_Value_Release(dateValue);
\r
1586 FXJSE_Value_Release(formatValue);
\r
1588 FXJSE_Value_Release(localValue);
\r
1592 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1593 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Num2Date"));
\r
1596 void CXFA_FM2JSContext::Num2GMTime(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1598 FX_INT32 argc = args.GetLength();
\r
1599 if ((argc > 0) && (argc < 4)) {
\r
1600 FX_BOOL bFlags = FALSE;
\r
1602 CFX_ByteString formatString;
\r
1603 CFX_ByteString localString;
\r
1604 FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0);
\r
1605 FXJSE_HVALUE formatValue = 0;
\r
1606 FXJSE_HVALUE localValue = 0;
\r
1607 if(FXJSE_Value_IsNull(timeValue)) {
\r
1610 iTime = (FX_INT32)HValueToFloat(hThis, timeValue);
\r
1611 if (FXSYS_abs(iTime) < 1.0) {
\r
1616 formatValue = GetSimpleHValue(hThis, args, 1);
\r
1617 if (FXJSE_Value_IsNull(formatValue)) {
\r
1620 HValueToUTF8String(formatValue, formatString);
\r
1624 localValue = GetSimpleHValue(hThis, args, 2);
\r
1625 if (FXJSE_Value_IsNull(localValue)) {
\r
1628 HValueToUTF8String(localValue, localString);
\r
1632 CFX_ByteString szGMTTimeString;
\r
1633 Num2AllTime(hThis, iTime, formatString, localString, TRUE, szGMTTimeString);
\r
1634 if (szGMTTimeString.IsEmpty()) {
\r
1635 szGMTTimeString = FX_BSTRC("");
\r
1637 FXJSE_Value_SetUTF8String(args.GetReturnValue(), szGMTTimeString);
\r
1639 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1641 FXJSE_Value_Release(timeValue);
\r
1643 FXJSE_Value_Release(formatValue);
\r
1645 FXJSE_Value_Release(localValue);
\r
1649 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1650 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Num2GMTime"));
\r
1653 void CXFA_FM2JSContext::Num2Time(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1655 FX_INT32 argc = args.GetLength();
\r
1656 if ((argc > 0) && (argc < 4)) {
\r
1657 FX_BOOL bFlags = FALSE;
\r
1659 CFX_ByteString formatString;
\r
1660 CFX_ByteString localString;
\r
1661 FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0);
\r
1662 FXJSE_HVALUE formatValue = 0;
\r
1663 FXJSE_HVALUE localValue = 0;
\r
1664 if(FXJSE_Value_IsNull(timeValue)) {
\r
1667 fTime = HValueToFloat(hThis, timeValue);
\r
1668 if (FXSYS_fabs(fTime) < 1.0) {
\r
1673 formatValue = GetSimpleHValue(hThis, args, 1);
\r
1674 if (FXJSE_Value_IsNull(formatValue)) {
\r
1677 HValueToUTF8String(formatValue, formatString);
\r
1681 localValue = GetSimpleHValue(hThis, args, 2);
\r
1682 if (FXJSE_Value_IsNull(localValue)) {
\r
1685 HValueToUTF8String(localValue, localString);
\r
1689 CFX_ByteString szLocalTimeString;
\r
1690 Num2AllTime(hThis, (FX_INT32)fTime, formatString, localString, FALSE, szLocalTimeString);
\r
1691 if (szLocalTimeString.IsEmpty()) {
\r
1692 szLocalTimeString = FX_BSTRC("");
\r
1694 FXJSE_Value_SetUTF8String(args.GetReturnValue(), szLocalTimeString);
\r
1696 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1698 FXJSE_Value_Release(timeValue);
\r
1700 FXJSE_Value_Release(formatValue);
\r
1702 FXJSE_Value_Release(localValue);
\r
1706 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1707 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Num2Time"));
\r
1710 void CXFA_FM2JSContext::Time(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1712 if (args.GetLength() == 0) {
\r
1715 struct tm *pGmt = gmtime(&now);
\r
1716 FX_INT32 iGMHour = pGmt->tm_hour;
\r
1717 FX_INT32 iGMMin = pGmt->tm_min;
\r
1718 FX_INT32 iGMSec = pGmt->tm_sec;
\r
1719 FXJSE_Value_SetInteger(args.GetReturnValue(), ((iGMHour * 3600 + iGMMin * 60 + iGMSec) * 1000));
\r
1721 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1722 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Time"));
\r
1725 void CXFA_FM2JSContext::Time2Num(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1727 FX_INT32 argc = args.GetLength();
\r
1728 if ((argc > 0) && (argc < 4)) {
\r
1729 FX_BOOL bFlags = FALSE;
\r
1730 CFX_ByteString timeString;
\r
1731 CFX_ByteString formatString;
\r
1732 CFX_ByteString localString;
\r
1733 FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0);
\r
1734 FXJSE_HVALUE formatValue = 0;
\r
1735 FXJSE_HVALUE localValue = 0;
\r
1736 if(HValueIsNull(hThis, timeValue)) {
\r
1739 HValueToUTF8String(timeValue, timeString);
\r
1742 formatValue = GetSimpleHValue(hThis, args, 1);
\r
1743 if (HValueIsNull(hThis, formatValue)) {
\r
1746 HValueToUTF8String(formatValue, formatString);
\r
1750 localValue = GetSimpleHValue(hThis, args, 2);
\r
1751 if (HValueIsNull(hThis, localValue)) {
\r
1754 HValueToUTF8String(localValue, localString);
\r
1758 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1759 CXFA_Document *pDoc = pContext->GetDocument();
\r
1760 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
1761 IFX_Locale *pLocale = NULL;
\r
1762 if (localString.IsEmpty()) {
\r
1763 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
1764 FXSYS_assert(pThisNode->IsNode());
\r
1765 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
1766 pLocale = widgetData.GetLocal();
\r
1768 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(localString, localString.GetLength()));
\r
1770 CFX_WideString wsFormat;
\r
1771 if (formatString.IsEmpty()) {
\r
1772 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
1774 wsFormat = CFX_WideString::FromUTF8(formatString, formatString.GetLength());
\r
1776 wsFormat = FX_WSTRC(L"time{") + wsFormat;
\r
1777 wsFormat += FX_WSTRC(L"}");
\r
1778 CXFA_LocaleValue timeValue(XFA_VT_TIME, CFX_WideString::FromUTF8(timeString, timeString.GetLength()),
\r
1779 wsFormat, pLocale, (CXFA_LocaleMgr*)pMgr);
\r
1780 if (timeValue.IsValid()) {
\r
1781 CFX_Unitime uniTime = timeValue.GetTime();
\r
1782 FX_INT32 hour = uniTime.GetHour();
\r
1783 FX_INT32 min = uniTime.GetMinute();
\r
1784 FX_INT32 second = uniTime.GetSecond();
\r
1785 FX_INT32 milSecond = uniTime.GetMillisecond();
\r
1786 FX_INT32 mins = hour * 60 + min;
\r
1787 IXFA_TimeZoneProvider* pProvider = IXFA_TimeZoneProvider::Get();
\r
1788 if (pProvider != NULL) {
\r
1790 pProvider->GetTimeZone(tz);
\r
1791 mins -= (tz.tzHour * 60);
\r
1792 while (mins > 1440) {
\r
1795 while (mins < 0) {
\r
1801 FX_INT32 iResult = hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1;
\r
1802 FXJSE_Value_SetInteger(args.GetReturnValue(), iResult);
\r
1804 FXJSE_Value_SetInteger(args.GetReturnValue(), 0);
\r
1807 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1809 FXJSE_Value_Release(timeValue);
\r
1811 FXJSE_Value_Release(formatValue);
\r
1813 FXJSE_Value_Release(localValue);
\r
1817 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1818 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Time2Num"));
\r
1821 void CXFA_FM2JSContext::TimeFmt(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
1823 FX_INT32 argc = args.GetLength();
\r
1825 FX_BOOL bFlags = FALSE;
\r
1826 FX_INT32 iStyle = 0;
\r
1827 CFX_ByteString szLocal;
\r
1828 FXJSE_HVALUE argStyle = 0;
\r
1829 FXJSE_HVALUE argLocal = 0;
\r
1831 argStyle = GetSimpleHValue(hThis, args, 0);
\r
1832 if (FXJSE_Value_IsNull(argStyle)) {
\r
1835 iStyle = (FX_INT32)HValueToFloat(hThis, argStyle);
\r
1836 if (iStyle > 4 || iStyle < 0) {
\r
1841 argLocal = GetSimpleHValue(hThis, args, 1);
\r
1842 if (FXJSE_Value_IsNull(argLocal)) {
\r
1845 HValueToUTF8String(argLocal, szLocal);
\r
1849 CFX_ByteString formatStr;
\r
1850 GetStandardTimeFormat(hThis, iStyle, szLocal, formatStr);
\r
1851 if (formatStr.IsEmpty()) {
\r
1852 formatStr = FX_BSTRC("");
\r
1854 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr);
\r
1856 FXJSE_Value_SetNull(args.GetReturnValue());
\r
1859 FXJSE_Value_Release(argStyle);
\r
1861 FXJSE_Value_Release(argLocal);
\r
1865 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
1866 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"TimeFmt"));
\r
1869 FX_BOOL CXFA_FM2JSContext::IsIsoDateFormat(FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iStyle, FX_INT32 &iYear, FX_INT32 &iMonth, FX_INT32 &iDay)
\r
1874 FX_BOOL iRet = FALSE;
\r
1875 if (iLength < 4) {
\r
1878 FX_CHAR strYear[5];
\r
1879 strYear[4] = '\0';
\r
1880 for (FX_INT32 i = 0; i < 4; ++i) {
\r
1881 if (*(pData + i) <= '9' && *(pData + i) >= '0') {
\r
1882 strYear[i] = *(pData + i);
\r
1887 iYear = FXSYS_atoi(strYear);
\r
1889 if (iLength > 4) {
\r
1890 if (*(pData + 4) == '-') {
\r
1899 FX_CHAR strTemp[3];
\r
1900 strTemp[2] = '\0';
\r
1901 FX_INT32 iPosOff = 0;
\r
1902 if (iStyle == 0) {
\r
1904 if (iLength == 4) {
\r
1910 if (iLength == 4) {
\r
1915 if ((*(pData + iPosOff) > '9' || *(pData + iPosOff) < '0') || (*(pData + iPosOff + 1) > '9' || *(pData + iPosOff + 1) < '0')) {
\r
1918 strTemp[0] = *(pData + iPosOff);
\r
1919 strTemp[1] = *(pData + iPosOff + 1);
\r
1920 iMonth = FXSYS_atoi(strTemp);
\r
1921 if (iMonth > 12 || iMonth < 1) {
\r
1924 if (iStyle == 0) {
\r
1926 if (iLength == 6) {
\r
1932 if (iLength == 7) {
\r
1937 if ((*(pData + iPosOff) > '9' || *(pData + iPosOff) < '0') || (*(pData + iPosOff + 1) > '9' || *(pData + iPosOff + 1) < '0')) {
\r
1940 strTemp[0] = *(pData + iPosOff);
\r
1941 strTemp[1] = *(pData + iPosOff + 1);
\r
1942 iDay = FXSYS_atoi(strTemp);
\r
1943 if (iPosOff + 2 < iLength) {
\r
1946 if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) {
\r
1947 if (iMonth == 2) {
\r
1953 if (iDay > (iMonth % 2 == 0 ? 30 : 31)) {
\r
1957 if (iDay > (iMonth % 2 == 0 ? 31 : 30)) {
\r
1963 if (iMonth == 2) {
\r
1969 if (iDay > (iMonth % 2 == 0 ? 30 : 31)) {
\r
1973 if (iDay > (iMonth % 2 == 0 ? 31 : 30)) {
\r
1982 FX_BOOL CXFA_FM2JSContext::IsIsoTimeFormat(FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iHour, FX_INT32 &iMinute, FX_INT32 &iSecond, FX_INT32 &iMilliSecond, FX_INT32 &iZoneHour, FX_INT32 &iZoneMinute)
\r
1993 FX_INT32 iRet = FALSE;
\r
1994 FX_CHAR strTemp[3];
\r
1995 strTemp[2] = '\0';
\r
1996 FX_INT32 iIndex = 0;
\r
1997 FX_INT32 iZone = 0;
\r
1998 FX_INT32 i = iIndex;
\r
1999 while (i < iLength) {
\r
2000 if ((*(pData + i) > '9' || *(pData + i) < '0') && *(pData + i) != ':' ) {
\r
2006 if (i == iLength) {
\r
2009 FX_INT32 iPos = 0;
\r
2010 while (iIndex < iZone) {
\r
2011 if (iIndex >= iZone) {
\r
2014 if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') {
\r
2017 strTemp[0] = *(pData + iIndex);
\r
2018 if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') {
\r
2021 strTemp[1] = *(pData + iIndex + 1);
\r
2022 if (FXSYS_atoi(strTemp) > 60) {
\r
2025 if (*(pData + 2) == ':') {
\r
2027 iHour = FXSYS_atoi(strTemp);
\r
2029 } else if (iPos == 1) {
\r
2030 iMinute = FXSYS_atoi(strTemp);
\r
2033 iSecond = FXSYS_atoi(strTemp);
\r
2038 iHour = FXSYS_atoi(strTemp);
\r
2040 } else if (iPos == 1) {
\r
2041 iMinute = FXSYS_atoi(strTemp);
\r
2043 } else if (iPos == 2) {
\r
2044 iSecond = FXSYS_atoi(strTemp);
\r
2050 if (*(pData + iIndex) == '.') {
\r
2052 FX_CHAR strTemp[4];
\r
2053 strTemp[3] = '\0';
\r
2054 if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') {
\r
2057 strTemp[0] = *(pData + iIndex);
\r
2058 if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') {
\r
2061 strTemp[1] = *(pData + iIndex + 1);
\r
2062 if (*(pData + iIndex + 2) > '9' || *(pData + iIndex + 2) < '0') {
\r
2065 strTemp[2] = *(pData + iIndex + 2);
\r
2066 iMilliSecond = FXSYS_atoi(strTemp);
\r
2067 if (iMilliSecond > 100) {
\r
2073 FX_INT32 iSign = 1;
\r
2074 if (*(pData + iIndex) == 'z' || *(pData + iIndex) == 'Z') {
\r
2077 } else if (*(pData + iIndex) == '+') {
\r
2079 } else if (*(pData + iIndex) == '-') {
\r
2084 while (iIndex < iLength) {
\r
2085 if (iIndex >= iLength) {
\r
2088 if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') {
\r
2091 strTemp[0] = *(pData + iIndex);
\r
2092 if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') {
\r
2095 strTemp[1] = *(pData + iIndex + 1);
\r
2096 if (FXSYS_atoi(strTemp) > 60) {
\r
2099 if (*(pData + 2) == ':') {
\r
2101 iZoneHour = FXSYS_atoi(strTemp);
\r
2102 } else if (iPos == 1) {
\r
2103 iZoneMinute = FXSYS_atoi(strTemp);
\r
2108 iZoneHour = FXSYS_atoi(strTemp);
\r
2110 } else if (iPos == 1) {
\r
2111 iZoneMinute = FXSYS_atoi(strTemp);
\r
2117 if (iIndex < iLength) {
\r
2120 iZoneHour *= iSign;
\r
2124 FX_BOOL CXFA_FM2JSContext::IsIsoDateTimeFormat(FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iYear, FX_INT32 &iMonth, FX_INT32 &iDay, FX_INT32 &iHour, FX_INT32 &iMinute, FX_INT32 &iSecond, FX_INT32 &iMillionSecond, FX_INT32 &iZoneHour, FX_INT32 &iZoneMinute)
\r
2135 FX_INT32 iRet = FALSE;
\r
2136 FX_INT32 iIndex = 0;
\r
2137 while (*(pData + iIndex) != 'T' && *(pData + iIndex) != 't') {
\r
2138 if (iIndex >= iLength) {
\r
2143 if (iIndex != 8 && iIndex != 10) {
\r
2146 FX_INT32 iStyle = -1;
\r
2147 iRet = IsIsoDateFormat(pData, iIndex , iStyle, iYear, iMonth, iDay);
\r
2151 if (*(pData + iIndex) != 'T' && *(pData + iIndex) != 't') {
\r
2155 if (((iLength - iIndex > 13) && (iLength - iIndex < 6)) && (iLength - iIndex != 15)) {
\r
2158 iRet = IsIsoTimeFormat(pData + iIndex, iLength - iIndex, iHour, iMinute, iSecond, iMillionSecond, iZoneHour, iZoneMinute);
\r
2165 FX_BOOL CXFA_FM2JSContext::Local2IsoDate(FXJSE_HOBJECT hThis, FX_BSTR szDate, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strIsoDate)
\r
2167 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2168 CXFA_Document *pDoc = pContext->GetDocument();
\r
2172 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2173 IFX_Locale *pLocale = NULL;
\r
2174 if (szLocale.IsEmpty()) {
\r
2175 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2176 FXSYS_assert(pThisNode->IsNode());
\r
2177 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
2178 pLocale = widgetData.GetLocal();
\r
2180 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength()));
\r
2185 CFX_WideString wsFormat;
\r
2186 if (szFormat.IsEmpty()) {
\r
2187 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
2189 wsFormat = CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength());
\r
2191 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate.GetCStr(), szDate.GetLength()),
\r
2192 wsFormat, pLocale, (CXFA_LocaleMgr*)pMgr);
\r
2193 CFX_Unitime dt = widgetValue.GetDate();
\r
2194 strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay());
\r
2197 FX_BOOL CXFA_FM2JSContext::Local2IsoTime(FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strIsoTime)
\r
2199 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2200 CXFA_Document *pDoc = pContext->GetDocument();
\r
2204 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2205 IFX_Locale *pLocale = NULL;
\r
2206 if (szLocale.IsEmpty()) {
\r
2207 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2208 FXSYS_assert(pThisNode->IsNode());
\r
2209 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
2210 pLocale = widgetData.GetLocal();
\r
2212 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength()));
\r
2217 CFX_WideString wsFormat;
\r
2218 if (szFormat.IsEmpty()) {
\r
2219 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
2221 wsFormat = CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength());
\r
2223 wsFormat = FX_WSTRC(L"time{") + wsFormat;
\r
2224 wsFormat += FX_WSTRC(L"}");
\r
2225 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()),
\r
2226 wsFormat, pLocale, (CXFA_LocaleMgr*)pMgr);
\r
2227 CFX_Unitime utime = widgetValue.GetTime();
\r
2228 strIsoTime.Format("%02d:%02d:%02d.%03d", utime.GetHour(), utime.GetMinute(), utime.GetSecond(), utime.GetMillisecond());
\r
2231 FX_BOOL CXFA_FM2JSContext::IsoDate2Local(FXJSE_HOBJECT hThis, FX_BSTR szDate, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strLocalDate)
\r
2233 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2234 CXFA_Document *pDoc = pContext->GetDocument();
\r
2238 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2239 IFX_Locale *pLocale = NULL;
\r
2240 if (szLocale.IsEmpty()) {
\r
2241 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2242 FXSYS_assert(pThisNode->IsNode());
\r
2243 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
2244 pLocale = widgetData.GetLocal();
\r
2246 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength()));
\r
2251 CFX_WideString wsFormat;
\r
2252 if (szFormat.IsEmpty()) {
\r
2253 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
2255 wsFormat = CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength());
\r
2257 CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate.GetCStr(), szDate.GetLength()), (CXFA_LocaleMgr*)pMgr);
\r
2258 CFX_WideString wsRet;
\r
2259 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, XFA_VALUEPICTURE_Display);
\r
2260 strLocalDate = FX_UTF8Encode(wsRet, wsRet.GetLength());
\r
2263 FX_BOOL CXFA_FM2JSContext::IsoTime2Local(FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strLocalTime)
\r
2265 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2266 CXFA_Document *pDoc = pContext->GetDocument();
\r
2270 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2271 IFX_Locale *pLocale = NULL;
\r
2272 if (szLocale.IsEmpty()) {
\r
2273 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2274 FXSYS_assert(pThisNode->IsNode());
\r
2275 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
2276 pLocale = widgetData.GetLocal();
\r
2278 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength()));
\r
2283 CFX_WideString wsFormat;
\r
2284 if (szFormat.IsEmpty()) {
\r
2285 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
2287 wsFormat = CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength());
\r
2289 wsFormat = FX_WSTRC(L"time{") + wsFormat;
\r
2290 wsFormat += FX_WSTRC(L"}");
\r
2291 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()), (CXFA_LocaleMgr*)pMgr);
\r
2292 CFX_WideString wsRet;
\r
2293 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, XFA_VALUEPICTURE_Display);
\r
2294 strLocalTime = FX_UTF8Encode(wsRet, wsRet.GetLength());
\r
2297 FX_BOOL CXFA_FM2JSContext::GetGMTTime(FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strGMTTime)
\r
2299 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2300 CXFA_Document *pDoc = pContext->GetDocument();
\r
2304 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2305 IFX_Locale *pLocale = NULL;
\r
2306 if (szLocale.IsEmpty()) {
\r
2307 CXFA_Object * pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2308 FXSYS_assert(pThisNode->IsNode());
\r
2309 CXFA_WidgetData widgetData((CXFA_Node *)pThisNode);
\r
2310 pLocale = widgetData.GetLocal();
\r
2312 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength()));
\r
2317 CFX_WideString wsFormat;
\r
2318 if (szFormat.IsEmpty()) {
\r
2319 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat);
\r
2321 wsFormat = CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength());
\r
2323 wsFormat = FX_WSTRC(L"time{") + wsFormat;
\r
2324 wsFormat += FX_WSTRC(L"}");
\r
2325 CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()), (CXFA_LocaleMgr*)pMgr);
\r
2326 CFX_WideString wsRet;
\r
2327 widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, XFA_VALUEPICTURE_Display);
\r
2328 strGMTTime = FX_UTF8Encode(wsRet, wsRet.GetLength());
\r
2331 FX_INT32 CXFA_FM2JSContext::DateString2Num(FX_BSTR szDateString)
\r
2333 FX_BOOL bFlags = FALSE;
\r
2334 FX_INT32 iLength = szDateString.GetLength();
\r
2335 FX_BOOL iRet = FALSE;
\r
2336 FX_INT32 iStyle = -1;
\r
2337 FX_INT32 iYear = 0;
\r
2338 FX_INT32 iMonth = 0;
\r
2339 FX_INT32 iDay = 0;
\r
2340 FX_INT32 iHour = 0;
\r
2341 FX_INT32 iMinute = 0;
\r
2342 FX_INT32 iSecond = 0;
\r
2343 FX_INT32 iMillionSecond = 0;
\r
2344 FX_INT32 iZoneHour = 0;
\r
2345 FX_INT32 iZoneMinute = 0;
\r
2346 if (iLength <= 10) {
\r
2347 iRet = IsIsoDateFormat(szDateString.GetCStr(), iLength, iStyle, iYear, iMonth, iDay);
\r
2349 iRet = IsIsoDateTimeFormat(szDateString.GetCStr(), iLength, iYear, iMonth, iDay, iHour, iMinute, iSecond, iMillionSecond, iZoneHour, iZoneMinute);
\r
2354 FX_FLOAT dDays = 0;
\r
2356 if (iYear < 1900) {
\r
2360 while (iYear - i >= 1900) {
\r
2361 if ((!((iYear - i) % 4) && ((iYear - i) % 100)) || !((iYear - i) % 400)) {
\r
2369 while (i < iMonth) {
\r
2371 if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) {
\r
2376 } else if (i <= 7) {
\r
2392 while (iDay - i > 0) {
\r
2399 return (FX_INT32)dDays;
\r
2402 static FX_BYTE g_sAltTable_Date[] = {
\r
2403 XFA_N, XFA_N, XFA_N, 3, 9, XFA_N, XFA_N, XFA_N,
\r
2404 XFA_N, XFA_N, XFA_N, XFA_N, 2, XFA_N, XFA_N, XFA_N,
\r
2405 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2406 1, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2407 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2408 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2409 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2410 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2412 static FX_BYTE g_sAltTable_Time[] = {
\r
2413 14, XFA_N, XFA_N, 3, 9, XFA_N, XFA_N, 15,
\r
2414 XFA_N, XFA_N, XFA_N, XFA_N, 6, XFA_N, XFA_N, XFA_N,
\r
2415 XFA_N, XFA_N, 7, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2416 1, 17, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2417 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, 15,
\r
2418 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2419 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2420 XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N,
\r
2422 static void XFA_FM_AlternateDateTimeSymbols(CFX_WideString &wsPattern, const CFX_WideString &wsAltSymbols, FX_BYTE *pAltTable)
\r
2424 FX_INT32 nLength = wsPattern.GetLength();
\r
2425 FX_BOOL bInConstRange = FALSE;
\r
2426 FX_BOOL bEscape = FALSE;
\r
2427 FX_INT32 i = 0, n = 0;
\r
2428 while (i < nLength) {
\r
2429 FX_WCHAR wc = wsPattern[i];
\r
2430 if (wc == L'\'') {
\r
2431 bInConstRange = !bInConstRange;
\r
2435 wsPattern.Delete(i);
\r
2438 bEscape = !bEscape;
\r
2441 if (!bInConstRange && (n = wc - L'A') >= 0 && n <= (L'a' - L'A')) {
\r
2442 FX_INT32 nAlt = (FX_INT32)pAltTable[n];
\r
2443 if (nAlt != XFA_N) {
\r
2444 wsPattern.SetAt(i, wsAltSymbols[nAlt]);
\r
2452 void CXFA_FM2JSContext::GetLocalDateFormat(FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard)
\r
2454 FX_LOCALEDATETIMESUBCATEGORY strStyle;
\r
2457 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2460 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short;
\r
2463 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2466 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long;
\r
2469 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full;
\r
2472 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2475 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2476 CXFA_Document *pDoc = pContext->GetDocument();
\r
2480 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2481 IFX_Locale *pLocale = NULL;
\r
2482 if (szLocalStr.IsEmpty()) {
\r
2483 CXFA_Object* pThisNode = pDoc->GetScriptContext()->GetThisObject();
\r
2484 FXSYS_assert(pThisNode->IsNode());
\r
2485 CXFA_WidgetData widgetData((CXFA_Node*)pThisNode);
\r
2486 pLocale = widgetData.GetLocal();
\r
2488 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocalStr.GetCStr(), szLocalStr.GetLength()));
\r
2493 CFX_WideString strRet;
\r
2494 pLocale->GetDatePattern(strStyle, strRet);
\r
2496 CFX_WideString wsSymbols;
\r
2497 pLocale->GetDateTimeSymbols(wsSymbols);
\r
2498 XFA_FM_AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Date);
\r
2500 strFormat = FX_UTF8Encode(strRet, strRet.GetLength());
\r
2502 void CXFA_FM2JSContext::GetLocalTimeFormat(FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard)
\r
2504 FX_LOCALEDATETIMESUBCATEGORY strStyle;
\r
2507 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2510 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short;
\r
2513 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2516 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long;
\r
2519 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full;
\r
2522 strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
\r
2525 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2526 CXFA_Document *pDoc = pContext->GetDocument();
\r
2530 IFX_LocaleMgr *pMgr = (IFX_LocaleMgr *)pDoc->GetLocalMgr();
\r
2531 IFX_Locale *pLocale = NULL;
\r
2532 if (szLocalStr.IsEmpty()) {
\r
2533 CXFA_Object *pThisObject = pDoc->GetScriptContext()->GetThisObject();
\r
2534 FXSYS_assert(pThisObject->IsNode());
\r
2535 CXFA_Node* pThisNode = (CXFA_Node *)pThisObject;
\r
2536 CXFA_WidgetData widgetData(pThisNode);
\r
2537 pLocale = widgetData.GetLocal();
\r
2539 pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocalStr.GetCStr(), szLocalStr.GetLength()));
\r
2544 CFX_WideString strRet;
\r
2545 pLocale->GetTimePattern(strStyle, strRet);
\r
2547 CFX_WideString wsSymbols;
\r
2548 pLocale->GetDateTimeSymbols(wsSymbols);
\r
2549 XFA_FM_AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Time);
\r
2551 strFormat = FX_UTF8Encode(strRet, strRet.GetLength());
\r
2553 void CXFA_FM2JSContext::GetStandardDateFormat(FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat)
\r
2555 GetLocalDateFormat(hThis, iStyle, szLocalStr, strFormat, TRUE);
\r
2557 void CXFA_FM2JSContext::GetStandardTimeFormat(FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat)
\r
2559 GetLocalTimeFormat(hThis, iStyle, szLocalStr, strFormat, TRUE);
\r
2561 void CXFA_FM2JSContext::Num2AllTime(FXJSE_HOBJECT hThis, FX_INT32 iTime, FX_BSTR szFormat, FX_BSTR szLocale, FX_BOOL bGM, CFX_ByteString &strTime)
\r
2563 FX_INT32 iHour = 0;
\r
2564 FX_INT32 iMin = 0;
\r
2565 FX_INT32 iSec = 0;
\r
2566 FX_INT32 iZoneHour = 0;
\r
2567 FX_INT32 iZoneMin = 0;
\r
2568 FX_INT32 iZoneSec = 0;
\r
2569 iHour = static_cast<int>(iTime) / 3600000;
\r
2570 iMin = (static_cast<int>(iTime) - iHour * 3600000) / 60000;
\r
2571 iSec = (static_cast<int>(iTime) - iHour * 3600000 - iMin * 60000) / 1000;
\r
2573 GetLocalTimeZone(iZoneHour, iZoneMin, iZoneSec);
\r
2574 iHour += iZoneHour;
\r
2578 FX_INT32 iRet = 0;
\r
2579 CFX_ByteString strIsoTime;
\r
2580 strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec);
\r
2582 iRet = GetGMTTime(hThis, strIsoTime, szFormat, szLocale, strTime);
\r
2584 iRet = IsoTime2Local(hThis, strIsoTime, szFormat, szLocale, strTime);
\r
2587 strTime = FX_BSTRC("");
\r
2591 void CXFA_FM2JSContext::GetLocalTimeZone(FX_INT32 &iHour, FX_INT32 &iMin, FX_INT32 &iSec)
\r
2595 struct tm *pGmt = gmtime(&now);
\r
2596 FX_INT32 iGMHour = pGmt->tm_hour;
\r
2597 FX_INT32 iGMMin = pGmt->tm_min;
\r
2598 FX_INT32 iGMSec = pGmt->tm_sec;
\r
2599 struct tm *pLocal = localtime(&now);
\r
2600 FX_INT32 iLocalHour = pLocal->tm_hour;
\r
2601 FX_INT32 iLocalMin = pLocal->tm_min;
\r
2602 FX_INT32 iLocalSec = pLocal->tm_sec;
\r
2603 iHour = iLocalHour - iGMHour;
\r
2604 iMin = iLocalMin - iGMMin;
\r
2605 iSec = iLocalSec - iGMSec;
\r
2607 void CXFA_FM2JSContext::Apr(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
2609 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2610 if(args.GetLength() == 3) {
\r
2611 FX_BOOL bFlags = FALSE;
\r
2612 FX_DOUBLE nPrincipal = 0;
\r
2613 FX_DOUBLE nPayment = 0;
\r
2614 FX_DOUBLE nPeriods = 0;
\r
2615 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
2616 FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1);
\r
2617 FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2);
\r
2618 bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || HValueIsNull(hThis, argThree));
\r
2620 FXJSE_Value_SetNull(args.GetReturnValue());
\r
2622 nPrincipal = HValueToDouble(hThis, argOne);
\r
2623 nPayment = HValueToDouble(hThis, argTwo);
\r
2624 nPeriods = HValueToDouble(hThis, argThree);
\r
2625 bFlags = ((nPrincipal <= 0) || (nPayment <= 0) || (nPeriods <= 0));
\r
2627 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
2629 FX_DOUBLE r = 2 * (nPeriods * nPayment - nPrincipal) / (nPeriods * nPrincipal);
\r
2630 FX_DOUBLE nTemp = 1;
\r
2631 for (FX_INT32 i = 0; i < nPeriods; ++i) {
\r
2634 FX_DOUBLE nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal;
\r
2635 while ( (nRet > FINANCIAL_PRECISION || nRet < -FINANCIAL_PRECISION) && (!bFlags) ) {
\r
2636 FX_DOUBLE nDerivative = 0;
\r
2637 nDerivative = ((nTemp + r * nPeriods * (nTemp / (1 + r))) * (nTemp - 1) - (r * nTemp * nPeriods * (nTemp / (1 + r)))) / ((nTemp - 1) * (nTemp - 1));
\r
2638 if (nDerivative == 0) {
\r
2642 r = r - nRet / nDerivative;
\r
2644 for (FX_INT32 i = 0; i < nPeriods; ++i) {
\r
2647 nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal;
\r
2650 FXJSE_Value_SetNull(args.GetReturnValue());
\r
2653 FXJSE_Value_SetDouble(args.GetReturnValue(), r);
\r
2657 FXJSE_Value_Release(argOne);
\r
2658 FXJSE_Value_Release(argTwo);
\r
2659 FXJSE_Value_Release(argThree);
\r
2661 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"Apr"));
\r
2664 void CXFA_FM2JSContext::CTerm(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
2666 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2667 if(args.GetLength() == 3) {
\r
2668 FX_BOOL bFlags = FALSE;
\r
2669 FX_FLOAT nRate = 0;
\r
2670 FX_FLOAT nFutureValue = 0;
\r
2671 FX_FLOAT nInitAmount = 0;
\r
2672 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
2673 FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1);
\r
2674 FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2);
\r
2675 bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || HValueIsNull(hThis, argThree));
\r
2677 FXJSE_Value_SetNull(args.GetReturnValue());
\r
2679 nRate = HValueToFloat(hThis, argOne);
\r
2680 nFutureValue = HValueToFloat(hThis, argTwo);
\r
2681 nInitAmount = HValueToFloat(hThis, argThree);
\r
2682 bFlags = ((nRate <= 0) || (nFutureValue <= 0) || (nInitAmount <= 0));
\r
2684 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
2686 FXJSE_Value_SetFloat(args.GetReturnValue(), FXSYS_log((FX_FLOAT)(nFutureValue / nInitAmount)) / FXSYS_log((FX_FLOAT)(1 + nRate)) );
\r
2689 FXJSE_Value_Release(argOne);
\r
2690 FXJSE_Value_Release(argTwo);
\r
2691 FXJSE_Value_Release(argThree);
\r
2693 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"CTerm"));
\r
2696 void CXFA_FM2JSContext::FV(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
2698 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2699 if(args.GetLength() == 3) {
\r
2700 FX_BOOL bFlags = FALSE;
\r
2701 FX_DOUBLE nAmount = 0;
\r
2702 FX_DOUBLE nRate = 0;
\r
2703 FX_DOUBLE nPeriod = 0;
\r
2704 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
2705 FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1);
\r
2706 FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2);
\r
2707 bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || HValueIsNull(hThis, argThree));
\r
2709 FXJSE_Value_SetNull(args.GetReturnValue());
\r
2711 nAmount = HValueToDouble(hThis, argOne);
\r
2712 nRate = HValueToDouble(hThis, argTwo);
\r
2713 nPeriod = HValueToDouble(hThis, argThree);
\r
2714 bFlags = ((nRate < 0) || (nPeriod <= 0) || (nAmount <= 0));
\r
2716 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
2718 FX_DOUBLE dResult = 0;
\r
2720 dResult = nAmount * nPeriod;
\r
2722 FX_DOUBLE nTemp = 1;
\r
2723 for (int i = 0; i < nPeriod; ++i) {
\r
2724 nTemp *= 1 + nRate;
\r
2726 dResult = nAmount * (nTemp - 1) / nRate;
\r
2728 FXJSE_Value_SetDouble(args.GetReturnValue(), dResult);
\r
2731 FXJSE_Value_Release(argOne);
\r
2732 FXJSE_Value_Release(argTwo);
\r
2733 FXJSE_Value_Release(argThree);
\r
2735 pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"FV"));
\r
2738 void CXFA_FM2JSContext::IPmt(FXJSE_HOBJECT hThis, FX_BSTR szFuncName, CFXJSE_Arguments &args)
\r
2740 CXFA_FM2JSContext* pContext = (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL);
\r
2741 if(args.GetLength() == 5) {
\r
2742 FX_BOOL bFlags = FALSE;
\r
2743 FX_FLOAT nPrincpalAmount = 0;
\r
2744 FX_FLOAT nRate = 0;
\r
2745 FX_FLOAT nPayment = 0;
\r
2746 FX_FLOAT nFirstMonth = 0;
\r
2747 FX_FLOAT nNumberOfMonths = 0;
\r
2748 FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0);
\r
2749 FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1);
\r
2750 FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2);
\r
2751 FXJSE_HVALUE argFour = GetSimpleHValue(hThis, args, 3);
\r
2752 FXJSE_HVALUE argFive = GetSimpleHValue(hThis, args, 4);
\r
2753 bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || HValueIsNull(hThis, argThree) ||
\r
2754 HValueIsNull(hThis, argFour) || HValueIsNull(hThis, argFive));
\r
2756 FXJSE_Value_SetNull(args.GetReturnValue());
\r
2758 nPrincpalAmount = HValueToFloat(hThis, argOne);
\r
2759 nRate = HValueToFloat(hThis, argTwo);
\r
2760 nPayment = HValueToFloat(hThis, argThree);
\r
2761 nFirstMonth = HValueToFloat(hThis, argFour);
\r
2762 nNumberOfMonths = HValueToFloat(hThis, argFive);
\r
2763 bFlags = ((nPrincpalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || (nFirstMonth < 0) || (nNumberOfMonths < 0));
\r
2765 pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
\r
2767 FX_FLOAT fResult = 0;
\r
2768 FX_FLOAT nRateOfMonth = nRate / 12;
\r
2769 FX_INT32 iNums = (FX_INT32)((FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount)) - FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount - nRateOfMonth))) / FXSYS_log10((FX_FLOAT)(1 + nRateOfMonth)));
\r
2770 FX_INT32 iEnd = (FX_INT32)(nFirstMonth + nNumberOfMonths - 1);
\r
2771 if (iEnd > iNums) {
\r
2774 FX_FLOAT nSum = 0;
\r
2775 if (nPayment < nPrincpalAmount * nRateOfMonth) {
\r