| 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)");
|
| +}
|
|
|