OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/fm2js/xfa_expression.h" | 7 #include "xfa/fxfa/fm2js/xfa_expression.h" |
8 | 8 |
9 #include "core/fxcrt/include/fx_basic.h" | 9 #include "core/fxcrt/include/fx_basic.h" |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 const CFX_WideStringC RUNTIMEBLOCKTEMPARRAY = | 13 const CFX_WideStringC RUNTIMEBLOCKTEMPARRAY = |
14 FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array"); | 14 FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array"); |
15 | 15 |
16 const CFX_WideStringC RUNTIMEBLOCKTEMPARRAYINDEX = | 16 const CFX_WideStringC RUNTIMEBLOCKTEMPARRAYINDEX = |
17 FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array_index"); | 17 FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array_index"); |
18 | 18 |
19 } // namespace | 19 } // namespace |
20 | 20 |
21 CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line) | 21 CXFA_FMExpression::CXFA_FMExpression(uint32_t line) |
22 : m_type(XFA_FM_EXPTYPE_UNKNOWN), m_line(line) {} | 22 : m_type(XFA_FM_EXPTYPE_UNKNOWN), m_line(line) {} |
23 | 23 |
24 CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type) | 24 CXFA_FMExpression::CXFA_FMExpression(uint32_t line, XFA_FM_EXPTYPE type) |
25 : m_type(type), m_line(line) {} | 25 : m_type(type), m_line(line) {} |
26 | 26 |
27 void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} | 27 void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
28 | 28 |
29 void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} | 29 void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} |
30 | 30 |
31 CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( | 31 CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( |
32 FX_DWORD line, | 32 uint32_t line, |
33 FX_BOOL isGlobal, | 33 FX_BOOL isGlobal, |
34 const CFX_WideStringC& wsName, | 34 const CFX_WideStringC& wsName, |
35 CFX_WideStringCArray* pArguments, | 35 CFX_WideStringCArray* pArguments, |
36 CFX_PtrArray* pExpressions) | 36 CFX_PtrArray* pExpressions) |
37 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC), | 37 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC), |
38 m_wsName(wsName), | 38 m_wsName(wsName), |
39 m_pArguments(pArguments), | 39 m_pArguments(pArguments), |
40 m_pExpressions(pExpressions), | 40 m_pExpressions(pExpressions), |
41 m_isGlobal(isGlobal) {} | 41 m_isGlobal(isGlobal) {} |
42 | 42 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 111 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
112 } | 112 } |
113 javascript << FX_WSTRC(L";\n}\n"); | 113 javascript << FX_WSTRC(L";\n}\n"); |
114 if (m_isGlobal) { | 114 if (m_isGlobal) { |
115 javascript << FX_WSTRC(L").call(this);\n"); | 115 javascript << FX_WSTRC(L").call(this);\n"); |
116 } | 116 } |
117 } | 117 } |
118 | 118 |
119 void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {} | 119 void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {} |
120 | 120 |
121 CXFA_FMVarExpression::CXFA_FMVarExpression(FX_DWORD line, | 121 CXFA_FMVarExpression::CXFA_FMVarExpression(uint32_t line, |
122 const CFX_WideStringC& wsName, | 122 const CFX_WideStringC& wsName, |
123 CXFA_FMExpression* pInit) | 123 CXFA_FMExpression* pInit) |
124 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR), | 124 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR), |
125 m_wsName(wsName), | 125 m_wsName(wsName), |
126 m_pInit(pInit) {} | 126 m_pInit(pInit) {} |
127 | 127 |
128 void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 128 void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
129 javascript << FX_WSTRC(L"var "); | 129 javascript << FX_WSTRC(L"var "); |
130 CFX_WideString tempName = m_wsName; | 130 CFX_WideString tempName = m_wsName; |
131 if (m_wsName.GetAt(0) == L'!') { | 131 if (m_wsName.GetAt(0) == L'!') { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 javascript << FX_WSTRC(L");\n"); | 164 javascript << FX_WSTRC(L");\n"); |
165 } else { | 165 } else { |
166 javascript << FX_WSTRC(L"\"\";\n"); | 166 javascript << FX_WSTRC(L"\"\";\n"); |
167 } | 167 } |
168 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 168 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
169 javascript << FX_WSTRC(L" = "); | 169 javascript << FX_WSTRC(L" = "); |
170 javascript << tempName; | 170 javascript << tempName; |
171 javascript << FX_WSTRC(L";\n"); | 171 javascript << FX_WSTRC(L";\n"); |
172 } | 172 } |
173 | 173 |
174 CXFA_FMExpExpression::CXFA_FMExpExpression(FX_DWORD line, | 174 CXFA_FMExpExpression::CXFA_FMExpExpression(uint32_t line, |
175 CXFA_FMSimpleExpression* pExpression) | 175 CXFA_FMSimpleExpression* pExpression) |
176 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {} | 176 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {} |
177 | 177 |
178 void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 178 void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
179 if (m_pExpression->GetOperatorToken() == TOKassign) { | 179 if (m_pExpression->GetOperatorToken() == TOKassign) { |
180 m_pExpression->ToJavaScript(javascript); | 180 m_pExpression->ToJavaScript(javascript); |
181 } else { | 181 } else { |
182 m_pExpression->ToJavaScript(javascript); | 182 m_pExpression->ToJavaScript(javascript); |
183 javascript << FX_WSTRC(L";\n"); | 183 javascript << FX_WSTRC(L";\n"); |
184 } | 184 } |
(...skipping 16 matching lines...) Expand all Loading... |
201 javascript << FX_WSTRC(L");\n"); | 201 javascript << FX_WSTRC(L");\n"); |
202 } else { | 202 } else { |
203 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 203 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
204 javascript << FX_WSTRC(L" = "); | 204 javascript << FX_WSTRC(L" = "); |
205 m_pExpression->ToJavaScript(javascript); | 205 m_pExpression->ToJavaScript(javascript); |
206 javascript << FX_WSTRC(L";\n"); | 206 javascript << FX_WSTRC(L";\n"); |
207 } | 207 } |
208 } | 208 } |
209 } | 209 } |
210 | 210 |
211 CXFA_FMBlockExpression::CXFA_FMBlockExpression(FX_DWORD line, | 211 CXFA_FMBlockExpression::CXFA_FMBlockExpression(uint32_t line, |
212 CFX_PtrArray* pExpressionList) | 212 CFX_PtrArray* pExpressionList) |
213 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK), | 213 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK), |
214 m_pExpressionList(pExpressionList) {} | 214 m_pExpressionList(pExpressionList) {} |
215 | 215 |
216 CXFA_FMBlockExpression::~CXFA_FMBlockExpression() { | 216 CXFA_FMBlockExpression::~CXFA_FMBlockExpression() { |
217 if (m_pExpressionList) { | 217 if (m_pExpressionList) { |
218 for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { | 218 for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { |
219 delete reinterpret_cast<CXFA_FMExpression*>(m_pExpressionList->GetAt(i)); | 219 delete reinterpret_cast<CXFA_FMExpression*>(m_pExpressionList->GetAt(i)); |
220 } | 220 } |
221 m_pExpressionList->RemoveAll(); | 221 m_pExpressionList->RemoveAll(); |
(...skipping 22 matching lines...) Expand all Loading... |
244 if (i + 1 == m_pExpressionList->GetSize()) { | 244 if (i + 1 == m_pExpressionList->GetSize()) { |
245 e->ToImpliedReturnJS(javascript); | 245 e->ToImpliedReturnJS(javascript); |
246 } else { | 246 } else { |
247 e->ToJavaScript(javascript); | 247 e->ToJavaScript(javascript); |
248 } | 248 } |
249 } | 249 } |
250 } | 250 } |
251 javascript << FX_WSTRC(L"}\n"); | 251 javascript << FX_WSTRC(L"}\n"); |
252 } | 252 } |
253 | 253 |
254 CXFA_FMDoExpression::CXFA_FMDoExpression(FX_DWORD line, | 254 CXFA_FMDoExpression::CXFA_FMDoExpression(uint32_t line, |
255 CXFA_FMExpression* pList) | 255 CXFA_FMExpression* pList) |
256 : CXFA_FMExpression(line), m_pList(pList) {} | 256 : CXFA_FMExpression(line), m_pList(pList) {} |
257 | 257 |
258 void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 258 void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
259 m_pList->ToJavaScript(javascript); | 259 m_pList->ToJavaScript(javascript); |
260 } | 260 } |
261 | 261 |
262 void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 262 void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
263 m_pList->ToImpliedReturnJS(javascript); | 263 m_pList->ToImpliedReturnJS(javascript); |
264 } | 264 } |
265 | 265 |
266 CXFA_FMIfExpression::CXFA_FMIfExpression(FX_DWORD line, | 266 CXFA_FMIfExpression::CXFA_FMIfExpression(uint32_t line, |
267 CXFA_FMSimpleExpression* pExpression, | 267 CXFA_FMSimpleExpression* pExpression, |
268 CXFA_FMExpression* pIfExpression, | 268 CXFA_FMExpression* pIfExpression, |
269 CXFA_FMExpression* pElseExpression) | 269 CXFA_FMExpression* pElseExpression) |
270 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF), | 270 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF), |
271 m_pExpression(pExpression), | 271 m_pExpression(pExpression), |
272 m_pIfExpression(pIfExpression), | 272 m_pIfExpression(pIfExpression), |
273 m_pElseExpression(pElseExpression) {} | 273 m_pElseExpression(pElseExpression) {} |
274 | 274 |
275 void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 275 void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
276 javascript << FX_WSTRC(L"if ("); | 276 javascript << FX_WSTRC(L"if ("); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 } | 324 } |
325 } | 325 } |
326 | 326 |
327 CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {} | 327 CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {} |
328 | 328 |
329 void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} | 329 void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
330 | 330 |
331 void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {} | 331 void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {} |
332 | 332 |
333 CXFA_FMWhileExpression::CXFA_FMWhileExpression( | 333 CXFA_FMWhileExpression::CXFA_FMWhileExpression( |
334 FX_DWORD line, | 334 uint32_t line, |
335 CXFA_FMSimpleExpression* pCondition, | 335 CXFA_FMSimpleExpression* pCondition, |
336 CXFA_FMExpression* pExpression) | 336 CXFA_FMExpression* pExpression) |
337 : CXFA_FMLoopExpression(line), | 337 : CXFA_FMLoopExpression(line), |
338 m_pCondition(pCondition), | 338 m_pCondition(pCondition), |
339 m_pExpression(pExpression) {} | 339 m_pExpression(pExpression) {} |
340 | 340 |
341 void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 341 void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
342 javascript << FX_WSTRC(L"while ("); | 342 javascript << FX_WSTRC(L"while ("); |
343 m_pCondition->ToJavaScript(javascript); | 343 m_pCondition->ToJavaScript(javascript); |
344 javascript << FX_WSTRC(L")\n"); | 344 javascript << FX_WSTRC(L")\n"); |
345 m_pExpression->ToJavaScript(javascript); | 345 m_pExpression->ToJavaScript(javascript); |
346 } | 346 } |
347 | 347 |
348 void CXFA_FMWhileExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 348 void CXFA_FMWhileExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
349 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 349 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
350 javascript << FX_WSTRC(L" = 0;\n"); | 350 javascript << FX_WSTRC(L" = 0;\n"); |
351 javascript << FX_WSTRC(L"while ("); | 351 javascript << FX_WSTRC(L"while ("); |
352 m_pCondition->ToJavaScript(javascript); | 352 m_pCondition->ToJavaScript(javascript); |
353 javascript << FX_WSTRC(L")\n"); | 353 javascript << FX_WSTRC(L")\n"); |
354 m_pExpression->ToImpliedReturnJS(javascript); | 354 m_pExpression->ToImpliedReturnJS(javascript); |
355 } | 355 } |
356 | 356 |
357 CXFA_FMBreakExpression::CXFA_FMBreakExpression(FX_DWORD line) | 357 CXFA_FMBreakExpression::CXFA_FMBreakExpression(uint32_t line) |
358 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BREAK) {} | 358 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BREAK) {} |
359 | 359 |
360 CXFA_FMBreakExpression::~CXFA_FMBreakExpression() {} | 360 CXFA_FMBreakExpression::~CXFA_FMBreakExpression() {} |
361 | 361 |
362 void CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 362 void CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
363 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 363 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
364 javascript << FX_WSTRC(L" = 0;\n"); | 364 javascript << FX_WSTRC(L" = 0;\n"); |
365 javascript << FX_WSTRC(L"break;\n"); | 365 javascript << FX_WSTRC(L"break;\n"); |
366 } | 366 } |
367 | 367 |
368 void CXFA_FMBreakExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 368 void CXFA_FMBreakExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
369 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 369 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
370 javascript << FX_WSTRC(L" = 0;\n"); | 370 javascript << FX_WSTRC(L" = 0;\n"); |
371 javascript << FX_WSTRC(L"break;\n"); | 371 javascript << FX_WSTRC(L"break;\n"); |
372 } | 372 } |
373 | 373 |
374 CXFA_FMContinueExpression::CXFA_FMContinueExpression(FX_DWORD line) | 374 CXFA_FMContinueExpression::CXFA_FMContinueExpression(uint32_t line) |
375 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_CONTINUE) {} | 375 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_CONTINUE) {} |
376 | 376 |
377 CXFA_FMContinueExpression::~CXFA_FMContinueExpression() {} | 377 CXFA_FMContinueExpression::~CXFA_FMContinueExpression() {} |
378 | 378 |
379 void CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 379 void CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
380 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 380 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
381 javascript << FX_WSTRC(L" = 0;\n"); | 381 javascript << FX_WSTRC(L" = 0;\n"); |
382 javascript << FX_WSTRC(L"continue;\n"); | 382 javascript << FX_WSTRC(L"continue;\n"); |
383 } | 383 } |
384 | 384 |
385 void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 385 void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
386 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 386 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
387 javascript << FX_WSTRC(L" = 0;\n"); | 387 javascript << FX_WSTRC(L" = 0;\n"); |
388 javascript << FX_WSTRC(L"continue;\n"); | 388 javascript << FX_WSTRC(L"continue;\n"); |
389 } | 389 } |
390 | 390 |
391 CXFA_FMForExpression::CXFA_FMForExpression(FX_DWORD line, | 391 CXFA_FMForExpression::CXFA_FMForExpression(uint32_t line, |
392 const CFX_WideStringC& wsVariant, | 392 const CFX_WideStringC& wsVariant, |
393 CXFA_FMSimpleExpression* pAssignment, | 393 CXFA_FMSimpleExpression* pAssignment, |
394 CXFA_FMSimpleExpression* pAccessor, | 394 CXFA_FMSimpleExpression* pAccessor, |
395 int32_t iDirection, | 395 int32_t iDirection, |
396 CXFA_FMSimpleExpression* pStep, | 396 CXFA_FMSimpleExpression* pStep, |
397 CXFA_FMExpression* pList) | 397 CXFA_FMExpression* pList) |
398 : CXFA_FMLoopExpression(line), | 398 : CXFA_FMLoopExpression(line), |
399 m_wsVariant(wsVariant), | 399 m_wsVariant(wsVariant), |
400 m_pAssignment(pAssignment), | 400 m_pAssignment(pAssignment), |
401 m_pAccessor(pAccessor), | 401 m_pAccessor(pAccessor), |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 javascript << FX_WSTRC(L")"); | 497 javascript << FX_WSTRC(L")"); |
498 } else { | 498 } else { |
499 javascript << FX_WSTRC(L"1"); | 499 javascript << FX_WSTRC(L"1"); |
500 } | 500 } |
501 javascript << FX_WSTRC(L")\n"); | 501 javascript << FX_WSTRC(L")\n"); |
502 m_pList->ToImpliedReturnJS(javascript); | 502 m_pList->ToImpliedReturnJS(javascript); |
503 javascript << FX_WSTRC(L"}\n"); | 503 javascript << FX_WSTRC(L"}\n"); |
504 } | 504 } |
505 | 505 |
506 CXFA_FMForeachExpression::CXFA_FMForeachExpression( | 506 CXFA_FMForeachExpression::CXFA_FMForeachExpression( |
507 FX_DWORD line, | 507 uint32_t line, |
508 const CFX_WideStringC& wsIdentifier, | 508 const CFX_WideStringC& wsIdentifier, |
509 CFX_PtrArray* pAccessors, | 509 CFX_PtrArray* pAccessors, |
510 CXFA_FMExpression* pList) | 510 CXFA_FMExpression* pList) |
511 : CXFA_FMLoopExpression(line), | 511 : CXFA_FMLoopExpression(line), |
512 m_wsIdentifier(wsIdentifier), | 512 m_wsIdentifier(wsIdentifier), |
513 m_pAccessors(pAccessors), | 513 m_pAccessors(pAccessors), |
514 m_pList(pList) {} | 514 m_pList(pList) {} |
515 | 515 |
516 CXFA_FMForeachExpression::~CXFA_FMForeachExpression() { | 516 CXFA_FMForeachExpression::~CXFA_FMForeachExpression() { |
517 if (m_pAccessors) { | 517 if (m_pAccessors) { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 } | 618 } |
619 javascript << FX_WSTRC(L" = "); | 619 javascript << FX_WSTRC(L" = "); |
620 javascript << RUNTIMEBLOCKTEMPARRAY; | 620 javascript << RUNTIMEBLOCKTEMPARRAY; |
621 javascript << FX_WSTRC(L"["); | 621 javascript << FX_WSTRC(L"["); |
622 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 622 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
623 javascript << FX_WSTRC(L"++];\n"); | 623 javascript << FX_WSTRC(L"++];\n"); |
624 m_pList->ToImpliedReturnJS(javascript); | 624 m_pList->ToImpliedReturnJS(javascript); |
625 javascript << FX_WSTRC(L"}\n"); | 625 javascript << FX_WSTRC(L"}\n"); |
626 javascript << FX_WSTRC(L"}\n"); | 626 javascript << FX_WSTRC(L"}\n"); |
627 } | 627 } |
OLD | NEW |