| Index: xfa/src/fxfa/src/fm2js/xfa_expression.cpp
|
| diff --git a/xfa/src/fxfa/src/fm2js/xfa_expression.cpp b/xfa/src/fxfa/src/fm2js/xfa_expression.cpp
|
| index 53b7197e10fe4dc3cc0ebbdce085a4027167a323..eff1eba3d8639d871c26ce301131ef0ad3003449 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");
|
| +}
|
|
|