summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/fm2js/xfa_expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fxfa/src/fm2js/xfa_expression.cpp')
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_expression.cpp1362
1 files changed, 681 insertions, 681 deletions
diff --git a/xfa/src/fxfa/src/fm2js/xfa_expression.cpp b/xfa/src/fxfa/src/fm2js/xfa_expression.cpp
index 53b7197e10..eff1eba3d8 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_expression.cpp
+++ b/xfa/src/fxfa/src/fm2js/xfa_expression.cpp
@@ -1,681 +1,681 @@
-// 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 RUNTIMEBLOCKTEMPARRAY =
- FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array");
-static CFX_WideStringC RUNTIMEBLOCKTEMPARRAYINDEX =
- FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array_index");
-CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line)
- : m_type(XFA_FM_EXPTYPE_UNKNOWN), m_line(line) {
-}
-CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type)
- : m_type(type), m_line(line) {
-}
-void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {}
-void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {}
-CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition(
- FX_DWORD line,
- FX_BOOL isGlobal,
- const CFX_WideStringC& wsName,
- CFX_WideStringCArray* pArguments,
- CFX_PtrArray* pExpressions)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC),
- m_wsName(wsName),
- m_pArguments(pArguments),
- m_pExpressions(pExpressions),
- m_isGlobal(isGlobal) {
-}
-CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() {
- if (m_pArguments) {
- m_pArguments->RemoveAll();
- delete m_pArguments;
- m_pArguments = 0;
- }
- if (m_pExpressions) {
- int32_t expc = m_pExpressions->GetSize();
- int32_t index = 0;
- CXFA_FMExpression* e = 0;
- while (index < expc) {
- e = (CXFA_FMExpression*)m_pExpressions->GetAt(index);
- delete e;
- index++;
- }
- m_pExpressions->RemoveAll();
- delete m_pExpressions;
- m_pExpressions = 0;
- }
-}
-void CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& javascript) {
- if (m_isGlobal && (!m_pExpressions || m_pExpressions->GetSize() == 0)) {
- javascript << FX_WSTRC(L"// comments only");
- return;
- }
- if (m_isGlobal) {
- javascript << FX_WSTRC(L"(\n");
- }
- javascript << FX_WSTRC(L"function ");
- if (m_wsName.GetAt(0) == L'!') {
- CFX_WideString tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
- javascript << tempName;
- } else {
- javascript << m_wsName;
- }
- javascript << FX_WSTRC(L"(");
- if (m_pArguments != 0) {
- int32_t argc = m_pArguments->GetSize();
- int32_t index = 0;
- CFX_WideStringC identifier = 0;
- while (index < argc) {
- identifier = m_pArguments->GetAt(index);
- if (identifier.GetAt(0) == L'!') {
- CFX_WideString tempIdentifier =
- EXCLAMATION_IN_IDENTIFIER + identifier.Mid(1);
- javascript << tempIdentifier;
- } else {
- javascript << identifier;
- }
- if (index + 1 < argc) {
- javascript << FX_WSTRC(L", ");
- }
- index++;
- }
- }
- javascript << FX_WSTRC(L")\n{\n");
- javascript << FX_WSTRC(L"var ");
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = null;\n");
- if (m_pExpressions) {
- int32_t expc = m_pExpressions->GetSize();
- int32_t index = 0;
- CXFA_FMExpression* e = 0;
- while (index < expc) {
- e = (CXFA_FMExpression*)m_pExpressions->GetAt(index);
- if (index + 1 < expc) {
- e->ToJavaScript(javascript);
- } else {
- e->ToImpliedReturnJS(javascript);
- }
- index++;
- }
- }
- javascript << FX_WSTRC(L"return ");
- if (m_isGlobal) {
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L")");
- } else {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- }
- javascript << FX_WSTRC(L";\n}\n");
- if (m_isGlobal) {
- javascript << FX_WSTRC(L").call(this);\n");
- }
-}
-void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {}
-CXFA_FMVarExpression::CXFA_FMVarExpression(FX_DWORD line,
- const CFX_WideStringC& wsName,
- CXFA_FMExpression* pInit)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR),
- m_wsName(wsName),
- m_pInit(pInit) {}
-CXFA_FMVarExpression::~CXFA_FMVarExpression() {
- if (m_pInit) {
- delete m_pInit;
- m_pInit = 0;
- }
-}
-void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"var ");
- CFX_WideString tempName = m_wsName;
- if (m_wsName.GetAt(0) == L'!') {
- tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
- }
- javascript << tempName;
- javascript << FX_WSTRC(L" = ");
- if (m_pInit) {
- m_pInit->ToJavaScript(javascript);
- javascript << tempName;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(VARFILTER);
- javascript << FX_WSTRC(L"(");
- javascript << tempName;
- javascript << FX_WSTRC(L");\n");
- } else {
- javascript << FX_WSTRC(L"\"\";\n");
- }
-}
-void CXFA_FMVarExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"var ");
- CFX_WideString tempName = m_wsName;
- if (m_wsName.GetAt(0) == L'!') {
- tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
- }
- javascript << tempName;
- javascript << FX_WSTRC(L" = ");
- if (m_pInit) {
- m_pInit->ToJavaScript(javascript);
- javascript << tempName;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(VARFILTER);
- javascript << FX_WSTRC(L"(");
- javascript << tempName;
- javascript << FX_WSTRC(L");\n");
- } else {
- javascript << FX_WSTRC(L"\"\";\n");
- }
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = ");
- javascript << tempName;
- javascript << FX_WSTRC(L";\n");
-}
-CXFA_FMExpExpression::CXFA_FMExpExpression(FX_DWORD line,
- CXFA_FMSimpleExpression* pExpression)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {}
-CXFA_FMExpExpression::~CXFA_FMExpExpression() {
- if (m_pExpression) {
- delete m_pExpression;
- m_pExpression = 0;
- }
-}
-void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- if (m_pExpression->GetOperatorToken() == TOKassign) {
- m_pExpression->ToJavaScript(javascript);
- } else {
- m_pExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L";\n");
- }
-}
-void CXFA_FMExpExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- if (m_pExpression->GetOperatorToken() == TOKassign) {
- m_pExpression->ToImpliedReturnJS(javascript);
- } else {
- if (m_pExpression->GetOperatorToken() == TOKstar ||
- m_pExpression->GetOperatorToken() == TOKdotstar ||
- m_pExpression->GetOperatorToken() == TOKdotscream ||
- m_pExpression->GetOperatorToken() == TOKdotdot ||
- m_pExpression->GetOperatorToken() == TOKdot) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L");\n");
- } else {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = ");
- m_pExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L";\n");
- }
- }
-}
-CXFA_FMBlockExpression::CXFA_FMBlockExpression(FX_DWORD line,
- CFX_PtrArray* pExpressionList)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK),
- m_pExpressionList(pExpressionList) {}
-CXFA_FMBlockExpression::~CXFA_FMBlockExpression() {
- if (m_pExpressionList) {
- int32_t expc = m_pExpressionList->GetSize();
- int32_t index = 0;
- CXFA_FMExpression* e = 0;
- while (index < expc) {
- e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
- delete e;
- index++;
- }
- m_pExpressionList->RemoveAll();
- delete m_pExpressionList;
- m_pExpressionList = 0;
- }
-}
-void CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"{\n");
- if (m_pExpressionList) {
- int32_t expc = m_pExpressionList->GetSize();
- int32_t index = 0;
- CXFA_FMExpression* e = 0;
- while (index < expc) {
- e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
- e->ToJavaScript(javascript);
- index++;
- }
- }
- javascript << FX_WSTRC(L"}\n");
-}
-void CXFA_FMBlockExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"{\n");
- if (m_pExpressionList) {
- int32_t expc = m_pExpressionList->GetSize();
- int32_t index = 0;
- CXFA_FMExpression* e = 0;
- while (index < expc) {
- e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
- if (index + 1 == expc) {
- e->ToImpliedReturnJS(javascript);
- } else {
- e->ToJavaScript(javascript);
- }
- index++;
- }
- }
- javascript << FX_WSTRC(L"}\n");
-}
-CXFA_FMDoExpression::CXFA_FMDoExpression(FX_DWORD line,
- CXFA_FMExpression* pList)
- : CXFA_FMExpression(line), m_pList(pList) {}
-CXFA_FMDoExpression::~CXFA_FMDoExpression() {
- if (m_pList) {
- delete m_pList;
- m_pList = 0;
- }
-}
-void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- m_pList->ToJavaScript(javascript);
-}
-void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- m_pList->ToImpliedReturnJS(javascript);
-}
-CXFA_FMIfExpression::CXFA_FMIfExpression(FX_DWORD line,
- CXFA_FMSimpleExpression* pExpression,
- CXFA_FMExpression* pIfExpression,
- CXFA_FMExpression* pElseExpression)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF),
- m_pExpression(pExpression),
- m_pIfExpression(pIfExpression),
- m_pElseExpression(pElseExpression) {}
-CXFA_FMIfExpression::~CXFA_FMIfExpression() {
- if (m_pExpression) {
- delete m_pExpression;
- m_pExpression = 0;
- }
- if (m_pIfExpression) {
- delete m_pIfExpression;
- m_pIfExpression = 0;
- }
- if (m_pElseExpression) {
- delete m_pElseExpression;
- m_pElseExpression = 0;
- }
-}
-void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"if (");
- if (m_pExpression) {
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")");
- }
- javascript << FX_WSTRC(L")\n");
- if (m_pIfExpression) {
- m_pIfExpression->ToJavaScript(javascript);
- }
- if (m_pElseExpression) {
- if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) {
- javascript << FX_WSTRC(L"else\n");
- javascript << FX_WSTRC(L"{\n");
- m_pElseExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"}\n");
- } else {
- javascript << FX_WSTRC(L"else\n");
- m_pElseExpression->ToJavaScript(javascript);
- }
- }
-}
-void CXFA_FMIfExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"if (");
- if (m_pExpression) {
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pExpression->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")");
- }
- javascript << FX_WSTRC(L")\n");
- if (m_pIfExpression) {
- m_pIfExpression->ToImpliedReturnJS(javascript);
- }
- if (m_pElseExpression) {
- if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) {
- javascript << FX_WSTRC(L"else\n");
- javascript << FX_WSTRC(L"{\n");
- m_pElseExpression->ToImpliedReturnJS(javascript);
- javascript << FX_WSTRC(L"}\n");
- } else {
- javascript << FX_WSTRC(L"else\n");
- m_pElseExpression->ToImpliedReturnJS(javascript);
- }
- }
-}
-CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {}
-void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {}
-void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {}
-CXFA_FMWhileExpression::CXFA_FMWhileExpression(
- FX_DWORD line,
- CXFA_FMSimpleExpression* pCondition,
- CXFA_FMExpression* pExpression)
- : CXFA_FMLoopExpression(line),
- m_pCondition(pCondition),
- m_pExpression(pExpression) {}
-CXFA_FMWhileExpression::~CXFA_FMWhileExpression() {
- if (m_pCondition) {
- delete m_pCondition;
- m_pCondition = 0;
- }
- if (m_pExpression) {
- delete m_pExpression;
- m_pExpression = 0;
- }
-}
-void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"while (");
- m_pCondition->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")\n");
- m_pExpression->ToJavaScript(javascript);
-}
-void CXFA_FMWhileExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"while (");
- m_pCondition->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")\n");
- m_pExpression->ToImpliedReturnJS(javascript);
-}
-CXFA_FMBreakExpression::CXFA_FMBreakExpression(FX_DWORD line)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BREAK) {
-}
-CXFA_FMBreakExpression::~CXFA_FMBreakExpression() {}
-void CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"break;\n");
-}
-void CXFA_FMBreakExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"break;\n");
-}
-CXFA_FMContinueExpression::CXFA_FMContinueExpression(FX_DWORD line)
- : CXFA_FMExpression(line, XFA_FM_EXPTYPE_CONTINUE) {
-}
-CXFA_FMContinueExpression::~CXFA_FMContinueExpression() {}
-void CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"continue;\n");
-}
-void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"continue;\n");
-}
-CXFA_FMForExpression::CXFA_FMForExpression(FX_DWORD line,
- const CFX_WideStringC& wsVariant,
- CXFA_FMSimpleExpression* pAssignment,
- CXFA_FMSimpleExpression* pAccessor,
- int32_t iDirection,
- CXFA_FMSimpleExpression* pStep,
- CXFA_FMExpression* pList)
- : CXFA_FMLoopExpression(line),
- m_wsVariant(wsVariant),
- m_pAssignment(pAssignment),
- m_pAccessor(pAccessor),
- m_iDirection(iDirection),
- m_pStep(pStep),
- m_pList(pList) {}
-CXFA_FMForExpression::~CXFA_FMForExpression() {
- if (m_pAssignment) {
- delete m_pAssignment;
- m_pAssignment = 0;
- }
- if (m_pAccessor) {
- delete m_pAccessor;
- m_pAccessor = 0;
- }
- if (m_pStep) {
- delete m_pStep;
- m_pStep = 0;
- }
- if (m_pList) {
- delete m_pList;
- m_pList = 0;
- }
-}
-void CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"{\nvar ");
- CFX_WideString tempVariant;
- if (m_wsVariant.GetAt(0) == L'!') {
- tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1);
- javascript << tempVariant;
- } else {
- tempVariant = m_wsVariant;
- javascript << m_wsVariant;
- }
- javascript << FX_WSTRC(L" = null;\n");
- javascript << FX_WSTRC(L"for (");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAssignment->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- if (m_iDirection == 1) {
- javascript << FX_WSTRC(L" <= ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAccessor->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" += ");
- } else {
- javascript << FX_WSTRC(L" >= ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAccessor->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" -= ");
- }
- if (m_pStep) {
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pStep->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")");
- } else {
- javascript << FX_WSTRC(L"1");
- }
- javascript << FX_WSTRC(L")\n");
- m_pList->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"}\n");
-}
-void CXFA_FMForExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"{\nvar ");
- CFX_WideString tempVariant;
- if (m_wsVariant.GetAt(0) == L'!') {
- tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1);
- javascript << tempVariant;
- } else {
- tempVariant = m_wsVariant;
- javascript << m_wsVariant;
- }
- javascript << FX_WSTRC(L" = null;\n");
- javascript << FX_WSTRC(L"for (");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAssignment->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- if (m_iDirection == 1) {
- javascript << FX_WSTRC(L" <= ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAccessor->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" += ");
- } else {
- javascript << FX_WSTRC(L" >= ");
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pAccessor->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"); ");
- javascript << tempVariant;
- javascript << FX_WSTRC(L" -= ");
- }
- if (m_pStep) {
- javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
- javascript << FX_WSTRC(L"(");
- m_pStep->ToJavaScript(javascript);
- javascript << FX_WSTRC(L")");
- } else {
- javascript << FX_WSTRC(L"1");
- }
- javascript << FX_WSTRC(L")\n");
- m_pList->ToImpliedReturnJS(javascript);
- javascript << FX_WSTRC(L"}\n");
-}
-CXFA_FMForeachExpression::CXFA_FMForeachExpression(
- FX_DWORD line,
- const CFX_WideStringC& wsIdentifier,
- CFX_PtrArray* pAccessors,
- CXFA_FMExpression* pList)
- : CXFA_FMLoopExpression(line),
- m_wsIdentifier(wsIdentifier),
- m_pAccessors(pAccessors),
- m_pList(pList) {}
-CXFA_FMForeachExpression::~CXFA_FMForeachExpression() {
- if (m_pList) {
- delete m_pList;
- m_pList = 0;
- }
- if (m_pAccessors) {
- int32_t size = m_pAccessors->GetSize();
- int32_t index = 0;
- CXFA_FMSimpleExpression* e = 0;
- while (index < size) {
- e = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
- delete e;
- index++;
- }
- m_pAccessors->RemoveAll();
- delete m_pAccessors;
- m_pAccessors = 0;
- }
-}
-void CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
- javascript << FX_WSTRC(L"{\n");
- javascript << FX_WSTRC(L"var ");
- if (m_wsIdentifier.GetAt(0) == L'!') {
- CFX_WideString tempIdentifier =
- EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
- javascript << tempIdentifier;
- } else {
- javascript << m_wsIdentifier;
- }
- javascript << FX_WSTRC(L" = null;\n");
- javascript << FX_WSTRC(L"var ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT);
- javascript << FX_WSTRC(L"(");
- int32_t iSize = m_pAccessors->GetSize();
- int32_t index = 0;
- CXFA_FMSimpleExpression* s = 0;
- while (index < iSize) {
- s = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
- s->ToJavaScript(javascript);
- if (index + 1 < iSize) {
- javascript << FX_WSTRC(L", ");
- }
- index++;
- }
- s = 0;
- javascript << FX_WSTRC(L");\n");
- javascript << FX_WSTRC(L"var ");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"while(");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L" < ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L".length)\n{\n");
- if (m_wsIdentifier.GetAt(0) == L'!') {
- CFX_WideString tempIdentifier =
- EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
- javascript << tempIdentifier;
- } else {
- javascript << m_wsIdentifier;
- }
- javascript << FX_WSTRC(L" = ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L"[");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L"++];\n");
- m_pList->ToJavaScript(javascript);
- javascript << FX_WSTRC(L"}\n");
- javascript << FX_WSTRC(L"}\n");
-}
-void CXFA_FMForeachExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
- javascript << RUNTIMEFUNCTIONRETURNVALUE;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"{\n");
- javascript << FX_WSTRC(L"var ");
- if (m_wsIdentifier.GetAt(0) == L'!') {
- CFX_WideString tempIdentifier =
- EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
- javascript << tempIdentifier;
- } else {
- javascript << m_wsIdentifier;
- }
- javascript << FX_WSTRC(L" = null;\n");
- javascript << FX_WSTRC(L"var ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L" = ");
- javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT);
- javascript << FX_WSTRC(L"(");
- int32_t iSize = m_pAccessors->GetSize();
- int32_t index = 0;
- CXFA_FMSimpleExpression* s = 0;
- while (index < iSize) {
- s = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
- s->ToJavaScript(javascript);
- if (index + 1 < iSize) {
- javascript << FX_WSTRC(L", ");
- }
- index++;
- }
- s = 0;
- javascript << FX_WSTRC(L");\n");
- javascript << FX_WSTRC(L"var ");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L" = 0;\n");
- javascript << FX_WSTRC(L"while(");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L" < ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L".length)\n{\n");
- if (m_wsIdentifier.GetAt(0) == L'!') {
- CFX_WideString tempIdentifier =
- EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
- javascript << tempIdentifier;
- } else {
- javascript << m_wsIdentifier;
- }
- javascript << FX_WSTRC(L" = ");
- javascript << RUNTIMEBLOCKTEMPARRAY;
- javascript << FX_WSTRC(L"[");
- javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
- javascript << FX_WSTRC(L"++];\n");
- m_pList->ToImpliedReturnJS(javascript);
- javascript << FX_WSTRC(L"}\n");
- javascript << FX_WSTRC(L"}\n");
-}
+// 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 RUNTIMEBLOCKTEMPARRAY =
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array");
+static CFX_WideStringC RUNTIMEBLOCKTEMPARRAYINDEX =
+ FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array_index");
+CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line)
+ : m_type(XFA_FM_EXPTYPE_UNKNOWN), m_line(line) {
+}
+CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type)
+ : m_type(type), m_line(line) {
+}
+void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {}
+void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {}
+CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition(
+ FX_DWORD line,
+ FX_BOOL isGlobal,
+ const CFX_WideStringC& wsName,
+ CFX_WideStringCArray* pArguments,
+ CFX_PtrArray* pExpressions)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC),
+ m_wsName(wsName),
+ m_pArguments(pArguments),
+ m_pExpressions(pExpressions),
+ m_isGlobal(isGlobal) {
+}
+CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() {
+ if (m_pArguments) {
+ m_pArguments->RemoveAll();
+ delete m_pArguments;
+ m_pArguments = 0;
+ }
+ if (m_pExpressions) {
+ int32_t expc = m_pExpressions->GetSize();
+ int32_t index = 0;
+ CXFA_FMExpression* e = 0;
+ while (index < expc) {
+ e = (CXFA_FMExpression*)m_pExpressions->GetAt(index);
+ delete e;
+ index++;
+ }
+ m_pExpressions->RemoveAll();
+ delete m_pExpressions;
+ m_pExpressions = 0;
+ }
+}
+void CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& javascript) {
+ if (m_isGlobal && (!m_pExpressions || m_pExpressions->GetSize() == 0)) {
+ javascript << FX_WSTRC(L"// comments only");
+ return;
+ }
+ if (m_isGlobal) {
+ javascript << FX_WSTRC(L"(\n");
+ }
+ javascript << FX_WSTRC(L"function ");
+ if (m_wsName.GetAt(0) == L'!') {
+ CFX_WideString tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
+ javascript << tempName;
+ } else {
+ javascript << m_wsName;
+ }
+ javascript << FX_WSTRC(L"(");
+ if (m_pArguments != 0) {
+ int32_t argc = m_pArguments->GetSize();
+ int32_t index = 0;
+ CFX_WideStringC identifier = 0;
+ while (index < argc) {
+ identifier = m_pArguments->GetAt(index);
+ if (identifier.GetAt(0) == L'!') {
+ CFX_WideString tempIdentifier =
+ EXCLAMATION_IN_IDENTIFIER + identifier.Mid(1);
+ javascript << tempIdentifier;
+ } else {
+ javascript << identifier;
+ }
+ if (index + 1 < argc) {
+ javascript << FX_WSTRC(L", ");
+ }
+ index++;
+ }
+ }
+ javascript << FX_WSTRC(L")\n{\n");
+ javascript << FX_WSTRC(L"var ");
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = null;\n");
+ if (m_pExpressions) {
+ int32_t expc = m_pExpressions->GetSize();
+ int32_t index = 0;
+ CXFA_FMExpression* e = 0;
+ while (index < expc) {
+ e = (CXFA_FMExpression*)m_pExpressions->GetAt(index);
+ if (index + 1 < expc) {
+ e->ToJavaScript(javascript);
+ } else {
+ e->ToImpliedReturnJS(javascript);
+ }
+ index++;
+ }
+ }
+ javascript << FX_WSTRC(L"return ");
+ if (m_isGlobal) {
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L")");
+ } else {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ }
+ javascript << FX_WSTRC(L";\n}\n");
+ if (m_isGlobal) {
+ javascript << FX_WSTRC(L").call(this);\n");
+ }
+}
+void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {}
+CXFA_FMVarExpression::CXFA_FMVarExpression(FX_DWORD line,
+ const CFX_WideStringC& wsName,
+ CXFA_FMExpression* pInit)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR),
+ m_wsName(wsName),
+ m_pInit(pInit) {}
+CXFA_FMVarExpression::~CXFA_FMVarExpression() {
+ if (m_pInit) {
+ delete m_pInit;
+ m_pInit = 0;
+ }
+}
+void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"var ");
+ CFX_WideString tempName = m_wsName;
+ if (m_wsName.GetAt(0) == L'!') {
+ tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
+ }
+ javascript << tempName;
+ javascript << FX_WSTRC(L" = ");
+ if (m_pInit) {
+ m_pInit->ToJavaScript(javascript);
+ javascript << tempName;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(VARFILTER);
+ javascript << FX_WSTRC(L"(");
+ javascript << tempName;
+ javascript << FX_WSTRC(L");\n");
+ } else {
+ javascript << FX_WSTRC(L"\"\";\n");
+ }
+}
+void CXFA_FMVarExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"var ");
+ CFX_WideString tempName = m_wsName;
+ if (m_wsName.GetAt(0) == L'!') {
+ tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1);
+ }
+ javascript << tempName;
+ javascript << FX_WSTRC(L" = ");
+ if (m_pInit) {
+ m_pInit->ToJavaScript(javascript);
+ javascript << tempName;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(VARFILTER);
+ javascript << FX_WSTRC(L"(");
+ javascript << tempName;
+ javascript << FX_WSTRC(L");\n");
+ } else {
+ javascript << FX_WSTRC(L"\"\";\n");
+ }
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = ");
+ javascript << tempName;
+ javascript << FX_WSTRC(L";\n");
+}
+CXFA_FMExpExpression::CXFA_FMExpExpression(FX_DWORD line,
+ CXFA_FMSimpleExpression* pExpression)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {}
+CXFA_FMExpExpression::~CXFA_FMExpExpression() {
+ if (m_pExpression) {
+ delete m_pExpression;
+ m_pExpression = 0;
+ }
+}
+void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ if (m_pExpression->GetOperatorToken() == TOKassign) {
+ m_pExpression->ToJavaScript(javascript);
+ } else {
+ m_pExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L";\n");
+ }
+}
+void CXFA_FMExpExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ if (m_pExpression->GetOperatorToken() == TOKassign) {
+ m_pExpression->ToImpliedReturnJS(javascript);
+ } else {
+ if (m_pExpression->GetOperatorToken() == TOKstar ||
+ m_pExpression->GetOperatorToken() == TOKdotstar ||
+ m_pExpression->GetOperatorToken() == TOKdotscream ||
+ m_pExpression->GetOperatorToken() == TOKdotdot ||
+ m_pExpression->GetOperatorToken() == TOKdot) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L");\n");
+ } else {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = ");
+ m_pExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L";\n");
+ }
+ }
+}
+CXFA_FMBlockExpression::CXFA_FMBlockExpression(FX_DWORD line,
+ CFX_PtrArray* pExpressionList)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK),
+ m_pExpressionList(pExpressionList) {}
+CXFA_FMBlockExpression::~CXFA_FMBlockExpression() {
+ if (m_pExpressionList) {
+ int32_t expc = m_pExpressionList->GetSize();
+ int32_t index = 0;
+ CXFA_FMExpression* e = 0;
+ while (index < expc) {
+ e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
+ delete e;
+ index++;
+ }
+ m_pExpressionList->RemoveAll();
+ delete m_pExpressionList;
+ m_pExpressionList = 0;
+ }
+}
+void CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"{\n");
+ if (m_pExpressionList) {
+ int32_t expc = m_pExpressionList->GetSize();
+ int32_t index = 0;
+ CXFA_FMExpression* e = 0;
+ while (index < expc) {
+ e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
+ e->ToJavaScript(javascript);
+ index++;
+ }
+ }
+ javascript << FX_WSTRC(L"}\n");
+}
+void CXFA_FMBlockExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"{\n");
+ if (m_pExpressionList) {
+ int32_t expc = m_pExpressionList->GetSize();
+ int32_t index = 0;
+ CXFA_FMExpression* e = 0;
+ while (index < expc) {
+ e = (CXFA_FMExpression*)m_pExpressionList->GetAt(index);
+ if (index + 1 == expc) {
+ e->ToImpliedReturnJS(javascript);
+ } else {
+ e->ToJavaScript(javascript);
+ }
+ index++;
+ }
+ }
+ javascript << FX_WSTRC(L"}\n");
+}
+CXFA_FMDoExpression::CXFA_FMDoExpression(FX_DWORD line,
+ CXFA_FMExpression* pList)
+ : CXFA_FMExpression(line), m_pList(pList) {}
+CXFA_FMDoExpression::~CXFA_FMDoExpression() {
+ if (m_pList) {
+ delete m_pList;
+ m_pList = 0;
+ }
+}
+void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ m_pList->ToJavaScript(javascript);
+}
+void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ m_pList->ToImpliedReturnJS(javascript);
+}
+CXFA_FMIfExpression::CXFA_FMIfExpression(FX_DWORD line,
+ CXFA_FMSimpleExpression* pExpression,
+ CXFA_FMExpression* pIfExpression,
+ CXFA_FMExpression* pElseExpression)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF),
+ m_pExpression(pExpression),
+ m_pIfExpression(pIfExpression),
+ m_pElseExpression(pElseExpression) {}
+CXFA_FMIfExpression::~CXFA_FMIfExpression() {
+ if (m_pExpression) {
+ delete m_pExpression;
+ m_pExpression = 0;
+ }
+ if (m_pIfExpression) {
+ delete m_pIfExpression;
+ m_pIfExpression = 0;
+ }
+ if (m_pElseExpression) {
+ delete m_pElseExpression;
+ m_pElseExpression = 0;
+ }
+}
+void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"if (");
+ if (m_pExpression) {
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")");
+ }
+ javascript << FX_WSTRC(L")\n");
+ if (m_pIfExpression) {
+ m_pIfExpression->ToJavaScript(javascript);
+ }
+ if (m_pElseExpression) {
+ if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) {
+ javascript << FX_WSTRC(L"else\n");
+ javascript << FX_WSTRC(L"{\n");
+ m_pElseExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"}\n");
+ } else {
+ javascript << FX_WSTRC(L"else\n");
+ m_pElseExpression->ToJavaScript(javascript);
+ }
+ }
+}
+void CXFA_FMIfExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"if (");
+ if (m_pExpression) {
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pExpression->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")");
+ }
+ javascript << FX_WSTRC(L")\n");
+ if (m_pIfExpression) {
+ m_pIfExpression->ToImpliedReturnJS(javascript);
+ }
+ if (m_pElseExpression) {
+ if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) {
+ javascript << FX_WSTRC(L"else\n");
+ javascript << FX_WSTRC(L"{\n");
+ m_pElseExpression->ToImpliedReturnJS(javascript);
+ javascript << FX_WSTRC(L"}\n");
+ } else {
+ javascript << FX_WSTRC(L"else\n");
+ m_pElseExpression->ToImpliedReturnJS(javascript);
+ }
+ }
+}
+CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {}
+void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {}
+void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {}
+CXFA_FMWhileExpression::CXFA_FMWhileExpression(
+ FX_DWORD line,
+ CXFA_FMSimpleExpression* pCondition,
+ CXFA_FMExpression* pExpression)
+ : CXFA_FMLoopExpression(line),
+ m_pCondition(pCondition),
+ m_pExpression(pExpression) {}
+CXFA_FMWhileExpression::~CXFA_FMWhileExpression() {
+ if (m_pCondition) {
+ delete m_pCondition;
+ m_pCondition = 0;
+ }
+ if (m_pExpression) {
+ delete m_pExpression;
+ m_pExpression = 0;
+ }
+}
+void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"while (");
+ m_pCondition->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")\n");
+ m_pExpression->ToJavaScript(javascript);
+}
+void CXFA_FMWhileExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"while (");
+ m_pCondition->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")\n");
+ m_pExpression->ToImpliedReturnJS(javascript);
+}
+CXFA_FMBreakExpression::CXFA_FMBreakExpression(FX_DWORD line)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BREAK) {
+}
+CXFA_FMBreakExpression::~CXFA_FMBreakExpression() {}
+void CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"break;\n");
+}
+void CXFA_FMBreakExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"break;\n");
+}
+CXFA_FMContinueExpression::CXFA_FMContinueExpression(FX_DWORD line)
+ : CXFA_FMExpression(line, XFA_FM_EXPTYPE_CONTINUE) {
+}
+CXFA_FMContinueExpression::~CXFA_FMContinueExpression() {}
+void CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"continue;\n");
+}
+void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"continue;\n");
+}
+CXFA_FMForExpression::CXFA_FMForExpression(FX_DWORD line,
+ const CFX_WideStringC& wsVariant,
+ CXFA_FMSimpleExpression* pAssignment,
+ CXFA_FMSimpleExpression* pAccessor,
+ int32_t iDirection,
+ CXFA_FMSimpleExpression* pStep,
+ CXFA_FMExpression* pList)
+ : CXFA_FMLoopExpression(line),
+ m_wsVariant(wsVariant),
+ m_pAssignment(pAssignment),
+ m_pAccessor(pAccessor),
+ m_iDirection(iDirection),
+ m_pStep(pStep),
+ m_pList(pList) {}
+CXFA_FMForExpression::~CXFA_FMForExpression() {
+ if (m_pAssignment) {
+ delete m_pAssignment;
+ m_pAssignment = 0;
+ }
+ if (m_pAccessor) {
+ delete m_pAccessor;
+ m_pAccessor = 0;
+ }
+ if (m_pStep) {
+ delete m_pStep;
+ m_pStep = 0;
+ }
+ if (m_pList) {
+ delete m_pList;
+ m_pList = 0;
+ }
+}
+void CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"{\nvar ");
+ CFX_WideString tempVariant;
+ if (m_wsVariant.GetAt(0) == L'!') {
+ tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1);
+ javascript << tempVariant;
+ } else {
+ tempVariant = m_wsVariant;
+ javascript << m_wsVariant;
+ }
+ javascript << FX_WSTRC(L" = null;\n");
+ javascript << FX_WSTRC(L"for (");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAssignment->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ if (m_iDirection == 1) {
+ javascript << FX_WSTRC(L" <= ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAccessor->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" += ");
+ } else {
+ javascript << FX_WSTRC(L" >= ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAccessor->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" -= ");
+ }
+ if (m_pStep) {
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pStep->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")");
+ } else {
+ javascript << FX_WSTRC(L"1");
+ }
+ javascript << FX_WSTRC(L")\n");
+ m_pList->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"}\n");
+}
+void CXFA_FMForExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"{\nvar ");
+ CFX_WideString tempVariant;
+ if (m_wsVariant.GetAt(0) == L'!') {
+ tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1);
+ javascript << tempVariant;
+ } else {
+ tempVariant = m_wsVariant;
+ javascript << m_wsVariant;
+ }
+ javascript << FX_WSTRC(L" = null;\n");
+ javascript << FX_WSTRC(L"for (");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAssignment->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ if (m_iDirection == 1) {
+ javascript << FX_WSTRC(L" <= ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAccessor->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" += ");
+ } else {
+ javascript << FX_WSTRC(L" >= ");
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pAccessor->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"); ");
+ javascript << tempVariant;
+ javascript << FX_WSTRC(L" -= ");
+ }
+ if (m_pStep) {
+ javascript << XFA_FM_EXPTypeToString(GETFMVALUE);
+ javascript << FX_WSTRC(L"(");
+ m_pStep->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L")");
+ } else {
+ javascript << FX_WSTRC(L"1");
+ }
+ javascript << FX_WSTRC(L")\n");
+ m_pList->ToImpliedReturnJS(javascript);
+ javascript << FX_WSTRC(L"}\n");
+}
+CXFA_FMForeachExpression::CXFA_FMForeachExpression(
+ FX_DWORD line,
+ const CFX_WideStringC& wsIdentifier,
+ CFX_PtrArray* pAccessors,
+ CXFA_FMExpression* pList)
+ : CXFA_FMLoopExpression(line),
+ m_wsIdentifier(wsIdentifier),
+ m_pAccessors(pAccessors),
+ m_pList(pList) {}
+CXFA_FMForeachExpression::~CXFA_FMForeachExpression() {
+ if (m_pList) {
+ delete m_pList;
+ m_pList = 0;
+ }
+ if (m_pAccessors) {
+ int32_t size = m_pAccessors->GetSize();
+ int32_t index = 0;
+ CXFA_FMSimpleExpression* e = 0;
+ while (index < size) {
+ e = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
+ delete e;
+ index++;
+ }
+ m_pAccessors->RemoveAll();
+ delete m_pAccessors;
+ m_pAccessors = 0;
+ }
+}
+void CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
+ javascript << FX_WSTRC(L"{\n");
+ javascript << FX_WSTRC(L"var ");
+ if (m_wsIdentifier.GetAt(0) == L'!') {
+ CFX_WideString tempIdentifier =
+ EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
+ javascript << tempIdentifier;
+ } else {
+ javascript << m_wsIdentifier;
+ }
+ javascript << FX_WSTRC(L" = null;\n");
+ javascript << FX_WSTRC(L"var ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT);
+ javascript << FX_WSTRC(L"(");
+ int32_t iSize = m_pAccessors->GetSize();
+ int32_t index = 0;
+ CXFA_FMSimpleExpression* s = 0;
+ while (index < iSize) {
+ s = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
+ s->ToJavaScript(javascript);
+ if (index + 1 < iSize) {
+ javascript << FX_WSTRC(L", ");
+ }
+ index++;
+ }
+ s = 0;
+ javascript << FX_WSTRC(L");\n");
+ javascript << FX_WSTRC(L"var ");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"while(");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L" < ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L".length)\n{\n");
+ if (m_wsIdentifier.GetAt(0) == L'!') {
+ CFX_WideString tempIdentifier =
+ EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
+ javascript << tempIdentifier;
+ } else {
+ javascript << m_wsIdentifier;
+ }
+ javascript << FX_WSTRC(L" = ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L"[");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L"++];\n");
+ m_pList->ToJavaScript(javascript);
+ javascript << FX_WSTRC(L"}\n");
+ javascript << FX_WSTRC(L"}\n");
+}
+void CXFA_FMForeachExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
+ javascript << RUNTIMEFUNCTIONRETURNVALUE;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"{\n");
+ javascript << FX_WSTRC(L"var ");
+ if (m_wsIdentifier.GetAt(0) == L'!') {
+ CFX_WideString tempIdentifier =
+ EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
+ javascript << tempIdentifier;
+ } else {
+ javascript << m_wsIdentifier;
+ }
+ javascript << FX_WSTRC(L" = null;\n");
+ javascript << FX_WSTRC(L"var ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L" = ");
+ javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT);
+ javascript << FX_WSTRC(L"(");
+ int32_t iSize = m_pAccessors->GetSize();
+ int32_t index = 0;
+ CXFA_FMSimpleExpression* s = 0;
+ while (index < iSize) {
+ s = (CXFA_FMSimpleExpression*)m_pAccessors->GetAt(index);
+ s->ToJavaScript(javascript);
+ if (index + 1 < iSize) {
+ javascript << FX_WSTRC(L", ");
+ }
+ index++;
+ }
+ s = 0;
+ javascript << FX_WSTRC(L");\n");
+ javascript << FX_WSTRC(L"var ");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L" = 0;\n");
+ javascript << FX_WSTRC(L"while(");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L" < ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L".length)\n{\n");
+ if (m_wsIdentifier.GetAt(0) == L'!') {
+ CFX_WideString tempIdentifier =
+ EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1);
+ javascript << tempIdentifier;
+ } else {
+ javascript << m_wsIdentifier;
+ }
+ javascript << FX_WSTRC(L" = ");
+ javascript << RUNTIMEBLOCKTEMPARRAY;
+ javascript << FX_WSTRC(L"[");
+ javascript << RUNTIMEBLOCKTEMPARRAYINDEX;
+ javascript << FX_WSTRC(L"++];\n");
+ m_pList->ToImpliedReturnJS(javascript);
+ javascript << FX_WSTRC(L"}\n");
+ javascript << FX_WSTRC(L"}\n");
+}