Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: xfa/fxfa/parser/xfa_script_resolveprocessor.cpp

Issue 2132513003: Cleanup redundant method names. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Review feedback Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/fxcrt/include/fx_ext.h" 9 #include "core/fxcrt/include/fx_ext.h"
10 #include "xfa/fxfa/parser/xfa_doclayout.h" 10 #include "xfa/fxfa/parser/xfa_doclayout.h"
11 #include "xfa/fxfa/parser/xfa_document.h" 11 #include "xfa/fxfa/parser/xfa_document.h"
12 #include "xfa/fxfa/parser/xfa_localemgr.h" 12 #include "xfa/fxfa/parser/xfa_localemgr.h"
13 #include "xfa/fxfa/parser/xfa_object.h" 13 #include "xfa/fxfa/parser/xfa_object.h"
14 #include "xfa/fxfa/parser/xfa_parser.h" 14 #include "xfa/fxfa/parser/xfa_parser.h"
15 #include "xfa/fxfa/parser/xfa_script.h" 15 #include "xfa/fxfa/parser/xfa_script.h"
16 #include "xfa/fxfa/parser/xfa_script_imp.h" 16 #include "xfa/fxfa/parser/xfa_script_imp.h"
17 #include "xfa/fxfa/parser/xfa_script_nodehelper.h" 17 #include "xfa/fxfa/parser/xfa_script_nodehelper.h"
18 #include "xfa/fxfa/parser/xfa_utils.h" 18 #include "xfa/fxfa/parser/xfa_utils.h"
19 19
20 CXFA_ResolveProcessor::CXFA_ResolveProcessor() 20 CXFA_ResolveProcessor::CXFA_ResolveProcessor()
21 : m_pNodeHelper(new CXFA_NodeHelper), m_iCurStart(0) {} 21 : m_iCurStart(0), m_pNodeHelper(new CXFA_NodeHelper) {}
22 22
23 CXFA_ResolveProcessor::~CXFA_ResolveProcessor() { 23 CXFA_ResolveProcessor::~CXFA_ResolveProcessor() {
24 delete m_pNodeHelper; 24 delete m_pNodeHelper;
25 } 25 }
26 26
27 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { 27 int32_t CXFA_ResolveProcessor::Resolve(CXFA_ResolveNodesData& rnd) {
28 if (!rnd.m_CurNode) { 28 if (!rnd.m_CurNode) {
29 return -1; 29 return -1;
30 } 30 }
31 if (!rnd.m_CurNode->IsNode()) { 31 if (!rnd.m_CurNode->IsNode()) {
32 if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { 32 if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) {
33 return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, 33 return ResolveForAttributeRs(rnd.m_CurNode, rnd,
34 rnd.m_wsName.AsStringC()); 34 rnd.m_wsName.AsStringC());
35 } 35 }
36 return 0; 36 return 0;
37 } 37 }
38 if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { 38 if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) {
39 return XFA_ResolveNodes_AnyChild(rnd); 39 return ResolveAnyChild(rnd);
40 } 40 }
41 FX_WCHAR wch = rnd.m_wsName.GetAt(0); 41 FX_WCHAR wch = rnd.m_wsName.GetAt(0);
42 switch (wch) { 42 switch (wch) {
43 case '$': 43 case '$':
44 return XFA_ResolveNodes_Dollar(rnd); 44 return ResolveDollar(rnd);
45 case '!': 45 case '!':
46 return XFA_ResolveNodes_Excalmatory(rnd); 46 return ResolveExcalmatory(rnd);
47 case '#': 47 case '#':
48 return XFA_ResolveNodes_NumberSign(rnd); 48 return ResolveNumberSign(rnd);
49 case '*': 49 case '*':
50 return XFA_ResolveNodes_Asterisk(rnd); 50 return ResolveAsterisk(rnd);
51 // TODO(dsinclair): We could probably remove this. 51 // TODO(dsinclair): We could probably remove this.
52 case '.': 52 case '.':
53 return XFA_ResolveNodes_AnyChild(rnd); 53 return ResolveAnyChild(rnd);
54 default: 54 default:
55 break; 55 break;
56 } 56 }
57 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { 57 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) {
58 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); 58 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject());
59 return 1; 59 return 1;
60 } else if (rnd.m_CurNode->GetElementType() == XFA_Element::Xfa) { 60 } else if (rnd.m_CurNode->GetElementType() == XFA_Element::Xfa) {
61 CXFA_Object* pObjNode = 61 CXFA_Object* pObjNode =
62 rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); 62 rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName);
63 if (pObjNode) { 63 if (pObjNode) {
64 rnd.m_Nodes.Add(pObjNode); 64 rnd.m_Nodes.Add(pObjNode);
65 } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { 65 } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) {
66 rnd.m_Nodes.Add(rnd.m_CurNode); 66 rnd.m_Nodes.Add(rnd.m_CurNode);
67 } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && 67 } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) &&
68 XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, 68 ResolveForAttributeRs(rnd.m_CurNode, rnd,
69 rnd.m_wsName.AsStringC())) { 69 rnd.m_wsName.AsStringC())) {
70 return 1; 70 return 1;
71 } 71 }
72 if (rnd.m_Nodes.GetSize() > 0) { 72 if (rnd.m_Nodes.GetSize() > 0) {
73 XFA_ResolveNode_FilterCondition(rnd, rnd.m_wsCondition); 73 FilterCondition(rnd, rnd.m_wsCondition);
74 } 74 }
75 return rnd.m_Nodes.GetSize(); 75 return rnd.m_Nodes.GetSize();
76 } 76 }
77 int32_t nRet = XFA_ResolveNodes_Normal(rnd); 77 int32_t nRet = ResolveNormal(rnd);
78 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { 78 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) {
79 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); 79 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot());
80 } 80 }
81 return rnd.m_Nodes.GetSize(); 81 return rnd.m_Nodes.GetSize();
82 } 82 }
83 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( 83 int32_t CXFA_ResolveProcessor::ResolveAnyChild(CXFA_ResolveNodesData& rnd) {
84 CXFA_ResolveNodesData& rnd) {
85 CFX_WideString wsName = rnd.m_wsName; 84 CFX_WideString wsName = rnd.m_wsName;
86 CFX_WideString wsCondition = rnd.m_wsCondition; 85 CFX_WideString wsCondition = rnd.m_wsCondition;
87 CXFA_Node* findNode = nullptr; 86 CXFA_Node* findNode = nullptr;
88 CXFA_NodeArray siblings; 87 CXFA_NodeArray siblings;
89 FX_BOOL bClassName = FALSE; 88 FX_BOOL bClassName = FALSE;
90 if (wsName.GetAt(0) == '#') { 89 if (wsName.GetAt(0) == '#') {
91 bClassName = TRUE; 90 bClassName = TRUE;
92 wsName = wsName.Right(wsName.GetLength() - 1); 91 wsName = wsName.Right(wsName.GetLength() - 1);
93 } 92 }
94 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild( 93 findNode = m_pNodeHelper->ResolveNodes_GetOneChild(
95 ToNode(rnd.m_CurNode), wsName.c_str(), bClassName); 94 ToNode(rnd.m_CurNode), wsName.c_str(), bClassName);
96 if (!findNode) { 95 if (!findNode) {
97 return 0; 96 return 0;
98 } 97 }
99 if (wsCondition.IsEmpty()) { 98 if (wsCondition.IsEmpty()) {
100 rnd.m_Nodes.Add(findNode); 99 rnd.m_Nodes.Add(findNode);
101 return rnd.m_Nodes.GetSize(); 100 return rnd.m_Nodes.GetSize();
102 } 101 }
103 m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, 102 m_pNodeHelper->CountSiblings(findNode, XFA_LOGIC_Transparent,
104 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); 103 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName);
105 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 104 FilterCondition(rnd, wsCondition);
106 return rnd.m_Nodes.GetSize(); 105 return rnd.m_Nodes.GetSize();
107 } 106 }
108 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Dollar( 107 int32_t CXFA_ResolveProcessor::ResolveDollar(CXFA_ResolveNodesData& rnd) {
109 CXFA_ResolveNodesData& rnd) {
110 CXFA_ObjArray& nodes = rnd.m_Nodes; 108 CXFA_ObjArray& nodes = rnd.m_Nodes;
111 CFX_WideString wsName = rnd.m_wsName; 109 CFX_WideString wsName = rnd.m_wsName;
112 CFX_WideString wsCondition = rnd.m_wsCondition; 110 CFX_WideString wsCondition = rnd.m_wsCondition;
113 int32_t iNameLen = wsName.GetLength(); 111 int32_t iNameLen = wsName.GetLength();
114 if (iNameLen == 1) { 112 if (iNameLen == 1) {
115 nodes.Add(rnd.m_CurNode); 113 nodes.Add(rnd.m_CurNode);
116 return 1; 114 return 1;
117 } 115 }
118 if (rnd.m_nLevel > 0) { 116 if (rnd.m_nLevel > 0) {
119 return -1; 117 return -1;
120 } 118 }
121 XFA_HashCode dwNameHash = static_cast<XFA_HashCode>(FX_HashCode_GetW( 119 XFA_HashCode dwNameHash = static_cast<XFA_HashCode>(FX_HashCode_GetW(
122 CFX_WideStringC(wsName.c_str() + 1, iNameLen - 1), false)); 120 CFX_WideStringC(wsName.c_str() + 1, iNameLen - 1), false));
123 if (dwNameHash == XFA_HASHCODE_Xfa) { 121 if (dwNameHash == XFA_HASHCODE_Xfa) {
124 nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); 122 nodes.Add(rnd.m_pSC->GetDocument()->GetRoot());
125 } else { 123 } else {
126 CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash); 124 CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash);
127 if (pObjNode) { 125 if (pObjNode) {
128 rnd.m_Nodes.Add(pObjNode); 126 rnd.m_Nodes.Add(pObjNode);
129 } 127 }
130 } 128 }
131 if (rnd.m_Nodes.GetSize() > 0) { 129 if (rnd.m_Nodes.GetSize() > 0) {
132 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 130 FilterCondition(rnd, wsCondition);
133 } 131 }
134 return rnd.m_Nodes.GetSize(); 132 return rnd.m_Nodes.GetSize();
135 } 133 }
136 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Excalmatory( 134 int32_t CXFA_ResolveProcessor::ResolveExcalmatory(CXFA_ResolveNodesData& rnd) {
137 CXFA_ResolveNodesData& rnd) {
138 if (rnd.m_nLevel > 0) { 135 if (rnd.m_nLevel > 0) {
139 return 0; 136 return 0;
140 } 137 }
141 CXFA_Node* datasets = 138 CXFA_Node* datasets =
142 ToNode(rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); 139 ToNode(rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets));
143 if (!datasets) { 140 if (!datasets) {
144 return 0; 141 return 0;
145 } 142 }
146 CXFA_ResolveNodesData rndFind; 143 CXFA_ResolveNodesData rndFind;
147 rndFind.m_pSC = rnd.m_pSC; 144 rndFind.m_pSC = rnd.m_pSC;
148 rndFind.m_CurNode = datasets; 145 rndFind.m_CurNode = datasets;
149 rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); 146 rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1);
150 rndFind.m_uHashName = static_cast<XFA_HashCode>( 147 rndFind.m_uHashName = static_cast<XFA_HashCode>(
151 FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false)); 148 FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false));
152 rndFind.m_nLevel = rnd.m_nLevel + 1; 149 rndFind.m_nLevel = rnd.m_nLevel + 1;
153 rndFind.m_dwStyles = XFA_RESOLVENODE_Children; 150 rndFind.m_dwStyles = XFA_RESOLVENODE_Children;
154 rndFind.m_wsCondition = rnd.m_wsCondition; 151 rndFind.m_wsCondition = rnd.m_wsCondition;
155 XFA_ResolveNodes(rndFind); 152 Resolve(rndFind);
156 if (rndFind.m_Nodes.GetSize() > 0) { 153 if (rndFind.m_Nodes.GetSize() > 0) {
157 rnd.m_Nodes.Append(rndFind.m_Nodes); 154 rnd.m_Nodes.Append(rndFind.m_Nodes);
158 rndFind.m_Nodes.RemoveAll(); 155 rndFind.m_Nodes.RemoveAll();
159 } 156 }
160 return rnd.m_Nodes.GetSize(); 157 return rnd.m_Nodes.GetSize();
161 } 158 }
162 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( 159 int32_t CXFA_ResolveProcessor::ResolveNumberSign(CXFA_ResolveNodesData& rnd) {
163 CXFA_ResolveNodesData& rnd) {
164 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); 160 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1);
165 CFX_WideString wsCondition = rnd.m_wsCondition; 161 CFX_WideString wsCondition = rnd.m_wsCondition;
166 CXFA_Node* curNode = ToNode(rnd.m_CurNode); 162 CXFA_Node* curNode = ToNode(rnd.m_CurNode);
167 if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsStringC())) { 163 if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringC())) {
168 return 1; 164 return 1;
169 } 165 }
170 CXFA_ResolveNodesData rndFind; 166 CXFA_ResolveNodesData rndFind;
171 rndFind.m_pSC = rnd.m_pSC; 167 rndFind.m_pSC = rnd.m_pSC;
172 rndFind.m_nLevel = rnd.m_nLevel + 1; 168 rndFind.m_nLevel = rnd.m_nLevel + 1;
173 rndFind.m_dwStyles = rnd.m_dwStyles; 169 rndFind.m_dwStyles = rnd.m_dwStyles;
174 rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; 170 rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName;
175 rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; 171 rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes;
176 rndFind.m_wsName = wsName; 172 rndFind.m_wsName = wsName;
177 rndFind.m_uHashName = static_cast<XFA_HashCode>( 173 rndFind.m_uHashName = static_cast<XFA_HashCode>(
178 FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false)); 174 FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false));
179 rndFind.m_wsCondition = wsCondition; 175 rndFind.m_wsCondition = wsCondition;
180 rndFind.m_CurNode = curNode; 176 rndFind.m_CurNode = curNode;
181 XFA_ResolveNodes_Normal(rndFind); 177 ResolveNormal(rndFind);
182 if (rndFind.m_Nodes.GetSize() > 0) { 178 if (rndFind.m_Nodes.GetSize() > 0) {
183 if (wsCondition.GetLength() == 0 && rndFind.m_Nodes.Find(curNode) >= 0) { 179 if (wsCondition.GetLength() == 0 && rndFind.m_Nodes.Find(curNode) >= 0) {
184 rnd.m_Nodes.Add(curNode); 180 rnd.m_Nodes.Add(curNode);
185 } else { 181 } else {
186 rnd.m_Nodes.Append(rndFind.m_Nodes); 182 rnd.m_Nodes.Append(rndFind.m_Nodes);
187 rndFind.m_Nodes.RemoveAll(); 183 rndFind.m_Nodes.RemoveAll();
188 } 184 }
189 } 185 }
190 return rnd.m_Nodes.GetSize(); 186 return rnd.m_Nodes.GetSize();
191 } 187 }
192 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_ForAttributeRs( 188 int32_t CXFA_ResolveProcessor::ResolveForAttributeRs(
193 CXFA_Object* curNode, 189 CXFA_Object* curNode,
194 CXFA_ResolveNodesData& rnd, 190 CXFA_ResolveNodesData& rnd,
195 const CFX_WideStringC& strAttr) { 191 const CFX_WideStringC& strAttr) {
196 const XFA_SCRIPTATTRIBUTEINFO* lpScriptAttribute = 192 const XFA_SCRIPTATTRIBUTEINFO* lpScriptAttribute =
197 XFA_GetScriptAttributeByName(curNode->GetElementType(), strAttr); 193 XFA_GetScriptAttributeByName(curNode->GetElementType(), strAttr);
198 if (lpScriptAttribute) { 194 if (lpScriptAttribute) {
199 rnd.m_pScriptAttribute = lpScriptAttribute; 195 rnd.m_pScriptAttribute = lpScriptAttribute;
200 rnd.m_Nodes.Add(curNode); 196 rnd.m_Nodes.Add(curNode);
201 rnd.m_dwFlag = XFA_RESOVENODE_RSTYPE_Attribute; 197 rnd.m_dwFlag = XFA_RESOVENODE_RSTYPE_Attribute;
202 return 1; 198 return 1;
203 } 199 }
204 return 0; 200 return 0;
205 } 201 }
206 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Normal( 202 int32_t CXFA_ResolveProcessor::ResolveNormal(CXFA_ResolveNodesData& rnd) {
207 CXFA_ResolveNodesData& rnd) {
208 if (rnd.m_nLevel > 32) { 203 if (rnd.m_nLevel > 32) {
209 return 0; 204 return 0;
210 } 205 }
211 if (!rnd.m_CurNode->IsNode()) { 206 if (!rnd.m_CurNode->IsNode()) {
212 return 0; 207 return 0;
213 } 208 }
214 CXFA_Node* curNode = ToNode(rnd.m_CurNode); 209 CXFA_Node* curNode = ToNode(rnd.m_CurNode);
215 CXFA_ObjArray& nodes = rnd.m_Nodes; 210 CXFA_ObjArray& nodes = rnd.m_Nodes;
216 int32_t nNum = nodes.GetSize(); 211 int32_t nNum = nodes.GetSize();
217 uint32_t dwStyles = rnd.m_dwStyles; 212 uint32_t dwStyles = rnd.m_dwStyles;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 244 }
250 } 245 }
251 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); 246 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
252 } 247 }
253 if ((dwStyles & XFA_RESOLVENODE_Properties) && pVariablesNode) { 248 if ((dwStyles & XFA_RESOLVENODE_Properties) && pVariablesNode) {
254 uint32_t uPropHash = pVariablesNode->GetClassHashCode(); 249 uint32_t uPropHash = pVariablesNode->GetClassHashCode();
255 if (uPropHash == uNameHash) { 250 if (uPropHash == uNameHash) {
256 nodes.Add(pVariablesNode); 251 nodes.Add(pVariablesNode);
257 } else { 252 } else {
258 rndFind.m_CurNode = pVariablesNode; 253 rndFind.m_CurNode = pVariablesNode;
259 XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); 254 SetStylesForChild(dwStyles, rndFind);
260 CFX_WideString wsSaveCondition = rndFind.m_wsCondition; 255 CFX_WideString wsSaveCondition = rndFind.m_wsCondition;
261 rndFind.m_wsCondition.clear(); 256 rndFind.m_wsCondition.clear();
262 XFA_ResolveNodes_Normal(rndFind); 257 ResolveNormal(rndFind);
263 rndFind.m_wsCondition = wsSaveCondition; 258 rndFind.m_wsCondition = wsSaveCondition;
264 if (rndFind.m_Nodes.GetSize() > 0) { 259 if (rndFind.m_Nodes.GetSize() > 0) {
265 nodes.Append(rndFind.m_Nodes); 260 nodes.Append(rndFind.m_Nodes);
266 rndFind.m_Nodes.RemoveAll(); 261 rndFind.m_Nodes.RemoveAll();
267 } 262 }
268 } 263 }
269 if (nodes.GetSize() > nNum) { 264 if (nodes.GetSize() > nNum) {
270 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 265 FilterCondition(rnd, wsCondition);
271 if (nodes.GetSize() > 0) { 266 if (nodes.GetSize() > 0) {
272 return 1; 267 return 1;
273 } 268 }
274 return 0; 269 return 0;
275 } 270 }
276 } 271 }
277 if (dwStyles & XFA_RESOLVENODE_Children) { 272 if (dwStyles & XFA_RESOLVENODE_Children) {
278 FX_BOOL bSetFlag = FALSE; 273 FX_BOOL bSetFlag = FALSE;
279 if (pPageSetNode && (dwStyles & XFA_RESOLVENODE_Properties)) { 274 if (pPageSetNode && (dwStyles & XFA_RESOLVENODE_Properties)) {
280 children.Add(pPageSetNode); 275 children.Add(pPageSetNode);
281 } 276 }
282 for (int32_t i = 0; i < children.GetSize(); i++) { 277 for (int32_t i = 0; i < children.GetSize(); i++) {
283 CXFA_Node* child = children[i]; 278 CXFA_Node* child = children[i];
284 if (dwStyles & XFA_RESOLVENODE_TagName) { 279 if (dwStyles & XFA_RESOLVENODE_TagName) {
285 if (child->GetClassHashCode() == uNameHash) { 280 if (child->GetClassHashCode() == uNameHash) {
286 nodes.Add(child); 281 nodes.Add(child);
287 } 282 }
288 } else if (child->GetNameHash() == uNameHash) { 283 } else if (child->GetNameHash() == uNameHash) {
289 nodes.Add(child); 284 nodes.Add(child);
290 } 285 }
291 if (m_pNodeHelper->XFA_NodeIsTransparent(child) && 286 if (m_pNodeHelper->NodeIsTransparent(child) &&
292 child->GetElementType() != XFA_Element::PageSet) { 287 child->GetElementType() != XFA_Element::PageSet) {
293 if (!bSetFlag) { 288 if (!bSetFlag) {
294 XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); 289 SetStylesForChild(dwStyles, rndFind);
295 bSetFlag = TRUE; 290 bSetFlag = TRUE;
296 } 291 }
297 rndFind.m_CurNode = child; 292 rndFind.m_CurNode = child;
298 CFX_WideString wsSaveCondition = rndFind.m_wsCondition; 293 CFX_WideString wsSaveCondition = rndFind.m_wsCondition;
299 rndFind.m_wsCondition.clear(); 294 rndFind.m_wsCondition.clear();
300 XFA_ResolveNodes_Normal(rndFind); 295 ResolveNormal(rndFind);
301 rndFind.m_wsCondition = wsSaveCondition; 296 rndFind.m_wsCondition = wsSaveCondition;
302 if (rndFind.m_Nodes.GetSize() > 0) { 297 if (rndFind.m_Nodes.GetSize() > 0) {
303 nodes.Append(rndFind.m_Nodes); 298 nodes.Append(rndFind.m_Nodes);
304 rndFind.m_Nodes.RemoveAll(); 299 rndFind.m_Nodes.RemoveAll();
305 } 300 }
306 } 301 }
307 } 302 }
308 if (nodes.GetSize() > nNum) { 303 if (nodes.GetSize() > nNum) {
309 if (!(dwStyles & XFA_RESOLVENODE_ALL)) { 304 if (!(dwStyles & XFA_RESOLVENODE_ALL)) {
310 CXFA_NodeArray upArrayNodes; 305 CXFA_NodeArray upArrayNodes;
311 if (m_pNodeHelper->XFA_NodeIsTransparent(ToNode(curNode))) { 306 if (m_pNodeHelper->NodeIsTransparent(ToNode(curNode))) {
312 m_pNodeHelper->XFA_CountSiblings( 307 m_pNodeHelper->CountSiblings(ToNode(nodes[0]), XFA_LOGIC_Transparent,
313 ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, 308 &upArrayNodes,
314 !!(dwStyles & XFA_RESOLVENODE_TagName)); 309 !!(dwStyles & XFA_RESOLVENODE_TagName));
315 } 310 }
316 if (upArrayNodes.GetSize() > nodes.GetSize()) { 311 if (upArrayNodes.GetSize() > nodes.GetSize()) {
317 upArrayNodes[0] = ToNode(nodes[0]); 312 upArrayNodes[0] = ToNode(nodes[0]);
318 nodes.RemoveAll(); 313 nodes.RemoveAll();
319 nodes.Append((CXFA_ObjArray&)upArrayNodes); 314 nodes.Append((CXFA_ObjArray&)upArrayNodes);
320 upArrayNodes.RemoveAll(); 315 upArrayNodes.RemoveAll();
321 } 316 }
322 } 317 }
323 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 318 FilterCondition(rnd, wsCondition);
324 if (nodes.GetSize() > 0) { 319 if (nodes.GetSize() > 0) {
325 return 1; 320 return 1;
326 } 321 }
327 return 0; 322 return 0;
328 } 323 }
329 } 324 }
330 if (dwStyles & XFA_RESOLVENODE_Attributes) { 325 if (dwStyles & XFA_RESOLVENODE_Attributes) {
331 if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsStringC())) { 326 if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringC())) {
332 return 1; 327 return 1;
333 } 328 }
334 } 329 }
335 if (dwStyles & XFA_RESOLVENODE_Properties) { 330 if (dwStyles & XFA_RESOLVENODE_Properties) {
336 for (int32_t i = 0; i < properties.GetSize(); i++) { 331 for (int32_t i = 0; i < properties.GetSize(); i++) {
337 CXFA_Node* childProperty = properties[i]; 332 CXFA_Node* childProperty = properties[i];
338 if (childProperty->IsUnnamed()) { 333 if (childProperty->IsUnnamed()) {
339 uint32_t uPropHash = childProperty->GetClassHashCode(); 334 uint32_t uPropHash = childProperty->GetClassHashCode();
340 if (uPropHash == uNameHash) { 335 if (uPropHash == uNameHash) {
341 nodes.Add(childProperty); 336 nodes.Add(childProperty);
342 } 337 }
343 } else if (childProperty->GetNameHash() == uNameHash && 338 } else if (childProperty->GetNameHash() == uNameHash &&
344 childProperty->GetElementType() != XFA_Element::Extras && 339 childProperty->GetElementType() != XFA_Element::Extras &&
345 childProperty->GetElementType() != XFA_Element::Items) { 340 childProperty->GetElementType() != XFA_Element::Items) {
346 nodes.Add(childProperty); 341 nodes.Add(childProperty);
347 } 342 }
348 } 343 }
349 if (nodes.GetSize() > nNum) { 344 if (nodes.GetSize() > nNum) {
350 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 345 FilterCondition(rnd, wsCondition);
351 if (nodes.GetSize() > 0) { 346 if (nodes.GetSize() > 0) {
352 return 1; 347 return 1;
353 } 348 }
354 return 0; 349 return 0;
355 } 350 }
356 CXFA_Node* pProp = nullptr; 351 CXFA_Node* pProp = nullptr;
357 if (XFA_Element::Subform == curNode->GetElementType() && 352 if (XFA_Element::Subform == curNode->GetElementType() &&
358 XFA_HASHCODE_Occur == uNameHash) { 353 XFA_HASHCODE_Occur == uNameHash) {
359 CXFA_Node* pInstanceManager = 354 CXFA_Node* pInstanceManager =
360 curNode->AsNode()->GetInstanceMgrOfSubform(); 355 curNode->AsNode()->GetInstanceMgrOfSubform();
361 if (pInstanceManager) { 356 if (pInstanceManager) {
362 pProp = pInstanceManager->GetProperty(0, XFA_Element::Occur, TRUE); 357 pProp = pInstanceManager->GetProperty(0, XFA_Element::Occur, TRUE);
363 } 358 }
364 } else { 359 } else {
365 XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC()); 360 XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC());
366 if (eType != XFA_Element::Unknown) { 361 if (eType != XFA_Element::Unknown) {
367 pProp = curNode->AsNode()->GetProperty(0, eType, 362 pProp = curNode->AsNode()->GetProperty(0, eType,
368 eType != XFA_Element::PageSet); 363 eType != XFA_Element::PageSet);
369 } 364 }
370 } 365 }
371 if (pProp) { 366 if (pProp) {
372 nodes.Add(pProp); 367 nodes.Add(pProp);
373 return nodes.GetSize(); 368 return nodes.GetSize();
374 } 369 }
375 } 370 }
376 CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( 371 CXFA_Node* parentNode = m_pNodeHelper->ResolveNodes_GetParent(
377 curNode->AsNode(), XFA_LOGIC_NoTransparent); 372 curNode->AsNode(), XFA_LOGIC_NoTransparent);
378 uint32_t uCurClassHash = curNode->GetClassHashCode(); 373 uint32_t uCurClassHash = curNode->GetClassHashCode();
379 if (!parentNode) { 374 if (!parentNode) {
380 if (uCurClassHash == uNameHash) { 375 if (uCurClassHash == uNameHash) {
381 nodes.Add(curNode->AsNode()); 376 nodes.Add(curNode->AsNode());
382 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 377 FilterCondition(rnd, wsCondition);
383 if (nodes.GetSize() > 0) { 378 if (nodes.GetSize() > 0) {
384 return 1; 379 return 1;
385 } 380 }
386 } 381 }
387 return 0; 382 return 0;
388 } 383 }
389 if (dwStyles & XFA_RESOLVENODE_Siblings) { 384 if (dwStyles & XFA_RESOLVENODE_Siblings) {
390 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); 385 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild);
391 uint32_t dwSubStyles = 386 uint32_t dwSubStyles =
392 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties; 387 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( 421 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement(
427 parentNode->GetElementType(), child->GetElementType(), 422 parentNode->GetElementType(), child->GetElementType(),
428 XFA_XDPPACKET_UNKNOWN); 423 XFA_XDPPACKET_UNKNOWN);
429 FX_BOOL bInnerSearch = FALSE; 424 FX_BOOL bInnerSearch = FALSE;
430 if (pPropert) { 425 if (pPropert) {
431 if ((child->GetElementType() == XFA_Element::Variables || 426 if ((child->GetElementType() == XFA_Element::Variables ||
432 child->GetElementType() == XFA_Element::PageSet)) { 427 child->GetElementType() == XFA_Element::PageSet)) {
433 bInnerSearch = TRUE; 428 bInnerSearch = TRUE;
434 } 429 }
435 } else { 430 } else {
436 if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { 431 if (m_pNodeHelper->NodeIsTransparent(child)) {
437 bInnerSearch = TRUE; 432 bInnerSearch = TRUE;
438 } 433 }
439 } 434 }
440 if (bInnerSearch) { 435 if (bInnerSearch) {
441 rndFind.m_CurNode = child; 436 rndFind.m_CurNode = child;
442 CFX_WideString wsOriginCondition = rndFind.m_wsCondition; 437 CFX_WideString wsOriginCondition = rndFind.m_wsCondition;
443 rndFind.m_wsCondition.clear(); 438 rndFind.m_wsCondition.clear();
444 uint32_t dwOriginStyle = rndFind.m_dwStyles; 439 uint32_t dwOriginStyle = rndFind.m_dwStyles;
445 rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL; 440 rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL;
446 XFA_ResolveNodes_Normal(rndFind); 441 ResolveNormal(rndFind);
447 rndFind.m_dwStyles = dwOriginStyle; 442 rndFind.m_dwStyles = dwOriginStyle;
448 rndFind.m_wsCondition = wsOriginCondition; 443 rndFind.m_wsCondition = wsOriginCondition;
449 if (rndFind.m_Nodes.GetSize() > 0) { 444 if (rndFind.m_Nodes.GetSize() > 0) {
450 nodes.Append(rndFind.m_Nodes); 445 nodes.Append(rndFind.m_Nodes);
451 rndFind.m_Nodes.RemoveAll(); 446 rndFind.m_Nodes.RemoveAll();
452 } 447 }
453 } 448 }
454 child = child->GetNodeItem(XFA_NODEITEM_NextSibling); 449 child = child->GetNodeItem(XFA_NODEITEM_NextSibling);
455 } 450 }
456 if (nodes.GetSize() > nNum) { 451 if (nodes.GetSize() > nNum) {
457 if (m_pNodeHelper->XFA_NodeIsTransparent(parentNode)) { 452 if (m_pNodeHelper->NodeIsTransparent(parentNode)) {
458 CXFA_NodeArray upArrayNodes; 453 CXFA_NodeArray upArrayNodes;
459 m_pNodeHelper->XFA_CountSiblings( 454 m_pNodeHelper->CountSiblings(ToNode(nodes[0]), XFA_LOGIC_Transparent,
460 ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, 455 &upArrayNodes,
461 !!(dwStyles & XFA_RESOLVENODE_TagName)); 456 !!(dwStyles & XFA_RESOLVENODE_TagName));
462 if (upArrayNodes.GetSize() > nodes.GetSize()) { 457 if (upArrayNodes.GetSize() > nodes.GetSize()) {
463 upArrayNodes[0] = ToNode(nodes[0]); 458 upArrayNodes[0] = ToNode(nodes[0]);
464 nodes.RemoveAll(); 459 nodes.RemoveAll();
465 nodes.Append((CXFA_ObjArray&)upArrayNodes); 460 nodes.Append((CXFA_ObjArray&)upArrayNodes);
466 upArrayNodes.RemoveAll(); 461 upArrayNodes.RemoveAll();
467 } 462 }
468 } 463 }
469 XFA_ResolveNode_FilterCondition(rnd, wsCondition); 464 FilterCondition(rnd, wsCondition);
470 if (nodes.GetSize() > 0) { 465 if (nodes.GetSize() > 0) {
471 return 1; 466 return 1;
472 } 467 }
473 return 0; 468 return 0;
474 } 469 }
475 } 470 }
476 if (dwStyles & XFA_RESOLVENODE_Parent) { 471 if (dwStyles & XFA_RESOLVENODE_Parent) {
477 uint32_t dwSubStyles = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | 472 uint32_t dwSubStyles = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent |
478 XFA_RESOLVENODE_Properties; 473 XFA_RESOLVENODE_Properties;
479 if (dwStyles & XFA_RESOLVENODE_TagName) { 474 if (dwStyles & XFA_RESOLVENODE_TagName) {
480 dwSubStyles |= XFA_RESOLVENODE_TagName; 475 dwSubStyles |= XFA_RESOLVENODE_TagName;
481 } 476 }
482 if (dwStyles & XFA_RESOLVENODE_ALL) { 477 if (dwStyles & XFA_RESOLVENODE_ALL) {
483 dwSubStyles |= XFA_RESOLVENODE_ALL; 478 dwSubStyles |= XFA_RESOLVENODE_ALL;
484 } 479 }
485 rndFind.m_dwStyles = dwSubStyles; 480 rndFind.m_dwStyles = dwSubStyles;
486 rndFind.m_CurNode = parentNode; 481 rndFind.m_CurNode = parentNode;
487 CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); 482 CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray();
488 array.Add(parentNode); 483 array.Add(parentNode);
489 XFA_ResolveNodes_Normal(rndFind); 484 ResolveNormal(rndFind);
490 if (rndFind.m_Nodes.GetSize() > 0) { 485 if (rndFind.m_Nodes.GetSize() > 0) {
491 nodes.Append(rndFind.m_Nodes); 486 nodes.Append(rndFind.m_Nodes);
492 rndFind.m_Nodes.RemoveAll(); 487 rndFind.m_Nodes.RemoveAll();
493 } 488 }
494 if (nodes.GetSize() > nNum) { 489 if (nodes.GetSize() > nNum) {
495 return 1; 490 return 1;
496 } 491 }
497 } 492 }
498 return 0; 493 return 0;
499 } 494 }
500 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Asterisk( 495 int32_t CXFA_ResolveProcessor::ResolveAsterisk(CXFA_ResolveNodesData& rnd) {
501 CXFA_ResolveNodesData& rnd) {
502 CXFA_Node* curNode = ToNode(rnd.m_CurNode); 496 CXFA_Node* curNode = ToNode(rnd.m_CurNode);
503 CXFA_ObjArray& nodes = rnd.m_Nodes; 497 CXFA_ObjArray& nodes = rnd.m_Nodes;
504 CXFA_NodeArray array; 498 CXFA_NodeArray array;
505 curNode->GetNodeList(array, 499 curNode->GetNodeList(array,
506 XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties); 500 XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties);
507 nodes.Append((CXFA_ObjArray&)array); 501 nodes.Append((CXFA_ObjArray&)array);
508 return nodes.GetSize(); 502 return nodes.GetSize();
509 } 503 }
510 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_PopStack( 504 int32_t CXFA_ResolveProcessor::ResolvePopStack(CFX_Int32Array& stack) {
511 CFX_Int32Array& stack) {
512 int32_t nType = -1; 505 int32_t nType = -1;
513 int32_t iSize = stack.GetSize() - 1; 506 int32_t iSize = stack.GetSize() - 1;
514 if (iSize > -1) { 507 if (iSize > -1) {
515 nType = stack[iSize]; 508 nType = stack[iSize];
516 stack.RemoveAt(iSize, 1); 509 stack.RemoveAt(iSize, 1);
517 } 510 }
518 return nType; 511 return nType;
519 } 512 }
520 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_GetFilter( 513 int32_t CXFA_ResolveProcessor::GetFilter(const CFX_WideStringC& wsExpression,
521 const CFX_WideStringC& wsExpression, 514 int32_t nStart,
522 int32_t nStart, 515 CXFA_ResolveNodesData& rnd) {
523 CXFA_ResolveNodesData& rnd) {
524 ASSERT(nStart > -1); 516 ASSERT(nStart > -1);
525 int32_t iLength = wsExpression.GetLength(); 517 int32_t iLength = wsExpression.GetLength();
526 if (nStart >= iLength) { 518 if (nStart >= iLength) {
527 return 0; 519 return 0;
528 } 520 }
529 CFX_WideString& wsName = rnd.m_wsName; 521 CFX_WideString& wsName = rnd.m_wsName;
530 CFX_WideString& wsCondition = rnd.m_wsCondition; 522 CFX_WideString& wsCondition = rnd.m_wsCondition;
531 FX_WCHAR* pNameBuf = wsName.GetBuffer(iLength - nStart); 523 FX_WCHAR* pNameBuf = wsName.GetBuffer(iLength - nStart);
532 FX_WCHAR* pConditionBuf = wsCondition.GetBuffer(iLength - nStart); 524 FX_WCHAR* pConditionBuf = wsCondition.GetBuffer(iLength - nStart);
533 int32_t nNameCount = 0; 525 int32_t nNameCount = 0;
(...skipping 29 matching lines...) Expand all
563 } 555 }
564 if (bIsCondition) { 556 if (bIsCondition) {
565 pConditionBuf[nConditionCount++] = wCur; 557 pConditionBuf[nConditionCount++] = wCur;
566 } else { 558 } else {
567 pNameBuf[nNameCount++] = wCur; 559 pNameBuf[nNameCount++] = wCur;
568 } 560 }
569 FX_BOOL bRecursive = TRUE; 561 FX_BOOL bRecursive = TRUE;
570 switch (nType) { 562 switch (nType) {
571 case 0: 563 case 0:
572 if (wCur == ']') { 564 if (wCur == ']') {
573 nType = XFA_ResolveNodes_PopStack(stack); 565 nType = ResolvePopStack(stack);
574 bRecursive = FALSE; 566 bRecursive = FALSE;
575 } 567 }
576 break; 568 break;
577 case 1: 569 case 1:
578 if (wCur == ')') { 570 if (wCur == ')') {
579 nType = XFA_ResolveNodes_PopStack(stack); 571 nType = ResolvePopStack(stack);
580 bRecursive = FALSE; 572 bRecursive = FALSE;
581 } 573 }
582 break; 574 break;
583 case 2: 575 case 2:
584 if (wCur == '"') { 576 if (wCur == '"') {
585 nType = XFA_ResolveNodes_PopStack(stack); 577 nType = ResolvePopStack(stack);
586 bRecursive = FALSE; 578 bRecursive = FALSE;
587 } 579 }
588 break; 580 break;
589 } 581 }
590 if (bRecursive) { 582 if (bRecursive) {
591 switch (wCur) { 583 switch (wCur) {
592 case '[': 584 case '[':
593 stack.Add(nType); 585 stack.Add(nType);
594 nType = 0; 586 nType = 0;
595 break; 587 break;
(...skipping 15 matching lines...) Expand all
611 wsName.ReleaseBuffer(nNameCount); 603 wsName.ReleaseBuffer(nNameCount);
612 wsName.TrimLeft(); 604 wsName.TrimLeft();
613 wsName.TrimRight(); 605 wsName.TrimRight();
614 wsCondition.ReleaseBuffer(nConditionCount); 606 wsCondition.ReleaseBuffer(nConditionCount);
615 wsCondition.TrimLeft(); 607 wsCondition.TrimLeft();
616 wsCondition.TrimRight(); 608 wsCondition.TrimRight();
617 rnd.m_uHashName = 609 rnd.m_uHashName =
618 static_cast<XFA_HashCode>(FX_HashCode_GetW(wsName.AsStringC(), false)); 610 static_cast<XFA_HashCode>(FX_HashCode_GetW(wsName.AsStringC(), false));
619 return nStart; 611 return nStart;
620 } 612 }
621 void CXFA_ResolveProcessor::XFA_ResolveNode_ConditionArray( 613 void CXFA_ResolveProcessor::ConditionArray(int32_t iCurIndex,
622 int32_t iCurIndex, 614 CFX_WideString wsCondition,
623 CFX_WideString wsCondition, 615 int32_t iFoundCount,
624 int32_t iFoundCount, 616 CXFA_ResolveNodesData& rnd) {
625 CXFA_ResolveNodesData& rnd) {
626 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; 617 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes;
627 int32_t iLen = wsCondition.GetLength(); 618 int32_t iLen = wsCondition.GetLength();
628 FX_BOOL bRelative = FALSE; 619 FX_BOOL bRelative = FALSE;
629 FX_BOOL bAll = FALSE; 620 FX_BOOL bAll = FALSE;
630 int32_t i = 1; 621 int32_t i = 1;
631 for (; i < iLen; ++i) { 622 for (; i < iLen; ++i) {
632 FX_WCHAR ch = wsCondition[i]; 623 FX_WCHAR ch = wsCondition[i];
633 if (ch == ' ') { 624 if (ch == ' ') {
634 continue; 625 continue;
635 } 626 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); 669 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode);
679 m_pNodeHelper->m_iCreateCount = iIndex - iFoundCount + 1; 670 m_pNodeHelper->m_iCreateCount = iIndex - iFoundCount + 1;
680 } 671 }
681 findNodes.RemoveAll(); 672 findNodes.RemoveAll();
682 } else { 673 } else {
683 CXFA_Node* ret = findNodes[iIndex]; 674 CXFA_Node* ret = findNodes[iIndex];
684 findNodes.RemoveAll(); 675 findNodes.RemoveAll();
685 findNodes.Add(ret); 676 findNodes.Add(ret);
686 } 677 }
687 } 678 }
688 void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( 679 void CXFA_ResolveProcessor::DoPredicateFilter(int32_t iCurIndex,
689 int32_t iCurIndex, 680 CFX_WideString wsCondition,
690 CFX_WideString wsCondition, 681 int32_t iFoundCount,
691 int32_t iFoundCount, 682 CXFA_ResolveNodesData& rnd) {
692 CXFA_ResolveNodesData& rnd) {
693 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; 683 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes;
694 ASSERT(iFoundCount == findNodes.GetSize()); 684 ASSERT(iFoundCount == findNodes.GetSize());
695 CFX_WideString wsExpression; 685 CFX_WideString wsExpression;
696 XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown; 686 XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown;
697 if (wsCondition.Left(2) == FX_WSTRC(L".[") && 687 if (wsCondition.Left(2) == FX_WSTRC(L".[") &&
698 wsCondition.Right(1) == FX_WSTRC(L"]")) { 688 wsCondition.Right(1) == FX_WSTRC(L"]")) {
699 eLangType = XFA_SCRIPTLANGTYPE_Formcalc; 689 eLangType = XFA_SCRIPTLANGTYPE_Formcalc;
700 } else if (wsCondition.Left(2) == FX_WSTRC(L".(") && 690 } else if (wsCondition.Left(2) == FX_WSTRC(L".(") &&
701 wsCondition.Right(1) == FX_WSTRC(L")")) { 691 wsCondition.Right(1) == FX_WSTRC(L")")) {
702 eLangType = XFA_SCRIPTLANGTYPE_Javascript; 692 eLangType = XFA_SCRIPTLANGTYPE_Javascript;
703 } else { 693 } else {
704 return; 694 return;
705 } 695 }
706 696
707 CXFA_ScriptContext* pContext = rnd.m_pSC; 697 CXFA_ScriptContext* pContext = rnd.m_pSC;
708 wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); 698 wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3);
709 for (int32_t i = iFoundCount - 1; i >= 0; i--) { 699 for (int32_t i = iFoundCount - 1; i >= 0; i--) {
710 CXFA_Object* node = findNodes[i]; 700 CXFA_Object* node = findNodes[i];
711 FX_BOOL bRet = FALSE; 701 FX_BOOL bRet = FALSE;
712 std::unique_ptr<CFXJSE_Value> pRetValue( 702 std::unique_ptr<CFXJSE_Value> pRetValue(
713 new CFXJSE_Value(rnd.m_pSC->GetRuntime())); 703 new CFXJSE_Value(rnd.m_pSC->GetRuntime()));
714 bRet = pContext->RunScript(eLangType, wsExpression.AsStringC(), 704 bRet = pContext->RunScript(eLangType, wsExpression.AsStringC(),
715 pRetValue.get(), node); 705 pRetValue.get(), node);
716 if (!bRet || !pRetValue->ToBoolean()) 706 if (!bRet || !pRetValue->ToBoolean())
717 findNodes.RemoveAt(i); 707 findNodes.RemoveAt(i);
718 } 708 }
719 } 709 }
720 710
721 void CXFA_ResolveProcessor::XFA_ResolveNode_FilterCondition( 711 void CXFA_ResolveProcessor::FilterCondition(CXFA_ResolveNodesData& rnd,
722 CXFA_ResolveNodesData& rnd, 712 CFX_WideString wsCondition) {
723 CFX_WideString wsCondition) {
724 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; 713 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes;
725 int32_t iCurrIndex = 0; 714 int32_t iCurrIndex = 0;
726 const CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); 715 const CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray();
727 int32_t iSize = array.GetSize(); 716 int32_t iSize = array.GetSize();
728 if (iSize) { 717 if (iSize) {
729 CXFA_Node* curNode = array[iSize - 1]; 718 CXFA_Node* curNode = array[iSize - 1];
730 FX_BOOL bIsProperty = m_pNodeHelper->XFA_NodeIsProperty(curNode); 719 FX_BOOL bIsProperty = m_pNodeHelper->NodeIsProperty(curNode);
731 if (curNode->IsUnnamed() || 720 if (curNode->IsUnnamed() ||
732 (bIsProperty && curNode->GetElementType() != XFA_Element::PageSet)) { 721 (bIsProperty && curNode->GetElementType() != XFA_Element::PageSet)) {
733 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, 722 iCurrIndex = m_pNodeHelper->GetIndex(curNode, XFA_LOGIC_Transparent,
734 bIsProperty, TRUE); 723 bIsProperty, TRUE);
735 } else { 724 } else {
736 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, 725 iCurrIndex = m_pNodeHelper->GetIndex(curNode, XFA_LOGIC_Transparent,
737 bIsProperty, FALSE); 726 bIsProperty, FALSE);
738 } 727 }
739 } 728 }
740 int32_t iFoundCount = findNodes.GetSize(); 729 int32_t iFoundCount = findNodes.GetSize();
741 wsCondition.TrimLeft(); 730 wsCondition.TrimLeft();
742 wsCondition.TrimRight(); 731 wsCondition.TrimRight();
743 int32_t iLen = wsCondition.GetLength(); 732 int32_t iLen = wsCondition.GetLength();
744 if (!iLen) { 733 if (!iLen) {
745 if (rnd.m_dwStyles & XFA_RESOLVENODE_ALL) { 734 if (rnd.m_dwStyles & XFA_RESOLVENODE_ALL) {
746 return; 735 return;
747 } 736 }
(...skipping 10 matching lines...) Expand all
758 } else { 747 } else {
759 CXFA_Node* ret = findNodes[iCurrIndex]; 748 CXFA_Node* ret = findNodes[iCurrIndex];
760 findNodes.RemoveAll(); 749 findNodes.RemoveAll();
761 findNodes.Add(ret); 750 findNodes.Add(ret);
762 return; 751 return;
763 } 752 }
764 } 753 }
765 FX_WCHAR wTypeChar = wsCondition[0]; 754 FX_WCHAR wTypeChar = wsCondition[0];
766 switch (wTypeChar) { 755 switch (wTypeChar) {
767 case '[': 756 case '[':
768 XFA_ResolveNode_ConditionArray(iCurrIndex, wsCondition, iFoundCount, rnd); 757 ConditionArray(iCurrIndex, wsCondition, iFoundCount, rnd);
769 return; 758 return;
770 case '(': 759 case '(':
771 return; 760 return;
772 case '"': 761 case '"':
773 return; 762 return;
774 case '.': 763 case '.':
775 if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '(')) { 764 if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '(')) {
776 XFA_ResolveNode_DoPredicateFilter(iCurrIndex, wsCondition, iFoundCount, 765 DoPredicateFilter(iCurrIndex, wsCondition, iFoundCount, rnd);
777 rnd);
778 } 766 }
779 default: 767 default:
780 return; 768 return;
781 } 769 }
782 } 770 }
783 void CXFA_ResolveProcessor::XFA_ResolveNodes_SetStylesForChild( 771 void CXFA_ResolveProcessor::SetStylesForChild(uint32_t dwParentStyles,
784 uint32_t dwParentStyles, 772 CXFA_ResolveNodesData& rnd) {
785 CXFA_ResolveNodesData& rnd) {
786 uint32_t dwSubStyles = XFA_RESOLVENODE_Children; 773 uint32_t dwSubStyles = XFA_RESOLVENODE_Children;
787 if (dwParentStyles & XFA_RESOLVENODE_TagName) { 774 if (dwParentStyles & XFA_RESOLVENODE_TagName) {
788 dwSubStyles |= XFA_RESOLVENODE_TagName; 775 dwSubStyles |= XFA_RESOLVENODE_TagName;
789 } 776 }
790 dwSubStyles &= ~XFA_RESOLVENODE_Parent; 777 dwSubStyles &= ~XFA_RESOLVENODE_Parent;
791 dwSubStyles &= ~XFA_RESOLVENODE_Siblings; 778 dwSubStyles &= ~XFA_RESOLVENODE_Siblings;
792 dwSubStyles &= ~XFA_RESOLVENODE_Properties; 779 dwSubStyles &= ~XFA_RESOLVENODE_Properties;
793 dwSubStyles |= XFA_RESOLVENODE_ALL; 780 dwSubStyles |= XFA_RESOLVENODE_ALL;
794 rnd.m_dwStyles = dwSubStyles; 781 rnd.m_dwStyles = dwSubStyles;
795 } 782 }
796 int32_t CXFA_ResolveProcessor::XFA_ResolveNode_SetResultCreateNode( 783 int32_t CXFA_ResolveProcessor::SetResultCreateNode(
797 XFA_RESOLVENODE_RS& resolveNodeRS, 784 XFA_RESOLVENODE_RS& resolveNodeRS,
798 CFX_WideString& wsLastCondition) { 785 CFX_WideString& wsLastCondition) {
799 if (m_pNodeHelper->m_pCreateParent) { 786 if (m_pNodeHelper->m_pCreateParent) {
800 resolveNodeRS.nodes.Add(m_pNodeHelper->m_pCreateParent); 787 resolveNodeRS.nodes.Add(m_pNodeHelper->m_pCreateParent);
801 } else { 788 } else {
802 m_pNodeHelper->XFA_CreateNode_ForCondition(wsLastCondition); 789 m_pNodeHelper->CreateNode_ForCondition(wsLastCondition);
803 } 790 }
804 resolveNodeRS.dwFlags = m_pNodeHelper->m_iCreateFlag; 791 resolveNodeRS.dwFlags = m_pNodeHelper->m_iCreateFlag;
805 if (resolveNodeRS.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { 792 if (resolveNodeRS.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) {
806 if (m_pNodeHelper->m_iCurAllStart != -1) { 793 if (m_pNodeHelper->m_iCurAllStart != -1) {
807 resolveNodeRS.dwFlags = XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll; 794 resolveNodeRS.dwFlags = XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll;
808 } 795 }
809 } 796 }
810 return resolveNodeRS.nodes.GetSize(); 797 return resolveNodeRS.nodes.GetSize();
811 } 798 }
812 void CXFA_ResolveProcessor::XFA_ResolveNode_SetIndexDataBind( 799 void CXFA_ResolveProcessor::SetIndexDataBind(CFX_WideString& wsNextCondition,
813 CFX_WideString& wsNextCondition, 800 int32_t& iIndex,
814 int32_t& iIndex, 801 int32_t iCount) {
815 int32_t iCount) { 802 if (m_pNodeHelper->CreateNode_ForCondition(wsNextCondition)) {
816 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) {
817 if (m_pNodeHelper->m_eLastCreateType == XFA_Element::DataGroup) { 803 if (m_pNodeHelper->m_eLastCreateType == XFA_Element::DataGroup) {
818 iIndex = 0; 804 iIndex = 0;
819 } else { 805 } else {
820 iIndex = iCount - 1; 806 iIndex = iCount - 1;
821 } 807 }
822 } else { 808 } else {
823 iIndex = iCount - 1; 809 iIndex = iCount - 1;
824 } 810 }
825 } 811 }
826 812
827 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC) 813 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC)
828 : m_pSC(pSC), 814 : m_pSC(pSC),
829 m_CurNode(nullptr), 815 m_CurNode(nullptr),
830 m_wsName(), 816 m_wsName(),
831 m_uHashName(XFA_HASHCODE_None), 817 m_uHashName(XFA_HASHCODE_None),
832 m_wsCondition(), 818 m_wsCondition(),
833 m_nLevel(0), 819 m_nLevel(0),
834 m_Nodes(), 820 m_Nodes(),
835 m_dwStyles(XFA_RESOLVENODE_Children), 821 m_dwStyles(XFA_RESOLVENODE_Children),
836 m_pScriptAttribute(nullptr), 822 m_pScriptAttribute(nullptr),
837 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} 823 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {}
838 824
839 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() { 825 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() {
840 m_Nodes.RemoveAll(); 826 m_Nodes.RemoveAll();
841 } 827 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_script_resolveprocessor.h ('k') | xfa/fxfa/parser/xfa_script_signaturepseudomodel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698