| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/fm2js/xfa_expression.h" | 7 #include "xfa/fxfa/fm2js/xfa_expression.h" |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} | 29 void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
| 30 | 30 |
| 31 void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} | 31 void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} |
| 32 | 32 |
| 33 CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( | 33 CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( |
| 34 uint32_t line, | 34 uint32_t line, |
| 35 bool isGlobal, | 35 bool isGlobal, |
| 36 const CFX_WideStringC& wsName, | 36 const CFX_WideStringC& wsName, |
| 37 std::unique_ptr<CFX_WideStringCArray> pArguments, | 37 std::unique_ptr<CFX_WideStringCArray> pArguments, |
| 38 CFX_ArrayTemplate<CXFA_FMExpression*>* pExpressions) | 38 std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressions) |
| 39 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC), | 39 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC), |
| 40 m_wsName(wsName), | 40 m_wsName(wsName), |
| 41 m_pArguments(std::move(pArguments)), | 41 m_pArguments(std::move(pArguments)), |
| 42 m_pExpressions(pExpressions), | 42 m_pExpressions(std::move(pExpressions)), |
| 43 m_isGlobal(isGlobal) {} | 43 m_isGlobal(isGlobal) {} |
| 44 | 44 |
| 45 CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() { | 45 CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() {} |
| 46 if (m_pExpressions) { | |
| 47 for (int i = 0; i < m_pExpressions->GetSize(); ++i) | |
| 48 delete m_pExpressions->GetAt(i); | |
| 49 | |
| 50 delete m_pExpressions; | |
| 51 } | |
| 52 } | |
| 53 | 46 |
| 54 void CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& javascript) { | 47 void CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& javascript) { |
| 55 if (m_isGlobal && (!m_pExpressions || m_pExpressions->GetSize() == 0)) { | 48 if (m_isGlobal && m_pExpressions.empty()) { |
| 56 javascript << FX_WSTRC(L"// comments only"); | 49 javascript << FX_WSTRC(L"// comments only"); |
| 57 return; | 50 return; |
| 58 } | 51 } |
| 59 if (m_isGlobal) { | 52 if (m_isGlobal) { |
| 60 javascript << FX_WSTRC(L"(\n"); | 53 javascript << FX_WSTRC(L"(\n"); |
| 61 } | 54 } |
| 62 javascript << FX_WSTRC(L"function "); | 55 javascript << FX_WSTRC(L"function "); |
| 63 if (m_wsName.GetAt(0) == L'!') { | 56 if (m_wsName.GetAt(0) == L'!') { |
| 64 CFX_WideString tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); | 57 CFX_WideString tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); |
| 65 javascript << tempName; | 58 javascript << tempName; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 80 } | 73 } |
| 81 if (i + 1 < m_pArguments->GetSize()) { | 74 if (i + 1 < m_pArguments->GetSize()) { |
| 82 javascript << FX_WSTRC(L", "); | 75 javascript << FX_WSTRC(L", "); |
| 83 } | 76 } |
| 84 } | 77 } |
| 85 } | 78 } |
| 86 javascript << FX_WSTRC(L")\n{\n"); | 79 javascript << FX_WSTRC(L")\n{\n"); |
| 87 javascript << FX_WSTRC(L"var "); | 80 javascript << FX_WSTRC(L"var "); |
| 88 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 81 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
| 89 javascript << FX_WSTRC(L" = null;\n"); | 82 javascript << FX_WSTRC(L" = null;\n"); |
| 90 if (m_pExpressions) { | 83 for (const auto& expr : m_pExpressions) { |
| 91 for (int i = 0; i < m_pExpressions->GetSize(); ++i) { | 84 if (expr == m_pExpressions.back()) |
| 92 CXFA_FMExpression* e = m_pExpressions->GetAt(i); | 85 expr->ToImpliedReturnJS(javascript); |
| 93 if (i + 1 < m_pExpressions->GetSize()) { | 86 else |
| 94 e->ToJavaScript(javascript); | 87 expr->ToJavaScript(javascript); |
| 95 } else { | |
| 96 e->ToImpliedReturnJS(javascript); | |
| 97 } | |
| 98 } | |
| 99 } | 88 } |
| 100 javascript << FX_WSTRC(L"return "); | 89 javascript << FX_WSTRC(L"return "); |
| 101 if (m_isGlobal) { | 90 if (m_isGlobal) { |
| 102 javascript << XFA_FM_EXPTypeToString(GETFMVALUE); | 91 javascript << XFA_FM_EXPTypeToString(GETFMVALUE); |
| 103 javascript << FX_WSTRC(L"("); | 92 javascript << FX_WSTRC(L"("); |
| 104 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 93 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
| 105 javascript << FX_WSTRC(L")"); | 94 javascript << FX_WSTRC(L")"); |
| 106 } else { | 95 } else { |
| 107 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 96 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
| 108 } | 97 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 192 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
| 204 javascript << FX_WSTRC(L" = "); | 193 javascript << FX_WSTRC(L" = "); |
| 205 m_pExpression->ToJavaScript(javascript); | 194 m_pExpression->ToJavaScript(javascript); |
| 206 javascript << FX_WSTRC(L";\n"); | 195 javascript << FX_WSTRC(L";\n"); |
| 207 } | 196 } |
| 208 } | 197 } |
| 209 } | 198 } |
| 210 | 199 |
| 211 CXFA_FMBlockExpression::CXFA_FMBlockExpression( | 200 CXFA_FMBlockExpression::CXFA_FMBlockExpression( |
| 212 uint32_t line, | 201 uint32_t line, |
| 213 CFX_ArrayTemplate<CXFA_FMExpression*>* pExpressionList) | 202 std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressionList) |
| 214 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK), | 203 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK), |
| 215 m_pExpressionList(pExpressionList) {} | 204 m_ExpressionList(std::move(pExpressionList)) {} |
| 216 | 205 |
| 217 CXFA_FMBlockExpression::~CXFA_FMBlockExpression() { | 206 CXFA_FMBlockExpression::~CXFA_FMBlockExpression() {} |
| 218 if (m_pExpressionList) { | |
| 219 for (int i = 0; i < m_pExpressionList->GetSize(); ++i) | |
| 220 delete m_pExpressionList->GetAt(i); | |
| 221 | |
| 222 delete m_pExpressionList; | |
| 223 } | |
| 224 } | |
| 225 | 207 |
| 226 void CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 208 void CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
| 227 javascript << FX_WSTRC(L"{\n"); | 209 javascript << FX_WSTRC(L"{\n"); |
| 228 if (m_pExpressionList) { | 210 for (const auto& expr : m_ExpressionList) |
| 229 for (int i = 0; i < m_pExpressionList->GetSize(); ++i) | 211 expr->ToJavaScript(javascript); |
| 230 m_pExpressionList->GetAt(i)->ToJavaScript(javascript); | |
| 231 } | |
| 232 javascript << FX_WSTRC(L"}\n"); | 212 javascript << FX_WSTRC(L"}\n"); |
| 233 } | 213 } |
| 234 | 214 |
| 235 void CXFA_FMBlockExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 215 void CXFA_FMBlockExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
| 236 javascript << FX_WSTRC(L"{\n"); | 216 javascript << FX_WSTRC(L"{\n"); |
| 237 if (m_pExpressionList) { | 217 for (const auto& expr : m_ExpressionList) { |
| 238 for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { | 218 if (expr == m_ExpressionList.back()) |
| 239 CXFA_FMExpression* e = m_pExpressionList->GetAt(i); | 219 expr->ToImpliedReturnJS(javascript); |
| 240 if (i + 1 == m_pExpressionList->GetSize()) { | 220 else |
| 241 e->ToImpliedReturnJS(javascript); | 221 expr->ToJavaScript(javascript); |
| 242 } else { | |
| 243 e->ToJavaScript(javascript); | |
| 244 } | |
| 245 } | |
| 246 } | 222 } |
| 247 javascript << FX_WSTRC(L"}\n"); | 223 javascript << FX_WSTRC(L"}\n"); |
| 248 } | 224 } |
| 249 | 225 |
| 250 CXFA_FMDoExpression::CXFA_FMDoExpression(uint32_t line, | 226 CXFA_FMDoExpression::CXFA_FMDoExpression(uint32_t line, |
| 251 CXFA_FMExpression* pList) | 227 CXFA_FMExpression* pList) |
| 252 : CXFA_FMExpression(line), m_pList(pList) {} | 228 : CXFA_FMExpression(line), m_pList(pList) {} |
| 253 | 229 |
| 254 CXFA_FMDoExpression::~CXFA_FMDoExpression() {} | 230 CXFA_FMDoExpression::~CXFA_FMDoExpression() {} |
| 255 | 231 |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 } else { | 505 } else { |
| 530 javascript << m_wsIdentifier; | 506 javascript << m_wsIdentifier; |
| 531 } | 507 } |
| 532 javascript << FX_WSTRC(L" = null;\n"); | 508 javascript << FX_WSTRC(L" = null;\n"); |
| 533 javascript << FX_WSTRC(L"var "); | 509 javascript << FX_WSTRC(L"var "); |
| 534 javascript << RUNTIMEBLOCKTEMPARRAY; | 510 javascript << RUNTIMEBLOCKTEMPARRAY; |
| 535 javascript << FX_WSTRC(L" = "); | 511 javascript << FX_WSTRC(L" = "); |
| 536 javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); | 512 javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); |
| 537 javascript << FX_WSTRC(L"("); | 513 javascript << FX_WSTRC(L"("); |
| 538 | 514 |
| 539 for (size_t i = 0; i < m_pAccessors.size(); ++i) { | 515 for (const auto& expr : m_pAccessors) { |
| 540 CXFA_FMSimpleExpression* s = m_pAccessors.at(i).get(); | 516 expr->ToJavaScript(javascript); |
| 541 s->ToJavaScript(javascript); | 517 if (expr != m_pAccessors.back()) |
| 542 if (i + 1 < m_pAccessors.size()) { | 518 javascript << L", "; |
| 543 javascript << FX_WSTRC(L", "); | |
| 544 } | |
| 545 } | 519 } |
| 546 javascript << FX_WSTRC(L");\n"); | 520 javascript << FX_WSTRC(L");\n"); |
| 547 javascript << FX_WSTRC(L"var "); | 521 javascript << FX_WSTRC(L"var "); |
| 548 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 522 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
| 549 javascript << FX_WSTRC(L" = 0;\n"); | 523 javascript << FX_WSTRC(L" = 0;\n"); |
| 550 javascript << FX_WSTRC(L"while("); | 524 javascript << FX_WSTRC(L"while("); |
| 551 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 525 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
| 552 javascript << FX_WSTRC(L" < "); | 526 javascript << FX_WSTRC(L" < "); |
| 553 javascript << RUNTIMEBLOCKTEMPARRAY; | 527 javascript << RUNTIMEBLOCKTEMPARRAY; |
| 554 javascript << FX_WSTRC(L".length)\n{\n"); | 528 javascript << FX_WSTRC(L".length)\n{\n"); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 580 javascript << tempIdentifier; | 554 javascript << tempIdentifier; |
| 581 } else { | 555 } else { |
| 582 javascript << m_wsIdentifier; | 556 javascript << m_wsIdentifier; |
| 583 } | 557 } |
| 584 javascript << FX_WSTRC(L" = null;\n"); | 558 javascript << FX_WSTRC(L" = null;\n"); |
| 585 javascript << FX_WSTRC(L"var "); | 559 javascript << FX_WSTRC(L"var "); |
| 586 javascript << RUNTIMEBLOCKTEMPARRAY; | 560 javascript << RUNTIMEBLOCKTEMPARRAY; |
| 587 javascript << FX_WSTRC(L" = "); | 561 javascript << FX_WSTRC(L" = "); |
| 588 javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); | 562 javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); |
| 589 javascript << FX_WSTRC(L"("); | 563 javascript << FX_WSTRC(L"("); |
| 590 for (size_t i = 0; i < m_pAccessors.size(); ++i) { | 564 for (const auto& expr : m_pAccessors) { |
| 591 CXFA_FMSimpleExpression* s = m_pAccessors.at(i).get(); | 565 expr->ToJavaScript(javascript); |
| 592 s->ToJavaScript(javascript); | 566 if (expr != m_pAccessors.back()) |
| 593 if (i + 1 < m_pAccessors.size()) { | 567 javascript << L", "; |
| 594 javascript << FX_WSTRC(L", "); | |
| 595 } | |
| 596 } | 568 } |
| 597 javascript << FX_WSTRC(L");\n"); | 569 javascript << FX_WSTRC(L");\n"); |
| 598 javascript << FX_WSTRC(L"var "); | 570 javascript << FX_WSTRC(L"var "); |
| 599 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 571 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
| 600 javascript << FX_WSTRC(L" = 0;\n"); | 572 javascript << FX_WSTRC(L" = 0;\n"); |
| 601 javascript << FX_WSTRC(L"while("); | 573 javascript << FX_WSTRC(L"while("); |
| 602 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 574 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
| 603 javascript << FX_WSTRC(L" < "); | 575 javascript << FX_WSTRC(L" < "); |
| 604 javascript << RUNTIMEBLOCKTEMPARRAY; | 576 javascript << RUNTIMEBLOCKTEMPARRAY; |
| 605 javascript << FX_WSTRC(L".length)\n{\n"); | 577 javascript << FX_WSTRC(L".length)\n{\n"); |
| 606 if (m_wsIdentifier.GetAt(0) == L'!') { | 578 if (m_wsIdentifier.GetAt(0) == L'!') { |
| 607 CFX_WideString tempIdentifier = | 579 CFX_WideString tempIdentifier = |
| 608 EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); | 580 EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); |
| 609 javascript << tempIdentifier; | 581 javascript << tempIdentifier; |
| 610 } else { | 582 } else { |
| 611 javascript << m_wsIdentifier; | 583 javascript << m_wsIdentifier; |
| 612 } | 584 } |
| 613 javascript << FX_WSTRC(L" = "); | 585 javascript << FX_WSTRC(L" = "); |
| 614 javascript << RUNTIMEBLOCKTEMPARRAY; | 586 javascript << RUNTIMEBLOCKTEMPARRAY; |
| 615 javascript << FX_WSTRC(L"["); | 587 javascript << FX_WSTRC(L"["); |
| 616 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 588 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
| 617 javascript << FX_WSTRC(L"++];\n"); | 589 javascript << FX_WSTRC(L"++];\n"); |
| 618 m_pList->ToImpliedReturnJS(javascript); | 590 m_pList->ToImpliedReturnJS(javascript); |
| 619 javascript << FX_WSTRC(L"}\n"); | 591 javascript << FX_WSTRC(L"}\n"); |
| 620 javascript << FX_WSTRC(L"}\n"); | 592 javascript << FX_WSTRC(L"}\n"); |
| 621 } | 593 } |
| OLD | NEW |