Index: xfa/src/fxfa/src/fm2js/xfa_simpleexpression.cpp |
diff --git a/xfa/src/fxfa/src/fm2js/xfa_simpleexpression.cpp b/xfa/src/fxfa/src/fm2js/xfa_simpleexpression.cpp |
index 9ce6dd318b9017bde8c9eeb8beecd6f5a671d09a..c67681f6baaf45cbe5b524dfb193771d4b4cf68e 100644 |
--- a/xfa/src/fxfa/src/fm2js/xfa_simpleexpression.cpp |
+++ b/xfa/src/fxfa/src/fm2js/xfa_simpleexpression.cpp |
@@ -1,711 +1,711 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
- |
-#include "xfa_fm2js.h" |
-static CFX_WideStringC gs_lpStrExpFuncName[] = { |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.assign_value_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_or_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_and_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.equality_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.notequality_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.less_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.lessequal_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.greater_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.greaterequal_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.plus_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.minus_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.multiple_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.divide_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.positive_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.negative_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_not_operator"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime."), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.dot_accessor"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.dotdot_accessor"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.concat_fm_object"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_object"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_array"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_value"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_jsobj"), |
- FX_WSTRC(L"foxit_xfa_formcalc_runtime.fm_var_filter"), |
-}; |
-CFX_WideStringC XFA_FM_EXPTypeToString( |
- XFA_FM_SimpleExpressionType simpleExpType) { |
- return gs_lpStrExpFuncName[simpleExpType]; |
-} |
-static XFA_FMBuildInFunc buildInFuncs[] = { |
- {0x0001f1f5, L"At"}, {0x00020b9c, L"FV"}, |
- {0x00021aef, L"If"}, {0x00023ee6, L"PV"}, |
- {0x04b5c9ee, L"Encode"}, {0x08e96685, L"DateFmt"}, |
- {0x09f99db6, L"Abs"}, {0x09f9e583, L"Apr"}, |
- {0x09fa043e, L"Avg"}, {0x0a9782a0, L"Get"}, |
- {0x0b1b09df, L"Len"}, {0x0b3543a6, L"Max"}, |
- {0x0b356ca4, L"Min"}, {0x0b358b60, L"Mod"}, |
- {0x0b4fded4, L"NPV"}, {0x0b846bf1, L"Pmt"}, |
- {0x0b8494f9, L"Put"}, {0x0bb8df5d, L"Ref"}, |
- {0x0bd37a99, L"Str"}, {0x0bd37fb5, L"Sum"}, |
- {0x1048469b, L"Cterm"}, {0x11e03660, L"Exists"}, |
- {0x126236e6, L"Post"}, {0x127c6661, L"PPmt"}, |
- {0x193ade3e, L"Right"}, {0x1ec8ab2c, L"Rate"}, |
- {0x20e476dc, L"IsoTime2Num"}, {0x23eb6816, L"TimeFmt"}, |
- {0x24fb17b0, L"LocalDateFmt"}, {0x28dee6e9, L"Format"}, |
- {0x2d0890b8, L"Term"}, {0x2d71b00f, L"Time"}, |
- {0x2f890fb1, L"Num2Time"}, {0x3767511d, L"Ceil"}, |
- {0x3ffd1941, L"LocalTimeFmt"}, {0x442f68c8, L"Round"}, |
- {0x46fd1128, L"Eval"}, {0x4d629440, L"Date2Num"}, |
- {0x4dcf25f8, L"Concat"}, {0x4e00255d, L"UnitValue"}, |
- {0x55a5cc29, L"Lower"}, {0x5e43e04c, L"WordNum"}, |
- {0x620ce6ba, L"Ipmt"}, {0x6f544d49, L"Count"}, |
- {0x7e241013, L"Within"}, {0x9b9a6e2b, L"IsoDate2Num"}, |
- {0xb2c941c2, L"UnitType"}, {0xb598a1f7, L"Uuid"}, |
- {0xbde9abde, L"Date"}, {0xc0010b80, L"Num2Date"}, |
- {0xc1f6144c, L"Upper"}, {0xc44028f7, L"Oneof"}, |
- {0xc62c1b2c, L"Space"}, {0xd0ff50f9, L"HasValue"}, |
- {0xd1537042, L"Floor"}, {0xd2ac9cf1, L"Time2Num"}, |
- {0xd907aee5, L"Num2GMTime"}, {0xdf24f7c4, L"Decode"}, |
- {0xe2664803, L"Substr"}, {0xe3e7b528, L"Stuff"}, |
- {0xe6792d4e, L"Rtrim"}, {0xe8c23f5b, L"Parse"}, |
- {0xea18d121, L"Choose"}, {0xebfef69c, L"Replace"}, |
- {0xf5ad782b, L"Left"}, {0xf7bb2248, L"Ltrim"}, |
-}; |
-static const XFA_FMSOMMethod gs_FMSomMethods[] = { |
- {0x00000068, L"h", 0x01}, |
- {0x00000077, L"w", 0x01}, |
- {0x00000078, L"x", 0x01}, |
- {0x00000079, L"y", 0x01}, |
- {0x05eb5b0f, L"pageSpan", 0x01}, |
- {0x10f1b1bd, L"page", 0x01}, |
- {0x3bf1c2a5, L"absPageSpan", 0x01}, |
- {0x3c752495, L"verify", 0x0d}, |
- {0x44c352ad, L"formNodes", 0x01}, |
- {0x5775c2cc, L"absPageInBatch", 0x01}, |
- {0x5ee00996, L"setElement", 0x01}, |
- {0x7033bfd5, L"insert", 0x03}, |
- {0x8c5feb32, L"sheetInBatch", 0x01}, |
- {0x8f3a8379, L"sheet", 0x01}, |
- {0x92dada4f, L"saveFilteredXML", 0x01}, |
- {0x9cab7cae, L"remove", 0x01}, |
- {0xa68635f1, L"sign", 0x61}, |
- {0xaac241c8, L"isRecordGroup", 0x01}, |
- {0xd8ed1467, L"clear", 0x01}, |
- {0xda12e518, L"append", 0x01}, |
- {0xe74f0653, L"absPage", 0x01}, |
-}; |
-CXFA_FMSimpleExpression::CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op) |
- : m_line(line), m_op(op) {} |
-void CXFA_FMSimpleExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
-void CXFA_FMSimpleExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} |
-XFA_FM_TOKEN CXFA_FMSimpleExpression::GetOperatorToken() const { |
- return m_op; |
-} |
-CXFA_FMNullExpression::CXFA_FMNullExpression(FX_DWORD line) |
- : CXFA_FMSimpleExpression(line, TOKnull) {} |
-void CXFA_FMNullExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << FX_WSTRC(L"null"); |
-} |
-CXFA_FMNumberExpression::CXFA_FMNumberExpression(FX_DWORD line, |
- CFX_WideStringC wsNumber) |
- : CXFA_FMSimpleExpression(line, TOKnumber), m_wsNumber(wsNumber) {} |
-void CXFA_FMNumberExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << m_wsNumber; |
-} |
-CXFA_FMStringExpression::CXFA_FMStringExpression(FX_DWORD line, |
- CFX_WideStringC wsString) |
- : CXFA_FMSimpleExpression(line, TOKstring), m_wsString(wsString) {} |
-void CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- CFX_WideString tempStr = m_wsString; |
- if (tempStr.GetLength() > 2) { |
- javascript.AppendChar(L'\"'); |
- FX_WCHAR oneChar; |
- for (int16_t i = 1; i < tempStr.GetLength() - 1; i++) { |
- oneChar = tempStr[i]; |
- switch (oneChar) { |
- case L'\"': { |
- i++; |
- javascript << FX_WSTRC(L"\\\""); |
- } break; |
- case 0x0d: |
- break; |
- case 0x0a: { |
- javascript << FX_WSTRC(L"\\n"); |
- } break; |
- default: { javascript.AppendChar(oneChar); } break; |
- } |
- } |
- javascript.AppendChar(L'\"'); |
- } else { |
- javascript << tempStr; |
- } |
-} |
-CXFA_FMIdentifierExpressionn::CXFA_FMIdentifierExpressionn( |
- FX_DWORD line, |
- CFX_WideStringC wsIdentifier) |
- : CXFA_FMSimpleExpression(line, TOKidentifier), |
- m_wsIdentifier(wsIdentifier) {} |
-void CXFA_FMIdentifierExpressionn::ToJavaScript(CFX_WideTextBuf& javascript) { |
- CFX_WideString tempStr = m_wsIdentifier; |
- if (tempStr.Equal(FX_WSTRC(L"$"))) { |
- tempStr = FX_WSTRC(L"this"); |
- } else if (tempStr.Equal(FX_WSTRC(L"!"))) { |
- tempStr = FX_WSTRC(L"xfa.datasets"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$data"))) { |
- tempStr = FX_WSTRC(L"xfa.datasets.data"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$event"))) { |
- tempStr = FX_WSTRC(L"xfa.event"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$form"))) { |
- tempStr = FX_WSTRC(L"xfa.form"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$host"))) { |
- tempStr = FX_WSTRC(L"xfa.host"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$layout"))) { |
- tempStr = FX_WSTRC(L"xfa.layout"); |
- } else if (tempStr.Equal(FX_WSTRC(L"$template"))) { |
- tempStr = FX_WSTRC(L"xfa.template"); |
- } else if (tempStr[0] == L'!') { |
- tempStr = EXCLAMATION_IN_IDENTIFIER + tempStr.Mid(1); |
- } |
- javascript << tempStr; |
-} |
- |
-CXFA_FMUnaryExpression::CXFA_FMUnaryExpression(FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp) |
- : CXFA_FMSimpleExpression(line, op), m_pExp(pExp) {} |
-CXFA_FMUnaryExpression::~CXFA_FMUnaryExpression() { |
- if (m_pExp != 0) { |
- delete m_pExp; |
- m_pExp = 0; |
- } |
-} |
-void CXFA_FMUnaryExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
-CXFA_FMBinExpression::CXFA_FMBinExpression(FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMSimpleExpression(line, op), m_pExp1(pExp1), m_pExp2(pExp2) {} |
-CXFA_FMBinExpression::~CXFA_FMBinExpression() { |
- if (m_pExp1 != 0) { |
- delete m_pExp1; |
- m_pExp1 = 0; |
- } |
- if (m_pExp2 != 0) { |
- delete m_pExp2; |
- m_pExp2 = 0; |
- } |
-} |
-void CXFA_FMBinExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
-CXFA_FMAssignExpression::CXFA_FMAssignExpression(FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMAssignExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << FX_WSTRC(L"if ("); |
- javascript << gs_lpStrExpFuncName[ISFMOBJECT]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L"))\n{\n"); |
- javascript << gs_lpStrExpFuncName[ASSIGN]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L");\n}\n"); |
- CFX_WideTextBuf tempExp1; |
- m_pExp1->ToJavaScript(tempExp1); |
- if (m_pExp1->GetOperatorToken() == TOKidentifier && |
- tempExp1.GetWideString() != FX_WSTRC(L"this")) { |
- javascript << FX_WSTRC(L"else\n{\n"); |
- javascript << tempExp1; |
- javascript << FX_WSTRC(L" = "); |
- javascript << gs_lpStrExpFuncName[ASSIGN]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L");\n}\n"); |
- } |
-} |
-void CXFA_FMAssignExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
- javascript << FX_WSTRC(L"if ("); |
- javascript << gs_lpStrExpFuncName[ISFMOBJECT]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L"))\n{\n"); |
- javascript << RUNTIMEFUNCTIONRETURNVALUE; |
- javascript << FX_WSTRC(L" = "); |
- javascript << gs_lpStrExpFuncName[ASSIGN]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L");\n}\n"); |
- CFX_WideTextBuf tempExp1; |
- m_pExp1->ToJavaScript(tempExp1); |
- if (m_pExp1->GetOperatorToken() == TOKidentifier && |
- tempExp1.GetWideString() != FX_WSTRC(L"this")) { |
- javascript << FX_WSTRC(L"else\n{\n"); |
- javascript << RUNTIMEFUNCTIONRETURNVALUE; |
- javascript << FX_WSTRC(L" = "); |
- javascript << tempExp1; |
- javascript << FX_WSTRC(L" = "); |
- javascript << gs_lpStrExpFuncName[ASSIGN]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L");\n}\n"); |
- } |
-} |
-CXFA_FMLogicalOrExpression::CXFA_FMLogicalOrExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMLogicalOrExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[LOGICALOR]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMLogicalAndExpression::CXFA_FMLogicalAndExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMLogicalAndExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[LOGICALAND]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMEqualityExpression::CXFA_FMEqualityExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMEqualityExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- switch (m_op) { |
- case TOKeq: |
- case TOKkseq: |
- javascript << gs_lpStrExpFuncName[EQUALITY]; |
- break; |
- case TOKne: |
- case TOKksne: |
- javascript << gs_lpStrExpFuncName[NOTEQUALITY]; |
- break; |
- default: |
- FXSYS_assert(FALSE); |
- break; |
- } |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMRelationalExpression::CXFA_FMRelationalExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMRelationalExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- switch (m_op) { |
- case TOKlt: |
- case TOKkslt: |
- javascript << gs_lpStrExpFuncName[LESS]; |
- break; |
- case TOKgt: |
- case TOKksgt: |
- javascript << gs_lpStrExpFuncName[GREATER]; |
- break; |
- case TOKle: |
- case TOKksle: |
- javascript << gs_lpStrExpFuncName[LESSEQUAL]; |
- break; |
- case TOKge: |
- case TOKksge: |
- javascript << gs_lpStrExpFuncName[GREATEREQUAL]; |
- break; |
- default: |
- FXSYS_assert(FALSE); |
- break; |
- } |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMAdditiveExpression::CXFA_FMAdditiveExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMAdditiveExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- switch (m_op) { |
- case TOKplus: |
- javascript << gs_lpStrExpFuncName[PLUS]; |
- break; |
- case TOKminus: |
- javascript << gs_lpStrExpFuncName[MINUS]; |
- break; |
- default: |
- FXSYS_assert(FALSE); |
- break; |
- } |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMMultiplicativeExpression::CXFA_FMMultiplicativeExpression( |
- FX_DWORD line, |
- XFA_FM_TOKEN op, |
- CXFA_FMSimpleExpression* pExp1, |
- CXFA_FMSimpleExpression* pExp2) |
- : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
-void CXFA_FMMultiplicativeExpression::ToJavaScript( |
- CFX_WideTextBuf& javascript) { |
- switch (m_op) { |
- case TOKmul: |
- javascript << gs_lpStrExpFuncName[MULTIPLE]; |
- break; |
- case TOKdiv: |
- javascript << gs_lpStrExpFuncName[DIVIDE]; |
- break; |
- default: |
- FXSYS_assert(FALSE); |
- break; |
- } |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMPosExpression::CXFA_FMPosExpression(FX_DWORD line, |
- CXFA_FMSimpleExpression* pExp) |
- : CXFA_FMUnaryExpression(line, TOKplus, pExp) {} |
-void CXFA_FMPosExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[POSITIVE]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMNegExpression::CXFA_FMNegExpression(FX_DWORD line, |
- CXFA_FMSimpleExpression* pExp) |
- : CXFA_FMUnaryExpression(line, TOKminus, pExp) {} |
-void CXFA_FMNegExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[NEGATIVE]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMNotExpression::CXFA_FMNotExpression(FX_DWORD line, |
- CXFA_FMSimpleExpression* pExp) |
- : CXFA_FMUnaryExpression(line, TOKksnot, pExp) {} |
-void CXFA_FMNotExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[NOT]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMCallExpression::CXFA_FMCallExpression(FX_DWORD line, |
- CXFA_FMSimpleExpression* pExp, |
- CFX_PtrArray* pArguments, |
- FX_BOOL bIsSomMethod) |
- : CXFA_FMUnaryExpression(line, TOKcall, pExp), |
- m_bIsSomMethod(bIsSomMethod), |
- m_pArguments(pArguments) { |
-} |
-CXFA_FMCallExpression::~CXFA_FMCallExpression() { |
- if (m_pArguments) { |
- int32_t argc = m_pArguments->GetSize(); |
- int32_t index = 0; |
- CXFA_FMSimpleExpression* e = 0; |
- while (index < argc) { |
- e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
- delete e; |
- index++; |
- } |
- m_pArguments->RemoveAll(); |
- delete m_pArguments; |
- m_pArguments = 0; |
- } |
-} |
-FX_BOOL CXFA_FMCallExpression::IsBuildInFunc(CFX_WideTextBuf& funcName) { |
- int32_t iLength = funcName.GetLength(); |
- uint32_t uHash = FX_HashCode_String_GetW(funcName.GetBuffer(), iLength, TRUE); |
- XFA_FMBuildInFunc buildinfunction; |
- int32_t iStart = 0, |
- iEnd = (sizeof(buildInFuncs) / sizeof(buildInFuncs[0])) - 1; |
- int32_t iMid = (iStart + iEnd) / 2; |
- do { |
- iMid = (iStart + iEnd) / 2; |
- buildinfunction = buildInFuncs[iMid]; |
- if (uHash == buildinfunction.m_uHash) { |
- funcName.Clear(); |
- funcName << buildinfunction.m_buildinfunc; |
- return TRUE; |
- } else if (uHash < buildinfunction.m_uHash) { |
- iEnd = iMid - 1; |
- } else { |
- iStart = iMid + 1; |
- } |
- } while (iStart <= iEnd); |
- return FALSE; |
-} |
-FX_DWORD CXFA_FMCallExpression::IsSomMethodWithObjPara( |
- const CFX_WideStringC& methodName) { |
- int32_t iLength = methodName.GetLength(); |
- uint32_t uHash = FX_HashCode_String_GetW(methodName.GetPtr(), iLength); |
- XFA_FMSOMMethod somMethodWithObjPara; |
- FX_DWORD parameters = 0x00; |
- int32_t iStart = 0, |
- iEnd = (sizeof(gs_FMSomMethods) / sizeof(gs_FMSomMethods[0])) - 1; |
- int32_t iMid = (iStart + iEnd) / 2; |
- do { |
- iMid = (iStart + iEnd) / 2; |
- somMethodWithObjPara = gs_FMSomMethods[iMid]; |
- if (uHash == somMethodWithObjPara.m_uHash) { |
- parameters = somMethodWithObjPara.m_dParameters; |
- break; |
- } else if (uHash < somMethodWithObjPara.m_uHash) { |
- iEnd = iMid - 1; |
- } else { |
- iStart = iMid + 1; |
- } |
- } while (iStart <= iEnd); |
- return parameters; |
-} |
-void CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- CFX_WideTextBuf funcName; |
- m_pExp->ToJavaScript(funcName); |
- if (m_bIsSomMethod) { |
- javascript << funcName; |
- javascript << FX_WSTRC(L"("); |
- if (m_pArguments) { |
- int32_t argc = m_pArguments->GetSize(); |
- int32_t index = 0; |
- FX_DWORD methodPara = IsSomMethodWithObjPara(funcName.GetWideString()); |
- if (methodPara > 0) { |
- CXFA_FMSimpleExpression* e = 0; |
- while (index < argc) { |
- if ((methodPara & (0x01 << index)) > 0) { |
- javascript << gs_lpStrExpFuncName[GETFMJSOBJ]; |
- } else { |
- javascript << gs_lpStrExpFuncName[GETFMVALUE]; |
- } |
- javascript << FX_WSTRC(L"("); |
- e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
- e->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
- if (index + 1 < argc) { |
- javascript << FX_WSTRC(L", "); |
- } |
- index++; |
- } |
- } else { |
- CXFA_FMSimpleExpression* e = 0; |
- while (index < argc) { |
- javascript << gs_lpStrExpFuncName[GETFMVALUE]; |
- javascript << FX_WSTRC(L"("); |
- e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
- e->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
- if (index + 1 < argc) { |
- javascript << FX_WSTRC(L", "); |
- } |
- index++; |
- } |
- } |
- } |
- javascript << FX_WSTRC(L")"); |
- } else { |
- FX_BOOL isEvalFunc = FALSE; |
- FX_BOOL isExistsFunc = FALSE; |
- if (IsBuildInFunc(funcName)) { |
- if (funcName.GetWideString() == FX_WSTRC(L"Eval")) { |
- isEvalFunc = TRUE; |
- javascript << FX_WSTRC(L"eval.call(this, "); |
- javascript << gs_lpStrExpFuncName[CALL]; |
- javascript << FX_WSTRC(L"Translate"); |
- } else if (funcName.GetWideString() == FX_WSTRC(L"Exists")) { |
- isExistsFunc = TRUE; |
- javascript << gs_lpStrExpFuncName[CALL]; |
- javascript << funcName; |
- } else { |
- javascript << gs_lpStrExpFuncName[CALL]; |
- javascript << funcName; |
- } |
- } else { |
- javascript << funcName; |
- } |
- javascript << FX_WSTRC(L"("); |
- if (isExistsFunc) { |
- javascript << FX_WSTRC(L"\n(\nfunction ()\n{\ntry\n{\n"); |
- if (m_pArguments && m_pArguments->GetSize() > 0) { |
- CXFA_FMSimpleExpression* e = |
- (CXFA_FMSimpleExpression*)m_pArguments->GetAt(0); |
- javascript << FX_WSTRC(L"return "); |
- e->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L";\n}\n"); |
- } else { |
- javascript << FX_WSTRC(L"return 0;\n}\n"); |
- } |
- javascript << FX_WSTRC( |
- L"catch(accessExceptions)\n{\nreturn 0;\n}\n}\n).call(this)\n"); |
- } else if (m_pArguments) { |
- int32_t argc = m_pArguments->GetSize(); |
- int32_t index = 0; |
- CXFA_FMSimpleExpression* e = 0; |
- while (index < argc) { |
- e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
- e->ToJavaScript(javascript); |
- if (index + 1 < argc) { |
- javascript << FX_WSTRC(L", "); |
- } |
- index++; |
- } |
- } |
- javascript << FX_WSTRC(L")"); |
- if (isEvalFunc) { |
- javascript << FX_WSTRC(L")"); |
- } |
- } |
-} |
-CXFA_FMDotAccessorExpression::CXFA_FMDotAccessorExpression( |
- FX_DWORD line, |
- CXFA_FMSimpleExpression* pAccessor, |
- XFA_FM_TOKEN op, |
- CFX_WideStringC wsIdentifier, |
- CXFA_FMSimpleExpression* pIndexExp) |
- : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), |
- m_wsIdentifier(wsIdentifier) {} |
-void CXFA_FMDotAccessorExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[DOT]; |
- javascript << FX_WSTRC(L"("); |
- if (m_pExp1) { |
- m_pExp1->ToJavaScript(javascript); |
- } else { |
- javascript << FX_WSTRC(L"null"); |
- } |
- javascript << FX_WSTRC(L", "); |
- javascript << FX_WSTRC(L"\""); |
- if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { |
- m_pExp1->ToJavaScript(javascript); |
- } |
- javascript << FX_WSTRC(L"\", "); |
- if (m_op == TOKdotscream) { |
- javascript << FX_WSTRC(L"\"#"); |
- javascript << m_wsIdentifier; |
- javascript << FX_WSTRC(L"\", "); |
- } else if (m_op == TOKdotstar) { |
- javascript << FX_WSTRC(L"\"*\", "); |
- } else if (m_op == TOKcall) { |
- javascript << FX_WSTRC(L"\"\", "); |
- } else { |
- javascript << FX_WSTRC(L"\""); |
- javascript << m_wsIdentifier; |
- javascript << FX_WSTRC(L"\", "); |
- } |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMIndexExpression::CXFA_FMIndexExpression( |
- FX_DWORD line, |
- XFA_FM_AccessorIndex accessorIndex, |
- CXFA_FMSimpleExpression* pIndexExp, |
- FX_BOOL bIsStarIndex) |
- : CXFA_FMUnaryExpression(line, TOKlbracket, pIndexExp), |
- m_accessorIndex(accessorIndex), |
- m_bIsStarIndex(bIsStarIndex) {} |
-void CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- switch (m_accessorIndex) { |
- case ACCESSOR_NO_INDEX: |
- javascript << FX_WSTRC(L"0"); |
- break; |
- case ACCESSOR_NO_RELATIVEINDEX: |
- javascript << FX_WSTRC(L"1"); |
- break; |
- case ACCESSOR_POSITIVE_INDEX: |
- javascript << FX_WSTRC(L"2"); |
- break; |
- case ACCESSOR_NEGATIVE_INDEX: |
- javascript << FX_WSTRC(L"3"); |
- break; |
- default: |
- javascript << FX_WSTRC(L"0"); |
- } |
- if (!m_bIsStarIndex) { |
- javascript << FX_WSTRC(L", "); |
- if (m_pExp) { |
- m_pExp->ToJavaScript(javascript); |
- } else { |
- javascript << FX_WSTRC(L"0"); |
- } |
- } |
-} |
-CXFA_FMDotDotAccessorExpression::CXFA_FMDotDotAccessorExpression( |
- FX_DWORD line, |
- CXFA_FMSimpleExpression* pAccessor, |
- XFA_FM_TOKEN op, |
- CFX_WideStringC wsIdentifier, |
- CXFA_FMSimpleExpression* pIndexExp) |
- : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), |
- m_wsIdentifier(wsIdentifier) {} |
-void CXFA_FMDotDotAccessorExpression::ToJavaScript( |
- CFX_WideTextBuf& javascript) { |
- javascript << gs_lpStrExpFuncName[DOTDOT]; |
- javascript << FX_WSTRC(L"("); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L", "); |
- javascript << FX_WSTRC(L"\""); |
- if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { |
- m_pExp1->ToJavaScript(javascript); |
- } |
- javascript << FX_WSTRC(L"\", "); |
- javascript << FX_WSTRC(L"\""); |
- javascript << m_wsIdentifier; |
- javascript << FX_WSTRC(L"\", "); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L")"); |
-} |
-CXFA_FMMethodCallExpression::CXFA_FMMethodCallExpression( |
- FX_DWORD line, |
- CXFA_FMSimpleExpression* pAccessorExp1, |
- CXFA_FMSimpleExpression* pCallExp) |
- : CXFA_FMBinExpression(line, TOKdot, pAccessorExp1, pCallExp) {} |
-void CXFA_FMMethodCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
- javascript << FX_WSTRC(L"(\nfunction ()\n{\n"); |
- javascript << FX_WSTRC(L"var method_return_value = null;\n"); |
- javascript << FX_WSTRC(L"var accessor_object = "); |
- m_pExp1->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L";\n"); |
- javascript << FX_WSTRC(L"if ("); |
- javascript << gs_lpStrExpFuncName[ISFMARRAY]; |
- javascript << FX_WSTRC(L"(accessor_object))\n{\n"); |
- javascript << FX_WSTRC( |
- L"for(var index = accessor_object.length - 1; index > 1; index--)\n{\n"); |
- javascript << FX_WSTRC(L"method_return_value = accessor_object[index]."); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L";\n}\n}\n"); |
- javascript << FX_WSTRC(L"else\n{\nmethod_return_value = accessor_object."); |
- m_pExp2->ToJavaScript(javascript); |
- javascript << FX_WSTRC(L";\n}\n"); |
- javascript << FX_WSTRC(L"return method_return_value;\n"); |
- javascript << FX_WSTRC(L"}\n).call(this)"); |
-} |
+// Copyright 2014 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#include "xfa_fm2js.h" |
+static CFX_WideStringC gs_lpStrExpFuncName[] = { |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.assign_value_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_or_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_and_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.equality_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.notequality_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.less_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.lessequal_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.greater_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.greaterequal_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.plus_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.minus_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.multiple_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.divide_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.positive_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.negative_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_not_operator"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime."), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.dot_accessor"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.dotdot_accessor"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.concat_fm_object"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_object"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_array"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_value"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_jsobj"), |
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime.fm_var_filter"), |
+}; |
+CFX_WideStringC XFA_FM_EXPTypeToString( |
+ XFA_FM_SimpleExpressionType simpleExpType) { |
+ return gs_lpStrExpFuncName[simpleExpType]; |
+} |
+static XFA_FMBuildInFunc buildInFuncs[] = { |
+ {0x0001f1f5, L"At"}, {0x00020b9c, L"FV"}, |
+ {0x00021aef, L"If"}, {0x00023ee6, L"PV"}, |
+ {0x04b5c9ee, L"Encode"}, {0x08e96685, L"DateFmt"}, |
+ {0x09f99db6, L"Abs"}, {0x09f9e583, L"Apr"}, |
+ {0x09fa043e, L"Avg"}, {0x0a9782a0, L"Get"}, |
+ {0x0b1b09df, L"Len"}, {0x0b3543a6, L"Max"}, |
+ {0x0b356ca4, L"Min"}, {0x0b358b60, L"Mod"}, |
+ {0x0b4fded4, L"NPV"}, {0x0b846bf1, L"Pmt"}, |
+ {0x0b8494f9, L"Put"}, {0x0bb8df5d, L"Ref"}, |
+ {0x0bd37a99, L"Str"}, {0x0bd37fb5, L"Sum"}, |
+ {0x1048469b, L"Cterm"}, {0x11e03660, L"Exists"}, |
+ {0x126236e6, L"Post"}, {0x127c6661, L"PPmt"}, |
+ {0x193ade3e, L"Right"}, {0x1ec8ab2c, L"Rate"}, |
+ {0x20e476dc, L"IsoTime2Num"}, {0x23eb6816, L"TimeFmt"}, |
+ {0x24fb17b0, L"LocalDateFmt"}, {0x28dee6e9, L"Format"}, |
+ {0x2d0890b8, L"Term"}, {0x2d71b00f, L"Time"}, |
+ {0x2f890fb1, L"Num2Time"}, {0x3767511d, L"Ceil"}, |
+ {0x3ffd1941, L"LocalTimeFmt"}, {0x442f68c8, L"Round"}, |
+ {0x46fd1128, L"Eval"}, {0x4d629440, L"Date2Num"}, |
+ {0x4dcf25f8, L"Concat"}, {0x4e00255d, L"UnitValue"}, |
+ {0x55a5cc29, L"Lower"}, {0x5e43e04c, L"WordNum"}, |
+ {0x620ce6ba, L"Ipmt"}, {0x6f544d49, L"Count"}, |
+ {0x7e241013, L"Within"}, {0x9b9a6e2b, L"IsoDate2Num"}, |
+ {0xb2c941c2, L"UnitType"}, {0xb598a1f7, L"Uuid"}, |
+ {0xbde9abde, L"Date"}, {0xc0010b80, L"Num2Date"}, |
+ {0xc1f6144c, L"Upper"}, {0xc44028f7, L"Oneof"}, |
+ {0xc62c1b2c, L"Space"}, {0xd0ff50f9, L"HasValue"}, |
+ {0xd1537042, L"Floor"}, {0xd2ac9cf1, L"Time2Num"}, |
+ {0xd907aee5, L"Num2GMTime"}, {0xdf24f7c4, L"Decode"}, |
+ {0xe2664803, L"Substr"}, {0xe3e7b528, L"Stuff"}, |
+ {0xe6792d4e, L"Rtrim"}, {0xe8c23f5b, L"Parse"}, |
+ {0xea18d121, L"Choose"}, {0xebfef69c, L"Replace"}, |
+ {0xf5ad782b, L"Left"}, {0xf7bb2248, L"Ltrim"}, |
+}; |
+static const XFA_FMSOMMethod gs_FMSomMethods[] = { |
+ {0x00000068, L"h", 0x01}, |
+ {0x00000077, L"w", 0x01}, |
+ {0x00000078, L"x", 0x01}, |
+ {0x00000079, L"y", 0x01}, |
+ {0x05eb5b0f, L"pageSpan", 0x01}, |
+ {0x10f1b1bd, L"page", 0x01}, |
+ {0x3bf1c2a5, L"absPageSpan", 0x01}, |
+ {0x3c752495, L"verify", 0x0d}, |
+ {0x44c352ad, L"formNodes", 0x01}, |
+ {0x5775c2cc, L"absPageInBatch", 0x01}, |
+ {0x5ee00996, L"setElement", 0x01}, |
+ {0x7033bfd5, L"insert", 0x03}, |
+ {0x8c5feb32, L"sheetInBatch", 0x01}, |
+ {0x8f3a8379, L"sheet", 0x01}, |
+ {0x92dada4f, L"saveFilteredXML", 0x01}, |
+ {0x9cab7cae, L"remove", 0x01}, |
+ {0xa68635f1, L"sign", 0x61}, |
+ {0xaac241c8, L"isRecordGroup", 0x01}, |
+ {0xd8ed1467, L"clear", 0x01}, |
+ {0xda12e518, L"append", 0x01}, |
+ {0xe74f0653, L"absPage", 0x01}, |
+}; |
+CXFA_FMSimpleExpression::CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op) |
+ : m_line(line), m_op(op) {} |
+void CXFA_FMSimpleExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
+void CXFA_FMSimpleExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} |
+XFA_FM_TOKEN CXFA_FMSimpleExpression::GetOperatorToken() const { |
+ return m_op; |
+} |
+CXFA_FMNullExpression::CXFA_FMNullExpression(FX_DWORD line) |
+ : CXFA_FMSimpleExpression(line, TOKnull) {} |
+void CXFA_FMNullExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << FX_WSTRC(L"null"); |
+} |
+CXFA_FMNumberExpression::CXFA_FMNumberExpression(FX_DWORD line, |
+ CFX_WideStringC wsNumber) |
+ : CXFA_FMSimpleExpression(line, TOKnumber), m_wsNumber(wsNumber) {} |
+void CXFA_FMNumberExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << m_wsNumber; |
+} |
+CXFA_FMStringExpression::CXFA_FMStringExpression(FX_DWORD line, |
+ CFX_WideStringC wsString) |
+ : CXFA_FMSimpleExpression(line, TOKstring), m_wsString(wsString) {} |
+void CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ CFX_WideString tempStr = m_wsString; |
+ if (tempStr.GetLength() > 2) { |
+ javascript.AppendChar(L'\"'); |
+ FX_WCHAR oneChar; |
+ for (int16_t i = 1; i < tempStr.GetLength() - 1; i++) { |
+ oneChar = tempStr[i]; |
+ switch (oneChar) { |
+ case L'\"': { |
+ i++; |
+ javascript << FX_WSTRC(L"\\\""); |
+ } break; |
+ case 0x0d: |
+ break; |
+ case 0x0a: { |
+ javascript << FX_WSTRC(L"\\n"); |
+ } break; |
+ default: { javascript.AppendChar(oneChar); } break; |
+ } |
+ } |
+ javascript.AppendChar(L'\"'); |
+ } else { |
+ javascript << tempStr; |
+ } |
+} |
+CXFA_FMIdentifierExpressionn::CXFA_FMIdentifierExpressionn( |
+ FX_DWORD line, |
+ CFX_WideStringC wsIdentifier) |
+ : CXFA_FMSimpleExpression(line, TOKidentifier), |
+ m_wsIdentifier(wsIdentifier) {} |
+void CXFA_FMIdentifierExpressionn::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ CFX_WideString tempStr = m_wsIdentifier; |
+ if (tempStr.Equal(FX_WSTRC(L"$"))) { |
+ tempStr = FX_WSTRC(L"this"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"!"))) { |
+ tempStr = FX_WSTRC(L"xfa.datasets"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$data"))) { |
+ tempStr = FX_WSTRC(L"xfa.datasets.data"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$event"))) { |
+ tempStr = FX_WSTRC(L"xfa.event"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$form"))) { |
+ tempStr = FX_WSTRC(L"xfa.form"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$host"))) { |
+ tempStr = FX_WSTRC(L"xfa.host"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$layout"))) { |
+ tempStr = FX_WSTRC(L"xfa.layout"); |
+ } else if (tempStr.Equal(FX_WSTRC(L"$template"))) { |
+ tempStr = FX_WSTRC(L"xfa.template"); |
+ } else if (tempStr[0] == L'!') { |
+ tempStr = EXCLAMATION_IN_IDENTIFIER + tempStr.Mid(1); |
+ } |
+ javascript << tempStr; |
+} |
+ |
+CXFA_FMUnaryExpression::CXFA_FMUnaryExpression(FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp) |
+ : CXFA_FMSimpleExpression(line, op), m_pExp(pExp) {} |
+CXFA_FMUnaryExpression::~CXFA_FMUnaryExpression() { |
+ if (m_pExp != 0) { |
+ delete m_pExp; |
+ m_pExp = 0; |
+ } |
+} |
+void CXFA_FMUnaryExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
+CXFA_FMBinExpression::CXFA_FMBinExpression(FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMSimpleExpression(line, op), m_pExp1(pExp1), m_pExp2(pExp2) {} |
+CXFA_FMBinExpression::~CXFA_FMBinExpression() { |
+ if (m_pExp1 != 0) { |
+ delete m_pExp1; |
+ m_pExp1 = 0; |
+ } |
+ if (m_pExp2 != 0) { |
+ delete m_pExp2; |
+ m_pExp2 = 0; |
+ } |
+} |
+void CXFA_FMBinExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
+CXFA_FMAssignExpression::CXFA_FMAssignExpression(FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMAssignExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << FX_WSTRC(L"if ("); |
+ javascript << gs_lpStrExpFuncName[ISFMOBJECT]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L"))\n{\n"); |
+ javascript << gs_lpStrExpFuncName[ASSIGN]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L");\n}\n"); |
+ CFX_WideTextBuf tempExp1; |
+ m_pExp1->ToJavaScript(tempExp1); |
+ if (m_pExp1->GetOperatorToken() == TOKidentifier && |
+ tempExp1.GetWideString() != FX_WSTRC(L"this")) { |
+ javascript << FX_WSTRC(L"else\n{\n"); |
+ javascript << tempExp1; |
+ javascript << FX_WSTRC(L" = "); |
+ javascript << gs_lpStrExpFuncName[ASSIGN]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L");\n}\n"); |
+ } |
+} |
+void CXFA_FMAssignExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
+ javascript << FX_WSTRC(L"if ("); |
+ javascript << gs_lpStrExpFuncName[ISFMOBJECT]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L"))\n{\n"); |
+ javascript << RUNTIMEFUNCTIONRETURNVALUE; |
+ javascript << FX_WSTRC(L" = "); |
+ javascript << gs_lpStrExpFuncName[ASSIGN]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L");\n}\n"); |
+ CFX_WideTextBuf tempExp1; |
+ m_pExp1->ToJavaScript(tempExp1); |
+ if (m_pExp1->GetOperatorToken() == TOKidentifier && |
+ tempExp1.GetWideString() != FX_WSTRC(L"this")) { |
+ javascript << FX_WSTRC(L"else\n{\n"); |
+ javascript << RUNTIMEFUNCTIONRETURNVALUE; |
+ javascript << FX_WSTRC(L" = "); |
+ javascript << tempExp1; |
+ javascript << FX_WSTRC(L" = "); |
+ javascript << gs_lpStrExpFuncName[ASSIGN]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L");\n}\n"); |
+ } |
+} |
+CXFA_FMLogicalOrExpression::CXFA_FMLogicalOrExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMLogicalOrExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[LOGICALOR]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMLogicalAndExpression::CXFA_FMLogicalAndExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMLogicalAndExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[LOGICALAND]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMEqualityExpression::CXFA_FMEqualityExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMEqualityExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ switch (m_op) { |
+ case TOKeq: |
+ case TOKkseq: |
+ javascript << gs_lpStrExpFuncName[EQUALITY]; |
+ break; |
+ case TOKne: |
+ case TOKksne: |
+ javascript << gs_lpStrExpFuncName[NOTEQUALITY]; |
+ break; |
+ default: |
+ FXSYS_assert(FALSE); |
+ break; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMRelationalExpression::CXFA_FMRelationalExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMRelationalExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ switch (m_op) { |
+ case TOKlt: |
+ case TOKkslt: |
+ javascript << gs_lpStrExpFuncName[LESS]; |
+ break; |
+ case TOKgt: |
+ case TOKksgt: |
+ javascript << gs_lpStrExpFuncName[GREATER]; |
+ break; |
+ case TOKle: |
+ case TOKksle: |
+ javascript << gs_lpStrExpFuncName[LESSEQUAL]; |
+ break; |
+ case TOKge: |
+ case TOKksge: |
+ javascript << gs_lpStrExpFuncName[GREATEREQUAL]; |
+ break; |
+ default: |
+ FXSYS_assert(FALSE); |
+ break; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMAdditiveExpression::CXFA_FMAdditiveExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMAdditiveExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ switch (m_op) { |
+ case TOKplus: |
+ javascript << gs_lpStrExpFuncName[PLUS]; |
+ break; |
+ case TOKminus: |
+ javascript << gs_lpStrExpFuncName[MINUS]; |
+ break; |
+ default: |
+ FXSYS_assert(FALSE); |
+ break; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMMultiplicativeExpression::CXFA_FMMultiplicativeExpression( |
+ FX_DWORD line, |
+ XFA_FM_TOKEN op, |
+ CXFA_FMSimpleExpression* pExp1, |
+ CXFA_FMSimpleExpression* pExp2) |
+ : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} |
+void CXFA_FMMultiplicativeExpression::ToJavaScript( |
+ CFX_WideTextBuf& javascript) { |
+ switch (m_op) { |
+ case TOKmul: |
+ javascript << gs_lpStrExpFuncName[MULTIPLE]; |
+ break; |
+ case TOKdiv: |
+ javascript << gs_lpStrExpFuncName[DIVIDE]; |
+ break; |
+ default: |
+ FXSYS_assert(FALSE); |
+ break; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMPosExpression::CXFA_FMPosExpression(FX_DWORD line, |
+ CXFA_FMSimpleExpression* pExp) |
+ : CXFA_FMUnaryExpression(line, TOKplus, pExp) {} |
+void CXFA_FMPosExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[POSITIVE]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMNegExpression::CXFA_FMNegExpression(FX_DWORD line, |
+ CXFA_FMSimpleExpression* pExp) |
+ : CXFA_FMUnaryExpression(line, TOKminus, pExp) {} |
+void CXFA_FMNegExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[NEGATIVE]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMNotExpression::CXFA_FMNotExpression(FX_DWORD line, |
+ CXFA_FMSimpleExpression* pExp) |
+ : CXFA_FMUnaryExpression(line, TOKksnot, pExp) {} |
+void CXFA_FMNotExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[NOT]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMCallExpression::CXFA_FMCallExpression(FX_DWORD line, |
+ CXFA_FMSimpleExpression* pExp, |
+ CFX_PtrArray* pArguments, |
+ FX_BOOL bIsSomMethod) |
+ : CXFA_FMUnaryExpression(line, TOKcall, pExp), |
+ m_bIsSomMethod(bIsSomMethod), |
+ m_pArguments(pArguments) { |
+} |
+CXFA_FMCallExpression::~CXFA_FMCallExpression() { |
+ if (m_pArguments) { |
+ int32_t argc = m_pArguments->GetSize(); |
+ int32_t index = 0; |
+ CXFA_FMSimpleExpression* e = 0; |
+ while (index < argc) { |
+ e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
+ delete e; |
+ index++; |
+ } |
+ m_pArguments->RemoveAll(); |
+ delete m_pArguments; |
+ m_pArguments = 0; |
+ } |
+} |
+FX_BOOL CXFA_FMCallExpression::IsBuildInFunc(CFX_WideTextBuf& funcName) { |
+ int32_t iLength = funcName.GetLength(); |
+ uint32_t uHash = FX_HashCode_String_GetW(funcName.GetBuffer(), iLength, TRUE); |
+ XFA_FMBuildInFunc buildinfunction; |
+ int32_t iStart = 0, |
+ iEnd = (sizeof(buildInFuncs) / sizeof(buildInFuncs[0])) - 1; |
+ int32_t iMid = (iStart + iEnd) / 2; |
+ do { |
+ iMid = (iStart + iEnd) / 2; |
+ buildinfunction = buildInFuncs[iMid]; |
+ if (uHash == buildinfunction.m_uHash) { |
+ funcName.Clear(); |
+ funcName << buildinfunction.m_buildinfunc; |
+ return TRUE; |
+ } else if (uHash < buildinfunction.m_uHash) { |
+ iEnd = iMid - 1; |
+ } else { |
+ iStart = iMid + 1; |
+ } |
+ } while (iStart <= iEnd); |
+ return FALSE; |
+} |
+FX_DWORD CXFA_FMCallExpression::IsSomMethodWithObjPara( |
+ const CFX_WideStringC& methodName) { |
+ int32_t iLength = methodName.GetLength(); |
+ uint32_t uHash = FX_HashCode_String_GetW(methodName.GetPtr(), iLength); |
+ XFA_FMSOMMethod somMethodWithObjPara; |
+ FX_DWORD parameters = 0x00; |
+ int32_t iStart = 0, |
+ iEnd = (sizeof(gs_FMSomMethods) / sizeof(gs_FMSomMethods[0])) - 1; |
+ int32_t iMid = (iStart + iEnd) / 2; |
+ do { |
+ iMid = (iStart + iEnd) / 2; |
+ somMethodWithObjPara = gs_FMSomMethods[iMid]; |
+ if (uHash == somMethodWithObjPara.m_uHash) { |
+ parameters = somMethodWithObjPara.m_dParameters; |
+ break; |
+ } else if (uHash < somMethodWithObjPara.m_uHash) { |
+ iEnd = iMid - 1; |
+ } else { |
+ iStart = iMid + 1; |
+ } |
+ } while (iStart <= iEnd); |
+ return parameters; |
+} |
+void CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ CFX_WideTextBuf funcName; |
+ m_pExp->ToJavaScript(funcName); |
+ if (m_bIsSomMethod) { |
+ javascript << funcName; |
+ javascript << FX_WSTRC(L"("); |
+ if (m_pArguments) { |
+ int32_t argc = m_pArguments->GetSize(); |
+ int32_t index = 0; |
+ FX_DWORD methodPara = IsSomMethodWithObjPara(funcName.GetWideString()); |
+ if (methodPara > 0) { |
+ CXFA_FMSimpleExpression* e = 0; |
+ while (index < argc) { |
+ if ((methodPara & (0x01 << index)) > 0) { |
+ javascript << gs_lpStrExpFuncName[GETFMJSOBJ]; |
+ } else { |
+ javascript << gs_lpStrExpFuncName[GETFMVALUE]; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
+ e->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+ if (index + 1 < argc) { |
+ javascript << FX_WSTRC(L", "); |
+ } |
+ index++; |
+ } |
+ } else { |
+ CXFA_FMSimpleExpression* e = 0; |
+ while (index < argc) { |
+ javascript << gs_lpStrExpFuncName[GETFMVALUE]; |
+ javascript << FX_WSTRC(L"("); |
+ e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
+ e->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+ if (index + 1 < argc) { |
+ javascript << FX_WSTRC(L", "); |
+ } |
+ index++; |
+ } |
+ } |
+ } |
+ javascript << FX_WSTRC(L")"); |
+ } else { |
+ FX_BOOL isEvalFunc = FALSE; |
+ FX_BOOL isExistsFunc = FALSE; |
+ if (IsBuildInFunc(funcName)) { |
+ if (funcName.GetWideString() == FX_WSTRC(L"Eval")) { |
+ isEvalFunc = TRUE; |
+ javascript << FX_WSTRC(L"eval.call(this, "); |
+ javascript << gs_lpStrExpFuncName[CALL]; |
+ javascript << FX_WSTRC(L"Translate"); |
+ } else if (funcName.GetWideString() == FX_WSTRC(L"Exists")) { |
+ isExistsFunc = TRUE; |
+ javascript << gs_lpStrExpFuncName[CALL]; |
+ javascript << funcName; |
+ } else { |
+ javascript << gs_lpStrExpFuncName[CALL]; |
+ javascript << funcName; |
+ } |
+ } else { |
+ javascript << funcName; |
+ } |
+ javascript << FX_WSTRC(L"("); |
+ if (isExistsFunc) { |
+ javascript << FX_WSTRC(L"\n(\nfunction ()\n{\ntry\n{\n"); |
+ if (m_pArguments && m_pArguments->GetSize() > 0) { |
+ CXFA_FMSimpleExpression* e = |
+ (CXFA_FMSimpleExpression*)m_pArguments->GetAt(0); |
+ javascript << FX_WSTRC(L"return "); |
+ e->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L";\n}\n"); |
+ } else { |
+ javascript << FX_WSTRC(L"return 0;\n}\n"); |
+ } |
+ javascript << FX_WSTRC( |
+ L"catch(accessExceptions)\n{\nreturn 0;\n}\n}\n).call(this)\n"); |
+ } else if (m_pArguments) { |
+ int32_t argc = m_pArguments->GetSize(); |
+ int32_t index = 0; |
+ CXFA_FMSimpleExpression* e = 0; |
+ while (index < argc) { |
+ e = (CXFA_FMSimpleExpression*)m_pArguments->GetAt(index); |
+ e->ToJavaScript(javascript); |
+ if (index + 1 < argc) { |
+ javascript << FX_WSTRC(L", "); |
+ } |
+ index++; |
+ } |
+ } |
+ javascript << FX_WSTRC(L")"); |
+ if (isEvalFunc) { |
+ javascript << FX_WSTRC(L")"); |
+ } |
+ } |
+} |
+CXFA_FMDotAccessorExpression::CXFA_FMDotAccessorExpression( |
+ FX_DWORD line, |
+ CXFA_FMSimpleExpression* pAccessor, |
+ XFA_FM_TOKEN op, |
+ CFX_WideStringC wsIdentifier, |
+ CXFA_FMSimpleExpression* pIndexExp) |
+ : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), |
+ m_wsIdentifier(wsIdentifier) {} |
+void CXFA_FMDotAccessorExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[DOT]; |
+ javascript << FX_WSTRC(L"("); |
+ if (m_pExp1) { |
+ m_pExp1->ToJavaScript(javascript); |
+ } else { |
+ javascript << FX_WSTRC(L"null"); |
+ } |
+ javascript << FX_WSTRC(L", "); |
+ javascript << FX_WSTRC(L"\""); |
+ if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { |
+ m_pExp1->ToJavaScript(javascript); |
+ } |
+ javascript << FX_WSTRC(L"\", "); |
+ if (m_op == TOKdotscream) { |
+ javascript << FX_WSTRC(L"\"#"); |
+ javascript << m_wsIdentifier; |
+ javascript << FX_WSTRC(L"\", "); |
+ } else if (m_op == TOKdotstar) { |
+ javascript << FX_WSTRC(L"\"*\", "); |
+ } else if (m_op == TOKcall) { |
+ javascript << FX_WSTRC(L"\"\", "); |
+ } else { |
+ javascript << FX_WSTRC(L"\""); |
+ javascript << m_wsIdentifier; |
+ javascript << FX_WSTRC(L"\", "); |
+ } |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMIndexExpression::CXFA_FMIndexExpression( |
+ FX_DWORD line, |
+ XFA_FM_AccessorIndex accessorIndex, |
+ CXFA_FMSimpleExpression* pIndexExp, |
+ FX_BOOL bIsStarIndex) |
+ : CXFA_FMUnaryExpression(line, TOKlbracket, pIndexExp), |
+ m_accessorIndex(accessorIndex), |
+ m_bIsStarIndex(bIsStarIndex) {} |
+void CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ switch (m_accessorIndex) { |
+ case ACCESSOR_NO_INDEX: |
+ javascript << FX_WSTRC(L"0"); |
+ break; |
+ case ACCESSOR_NO_RELATIVEINDEX: |
+ javascript << FX_WSTRC(L"1"); |
+ break; |
+ case ACCESSOR_POSITIVE_INDEX: |
+ javascript << FX_WSTRC(L"2"); |
+ break; |
+ case ACCESSOR_NEGATIVE_INDEX: |
+ javascript << FX_WSTRC(L"3"); |
+ break; |
+ default: |
+ javascript << FX_WSTRC(L"0"); |
+ } |
+ if (!m_bIsStarIndex) { |
+ javascript << FX_WSTRC(L", "); |
+ if (m_pExp) { |
+ m_pExp->ToJavaScript(javascript); |
+ } else { |
+ javascript << FX_WSTRC(L"0"); |
+ } |
+ } |
+} |
+CXFA_FMDotDotAccessorExpression::CXFA_FMDotDotAccessorExpression( |
+ FX_DWORD line, |
+ CXFA_FMSimpleExpression* pAccessor, |
+ XFA_FM_TOKEN op, |
+ CFX_WideStringC wsIdentifier, |
+ CXFA_FMSimpleExpression* pIndexExp) |
+ : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), |
+ m_wsIdentifier(wsIdentifier) {} |
+void CXFA_FMDotDotAccessorExpression::ToJavaScript( |
+ CFX_WideTextBuf& javascript) { |
+ javascript << gs_lpStrExpFuncName[DOTDOT]; |
+ javascript << FX_WSTRC(L"("); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L", "); |
+ javascript << FX_WSTRC(L"\""); |
+ if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { |
+ m_pExp1->ToJavaScript(javascript); |
+ } |
+ javascript << FX_WSTRC(L"\", "); |
+ javascript << FX_WSTRC(L"\""); |
+ javascript << m_wsIdentifier; |
+ javascript << FX_WSTRC(L"\", "); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L")"); |
+} |
+CXFA_FMMethodCallExpression::CXFA_FMMethodCallExpression( |
+ FX_DWORD line, |
+ CXFA_FMSimpleExpression* pAccessorExp1, |
+ CXFA_FMSimpleExpression* pCallExp) |
+ : CXFA_FMBinExpression(line, TOKdot, pAccessorExp1, pCallExp) {} |
+void CXFA_FMMethodCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
+ javascript << FX_WSTRC(L"(\nfunction ()\n{\n"); |
+ javascript << FX_WSTRC(L"var method_return_value = null;\n"); |
+ javascript << FX_WSTRC(L"var accessor_object = "); |
+ m_pExp1->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L";\n"); |
+ javascript << FX_WSTRC(L"if ("); |
+ javascript << gs_lpStrExpFuncName[ISFMARRAY]; |
+ javascript << FX_WSTRC(L"(accessor_object))\n{\n"); |
+ javascript << FX_WSTRC( |
+ L"for(var index = accessor_object.length - 1; index > 1; index--)\n{\n"); |
+ javascript << FX_WSTRC(L"method_return_value = accessor_object[index]."); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L";\n}\n}\n"); |
+ javascript << FX_WSTRC(L"else\n{\nmethod_return_value = accessor_object."); |
+ m_pExp2->ToJavaScript(javascript); |
+ javascript << FX_WSTRC(L";\n}\n"); |
+ javascript << FX_WSTRC(L"return method_return_value;\n"); |
+ javascript << FX_WSTRC(L"}\n).call(this)"); |
+} |