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/parser/xfa_script_resolveprocessor.h" | 7 #include "xfa/fxfa/parser/xfa_script_resolveprocessor.h" |
8 | 8 |
9 #include "core/include/fxcrt/fx_ext.h" | 9 #include "core/include/fxcrt/fx_ext.h" |
10 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 10 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 FX_WCHAR wch = rnd.m_wsName.GetAt(0); | 45 FX_WCHAR wch = rnd.m_wsName.GetAt(0); |
46 switch (wch) { | 46 switch (wch) { |
47 case '$': | 47 case '$': |
48 return XFA_ResolveNodes_Dollar(rnd); | 48 return XFA_ResolveNodes_Dollar(rnd); |
49 case '!': | 49 case '!': |
50 return XFA_ResolveNodes_Excalmatory(rnd); | 50 return XFA_ResolveNodes_Excalmatory(rnd); |
51 case '#': | 51 case '#': |
52 return XFA_ResolveNodes_NumberSign(rnd); | 52 return XFA_ResolveNodes_NumberSign(rnd); |
53 case '*': | 53 case '*': |
54 return XFA_ResolveNodes_Asterisk(rnd); | 54 return XFA_ResolveNodes_Asterisk(rnd); |
| 55 // TODO(dsinclair@chromium.org): We could probably remove this. |
55 case '.': | 56 case '.': |
56 return XFA_ResolveNodes_AnyChild(rnd); | 57 return XFA_ResolveNodes_AnyChild(rnd); |
57 default: | 58 default: |
58 break; | 59 break; |
59 } | 60 } |
60 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { | 61 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { |
61 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); | 62 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); |
62 return 1; | 63 return 1; |
63 } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { | 64 } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { |
64 CXFA_Object* pObjNode = | 65 CXFA_Object* pObjNode = |
(...skipping 13 matching lines...) Expand all Loading... |
78 return rnd.m_Nodes.GetSize(); | 79 return rnd.m_Nodes.GetSize(); |
79 } | 80 } |
80 int32_t nRet = XFA_ResolveNodes_Normal(rnd); | 81 int32_t nRet = XFA_ResolveNodes_Normal(rnd); |
81 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { | 82 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { |
82 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); | 83 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); |
83 } | 84 } |
84 return rnd.m_Nodes.GetSize(); | 85 return rnd.m_Nodes.GetSize(); |
85 } | 86 } |
86 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( | 87 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( |
87 CXFA_ResolveNodesData& rnd) { | 88 CXFA_ResolveNodesData& rnd) { |
88 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); | 89 CFX_WideString wsName = rnd.m_wsName; |
89 CFX_WideString wsCondition = rnd.m_wsCondition; | 90 CFX_WideString wsCondition = rnd.m_wsCondition; |
90 CXFA_Node* findNode = NULL; | 91 CXFA_Node* findNode = NULL; |
91 CXFA_NodeArray siblings; | 92 CXFA_NodeArray siblings; |
92 FX_BOOL bClassName = FALSE; | 93 FX_BOOL bClassName = FALSE; |
93 if (wsName.GetAt(0) == '#') { | 94 if (wsName.GetAt(0) == '#') { |
94 bClassName = TRUE; | 95 bClassName = TRUE; |
95 wsName = wsName.Right(wsName.GetLength() - 1); | 96 wsName = wsName.Right(wsName.GetLength() - 1); |
96 } | 97 } |
97 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild(ToNode(rnd.m_CurNode), | 98 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild(ToNode(rnd.m_CurNode), |
98 wsName, bClassName); | 99 wsName, bClassName); |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 FX_WCHAR wPrev = 0, wCur; | 540 FX_WCHAR wPrev = 0, wCur; |
540 FX_BOOL bIsCondition = FALSE; | 541 FX_BOOL bIsCondition = FALSE; |
541 while (nStart < iLength) { | 542 while (nStart < iLength) { |
542 wCur = pSrc[nStart++]; | 543 wCur = pSrc[nStart++]; |
543 if (wCur == '.') { | 544 if (wCur == '.') { |
544 if (wPrev == '\\') { | 545 if (wPrev == '\\') { |
545 pNameBuf[nNameCount - 1] = wPrev = '.'; | 546 pNameBuf[nNameCount - 1] = wPrev = '.'; |
546 continue; | 547 continue; |
547 } | 548 } |
548 if (nNameCount == 0) { | 549 if (nNameCount == 0) { |
549 pNameBuf[nNameCount++] = wCur; | 550 rnd.m_dwStyles |= XFA_RESOLVENODE_AnyChild; |
550 continue; | 551 continue; |
551 } | 552 } |
552 FX_WCHAR wLookahead = nStart < iLength ? pSrc[nStart] : 0; | 553 FX_WCHAR wLookahead = nStart < iLength ? pSrc[nStart] : 0; |
553 if (wLookahead != '[' && wLookahead != '(') { | 554 if (wLookahead != '[' && wLookahead != '(') { |
554 if (nType < 0) { | 555 if (nType < 0) { |
555 break; | 556 break; |
556 } | 557 } |
557 } | 558 } |
558 } | 559 } |
559 if (wCur == '[' || wCur == '(') { | 560 if (wCur == '[' || wCur == '(') { |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { | 817 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { |
817 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { | 818 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { |
818 iIndex = 0; | 819 iIndex = 0; |
819 } else { | 820 } else { |
820 iIndex = iCount - 1; | 821 iIndex = iCount - 1; |
821 } | 822 } |
822 } else { | 823 } else { |
823 iIndex = iCount - 1; | 824 iIndex = iCount - 1; |
824 } | 825 } |
825 } | 826 } |
OLD | NEW |