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