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

Side by Side Diff: xfa/fxfa/parser/xfa_script_nodehelper.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
« no previous file with comments | « xfa/fxfa/parser/xfa_script_nodehelper.h ('k') | xfa/fxfa/parser/xfa_script_resolveprocessor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_nodehelper.h" 7 #include "xfa/fxfa/parser/xfa_script_nodehelper.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_utils.h" 17 #include "xfa/fxfa/parser/xfa_utils.h"
18 18
19 CXFA_NodeHelper::CXFA_NodeHelper() 19 CXFA_NodeHelper::CXFA_NodeHelper()
20 : m_eLastCreateType(XFA_Element::DataValue), 20 : m_eLastCreateType(XFA_Element::DataValue),
21 m_pCreateParent(nullptr), 21 m_pCreateParent(nullptr),
22 m_iCreateCount(0), 22 m_iCreateCount(0),
23 m_iCreateFlag(XFA_RESOLVENODE_RSTYPE_CreateNodeOne), 23 m_iCreateFlag(XFA_RESOLVENODE_RSTYPE_CreateNodeOne),
24 m_iCurAllStart(-1), 24 m_iCurAllStart(-1),
25 m_pAllStartParent(nullptr) {} 25 m_pAllStartParent(nullptr) {}
26 26
27 CXFA_NodeHelper::~CXFA_NodeHelper() {} 27 CXFA_NodeHelper::~CXFA_NodeHelper() {}
28 28
29 CXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetOneChild( 29 CXFA_Node* CXFA_NodeHelper::ResolveNodes_GetOneChild(CXFA_Node* parent,
30 CXFA_Node* parent, 30 const FX_WCHAR* pwsName,
31 const FX_WCHAR* pwsName, 31 FX_BOOL bIsClassName) {
32 FX_BOOL bIsClassName) {
33 if (!parent) { 32 if (!parent) {
34 return nullptr; 33 return nullptr;
35 } 34 }
36 CXFA_NodeArray siblings; 35 CXFA_NodeArray siblings;
37 uint32_t uNameHash = FX_HashCode_GetW(CFX_WideStringC(pwsName), false); 36 uint32_t uNameHash = FX_HashCode_GetW(CFX_WideStringC(pwsName), false);
38 XFA_NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName); 37 NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName);
39 if (siblings.GetSize() == 0) { 38 if (siblings.GetSize() == 0) {
40 return nullptr; 39 return nullptr;
41 } 40 }
42 return siblings[0]; 41 return siblings[0];
43 } 42 }
44 43
45 int32_t CXFA_NodeHelper::XFA_CountSiblings(CXFA_Node* pNode, 44 int32_t CXFA_NodeHelper::CountSiblings(CXFA_Node* pNode,
46 XFA_LOGIC_TYPE eLogicType, 45 XFA_LOGIC_TYPE eLogicType,
47 CXFA_NodeArray* pSiblings, 46 CXFA_NodeArray* pSiblings,
48 FX_BOOL bIsClassName) { 47 FX_BOOL bIsClassName) {
49 if (!pNode) 48 if (!pNode)
50 return 0; 49 return 0;
51 CXFA_Node* parent = 50 CXFA_Node* parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent);
52 XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent);
53 if (!parent) 51 if (!parent)
54 return 0; 52 return 0;
55 const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( 53 const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
56 parent->GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN); 54 parent->GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
57 if (!pProperty && eLogicType == XFA_LOGIC_Transparent) { 55 if (!pProperty && eLogicType == XFA_LOGIC_Transparent) {
58 parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); 56 parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent);
59 if (!parent) { 57 if (!parent) {
60 return 0; 58 return 0;
61 } 59 }
62 } 60 }
63 if (bIsClassName) { 61 if (bIsClassName) {
64 return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetClassHashCode(), 62 return NodeAcc_TraverseSiblings(parent, pNode->GetClassHashCode(),
65 pSiblings, eLogicType, bIsClassName); 63 pSiblings, eLogicType, bIsClassName);
66 } else { 64 } else {
67 return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetNameHash(), pSiblings, 65 return NodeAcc_TraverseSiblings(parent, pNode->GetNameHash(), pSiblings,
68 eLogicType, bIsClassName); 66 eLogicType, bIsClassName);
69 } 67 }
70 } 68 }
71 69
72 int32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseAnySiblings( 70 int32_t CXFA_NodeHelper::NodeAcc_TraverseAnySiblings(CXFA_Node* parent,
73 CXFA_Node* parent, 71 uint32_t dNameHash,
74 uint32_t dNameHash, 72 CXFA_NodeArray* pSiblings,
75 CXFA_NodeArray* pSiblings, 73 FX_BOOL bIsClassName) {
76 FX_BOOL bIsClassName) {
77 if (!parent || !pSiblings) { 74 if (!parent || !pSiblings) {
78 return 0; 75 return 0;
79 } 76 }
80 int32_t nCount = 0; 77 int32_t nCount = 0;
81 int32_t i = 0; 78 int32_t i = 0;
82 CXFA_NodeArray properties; 79 CXFA_NodeArray properties;
83 parent->GetNodeList(properties, XFA_NODEFILTER_Properties); 80 parent->GetNodeList(properties, XFA_NODEFILTER_Properties);
84 int32_t nProperties = properties.GetSize(); 81 int32_t nProperties = properties.GetSize();
85 for (i = 0; i < nProperties; ++i) { 82 for (i = 0; i < nProperties; ++i) {
86 CXFA_Node* child = properties[i]; 83 CXFA_Node* child = properties[i];
87 if (bIsClassName) { 84 if (bIsClassName) {
88 if (child->GetClassHashCode() == dNameHash) { 85 if (child->GetClassHashCode() == dNameHash) {
89 pSiblings->Add(child); 86 pSiblings->Add(child);
90 nCount++; 87 nCount++;
91 } 88 }
92 } else { 89 } else {
93 if (child->GetNameHash() == dNameHash) { 90 if (child->GetNameHash() == dNameHash) {
94 pSiblings->Add(child); 91 pSiblings->Add(child);
95 nCount++; 92 nCount++;
96 } 93 }
97 } 94 }
98 if (nCount > 0) { 95 if (nCount > 0) {
99 return nCount; 96 return nCount;
100 } 97 }
101 nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, 98 nCount +=
102 bIsClassName); 99 NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, bIsClassName);
103 } 100 }
104 CXFA_NodeArray children; 101 CXFA_NodeArray children;
105 parent->GetNodeList(children, XFA_NODEFILTER_Children); 102 parent->GetNodeList(children, XFA_NODEFILTER_Children);
106 int32_t nChildren = children.GetSize(); 103 int32_t nChildren = children.GetSize();
107 for (i = 0; i < nChildren; i++) { 104 for (i = 0; i < nChildren; i++) {
108 CXFA_Node* child = children[i]; 105 CXFA_Node* child = children[i];
109 if (bIsClassName) { 106 if (bIsClassName) {
110 if (child->GetClassHashCode() == dNameHash) { 107 if (child->GetClassHashCode() == dNameHash) {
111 if (pSiblings) { 108 if (pSiblings) {
112 pSiblings->Add(child); 109 pSiblings->Add(child);
113 } 110 }
114 nCount++; 111 nCount++;
115 } 112 }
116 } else { 113 } else {
117 if (child->GetNameHash() == dNameHash) { 114 if (child->GetNameHash() == dNameHash) {
118 if (pSiblings) { 115 if (pSiblings) {
119 pSiblings->Add(child); 116 pSiblings->Add(child);
120 } 117 }
121 nCount++; 118 nCount++;
122 } 119 }
123 } 120 }
124 if (nCount > 0) { 121 if (nCount > 0) {
125 return nCount; 122 return nCount;
126 } 123 }
127 nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, 124 nCount +=
128 bIsClassName); 125 NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, bIsClassName);
129 } 126 }
130 return nCount; 127 return nCount;
131 } 128 }
132 129
133 int32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseSiblings(CXFA_Node* parent, 130 int32_t CXFA_NodeHelper::NodeAcc_TraverseSiblings(CXFA_Node* parent,
134 uint32_t dNameHash, 131 uint32_t dNameHash,
135 CXFA_NodeArray* pSiblings, 132 CXFA_NodeArray* pSiblings,
136 XFA_LOGIC_TYPE eLogicType, 133 XFA_LOGIC_TYPE eLogicType,
137 FX_BOOL bIsClassName, 134 FX_BOOL bIsClassName,
138 FX_BOOL bIsFindProperty) { 135 FX_BOOL bIsFindProperty) {
139 if (!parent || !pSiblings) { 136 if (!parent || !pSiblings) {
140 return 0; 137 return 0;
141 } 138 }
142 int32_t nCount = 0; 139 int32_t nCount = 0;
143 int32_t i = 0; 140 int32_t i = 0;
144 if (bIsFindProperty) { 141 if (bIsFindProperty) {
145 CXFA_NodeArray properties; 142 CXFA_NodeArray properties;
146 parent->GetNodeList(properties, XFA_NODEFILTER_Properties); 143 parent->GetNodeList(properties, XFA_NODEFILTER_Properties);
147 int32_t nProperties = properties.GetSize(); 144 int32_t nProperties = properties.GetSize();
148 for (i = 0; i < nProperties; ++i) { 145 for (i = 0; i < nProperties; ++i) {
149 CXFA_Node* child = properties[i]; 146 CXFA_Node* child = properties[i];
150 if (bIsClassName) { 147 if (bIsClassName) {
151 if (child->GetClassHashCode() == dNameHash) { 148 if (child->GetClassHashCode() == dNameHash) {
152 pSiblings->Add(child); 149 pSiblings->Add(child);
153 nCount++; 150 nCount++;
154 } 151 }
155 } else { 152 } else {
156 if (child->GetNameHash() == dNameHash) { 153 if (child->GetNameHash() == dNameHash) {
157 if (child->GetElementType() != XFA_Element::PageSet && 154 if (child->GetElementType() != XFA_Element::PageSet &&
158 child->GetElementType() != XFA_Element::Extras && 155 child->GetElementType() != XFA_Element::Extras &&
159 child->GetElementType() != XFA_Element::Items) { 156 child->GetElementType() != XFA_Element::Items) {
160 pSiblings->Add(child); 157 pSiblings->Add(child);
161 nCount++; 158 nCount++;
162 } 159 }
163 } 160 }
164 } 161 }
165 if (child->IsUnnamed() && 162 if (child->IsUnnamed() &&
166 child->GetElementType() == XFA_Element::PageSet) { 163 child->GetElementType() == XFA_Element::PageSet) {
167 nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, 164 nCount += NodeAcc_TraverseSiblings(child, dNameHash, pSiblings,
168 eLogicType, bIsClassName, FALSE); 165 eLogicType, bIsClassName, FALSE);
169 } 166 }
170 } 167 }
171 if (nCount > 0) { 168 if (nCount > 0) {
172 return nCount; 169 return nCount;
173 } 170 }
174 } 171 }
175 CXFA_NodeArray children; 172 CXFA_NodeArray children;
176 parent->GetNodeList(children, XFA_NODEFILTER_Children); 173 parent->GetNodeList(children, XFA_NODEFILTER_Children);
177 int32_t nChildren = children.GetSize(); 174 int32_t nChildren = children.GetSize();
178 for (i = 0; i < nChildren; i++) { 175 for (i = 0; i < nChildren; i++) {
(...skipping 12 matching lines...) Expand all
191 if (child->GetNameHash() == dNameHash) { 188 if (child->GetNameHash() == dNameHash) {
192 if (pSiblings) { 189 if (pSiblings) {
193 pSiblings->Add(child); 190 pSiblings->Add(child);
194 } 191 }
195 nCount++; 192 nCount++;
196 } 193 }
197 } 194 }
198 if (eLogicType == XFA_LOGIC_NoTransparent) { 195 if (eLogicType == XFA_LOGIC_NoTransparent) {
199 continue; 196 continue;
200 } 197 }
201 if (XFA_NodeIsTransparent(child) && 198 if (NodeIsTransparent(child) &&
202 child->GetElementType() != XFA_Element::PageSet) { 199 child->GetElementType() != XFA_Element::PageSet) {
203 nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, 200 nCount += NodeAcc_TraverseSiblings(child, dNameHash, pSiblings,
204 eLogicType, bIsClassName, FALSE); 201 eLogicType, bIsClassName, FALSE);
205 } 202 }
206 } 203 }
207 return nCount; 204 return nCount;
208 } 205 }
209 206
210 CXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetParent( 207 CXFA_Node* CXFA_NodeHelper::ResolveNodes_GetParent(CXFA_Node* pNode,
211 CXFA_Node* pNode, 208 XFA_LOGIC_TYPE eLogicType) {
212 XFA_LOGIC_TYPE eLogicType) {
213 if (!pNode) { 209 if (!pNode) {
214 return nullptr; 210 return nullptr;
215 } 211 }
216 if (eLogicType == XFA_LOGIC_NoTransparent) { 212 if (eLogicType == XFA_LOGIC_NoTransparent) {
217 return pNode->GetNodeItem(XFA_NODEITEM_Parent); 213 return pNode->GetNodeItem(XFA_NODEITEM_Parent);
218 } 214 }
219 CXFA_Node* parent; 215 CXFA_Node* parent;
220 CXFA_Node* node = pNode; 216 CXFA_Node* node = pNode;
221 while (TRUE) { 217 while (TRUE) {
222 parent = XFA_ResolveNodes_GetParent(node); 218 parent = ResolveNodes_GetParent(node);
223 if (!parent) { 219 if (!parent) {
224 break; 220 break;
225 } 221 }
226 XFA_Element parentType = parent->GetElementType(); 222 XFA_Element parentType = parent->GetElementType();
227 if ((!parent->IsUnnamed() && parentType != XFA_Element::SubformSet) || 223 if ((!parent->IsUnnamed() && parentType != XFA_Element::SubformSet) ||
228 parentType == XFA_Element::Variables) { 224 parentType == XFA_Element::Variables) {
229 break; 225 break;
230 } 226 }
231 node = parent; 227 node = parent;
232 } 228 }
233 return parent; 229 return parent;
234 } 230 }
235 231
236 int32_t CXFA_NodeHelper::XFA_GetIndex(CXFA_Node* pNode, 232 int32_t CXFA_NodeHelper::GetIndex(CXFA_Node* pNode,
237 XFA_LOGIC_TYPE eLogicType, 233 XFA_LOGIC_TYPE eLogicType,
238 FX_BOOL bIsProperty, 234 FX_BOOL bIsProperty,
239 FX_BOOL bIsClassIndex) { 235 FX_BOOL bIsClassIndex) {
240 CXFA_Node* parent = 236 CXFA_Node* parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent);
241 XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent);
242 if (!parent) { 237 if (!parent) {
243 return 0; 238 return 0;
244 } 239 }
245 if (!bIsProperty && eLogicType == XFA_LOGIC_Transparent) { 240 if (!bIsProperty && eLogicType == XFA_LOGIC_Transparent) {
246 parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); 241 parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent);
247 if (!parent) { 242 if (!parent) {
248 return 0; 243 return 0;
249 } 244 }
250 } 245 }
251 uint32_t dwHashName = pNode->GetNameHash(); 246 uint32_t dwHashName = pNode->GetNameHash();
252 if (bIsClassIndex) { 247 if (bIsClassIndex) {
253 dwHashName = pNode->GetClassHashCode(); 248 dwHashName = pNode->GetClassHashCode();
254 } 249 }
255 CXFA_NodeArray siblings; 250 CXFA_NodeArray siblings;
256 int32_t iSize = XFA_NodeAcc_TraverseSiblings(parent, dwHashName, &siblings, 251 int32_t iSize = NodeAcc_TraverseSiblings(parent, dwHashName, &siblings,
257 eLogicType, bIsClassIndex); 252 eLogicType, bIsClassIndex);
258 for (int32_t i = 0; i < iSize; ++i) { 253 for (int32_t i = 0; i < iSize; ++i) {
259 CXFA_Node* child = siblings[i]; 254 CXFA_Node* child = siblings[i];
260 if (child == pNode) { 255 if (child == pNode) {
261 return i; 256 return i;
262 } 257 }
263 } 258 }
264 return 0; 259 return 0;
265 } 260 }
266 261
267 void CXFA_NodeHelper::XFA_GetNameExpression(CXFA_Node* refNode, 262 void CXFA_NodeHelper::GetNameExpression(CXFA_Node* refNode,
268 CFX_WideString& wsName, 263 CFX_WideString& wsName,
269 FX_BOOL bIsAllPath, 264 FX_BOOL bIsAllPath,
270 XFA_LOGIC_TYPE eLogicType) { 265 XFA_LOGIC_TYPE eLogicType) {
271 wsName.clear(); 266 wsName.clear();
272 if (bIsAllPath) { 267 if (bIsAllPath) {
273 XFA_GetNameExpression(refNode, wsName, FALSE, eLogicType); 268 GetNameExpression(refNode, wsName, FALSE, eLogicType);
274 CFX_WideString wsParent; 269 CFX_WideString wsParent;
275 CXFA_Node* parent = 270 CXFA_Node* parent =
276 XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent); 271 ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent);
277 while (parent) { 272 while (parent) {
278 XFA_GetNameExpression(parent, wsParent, FALSE, eLogicType); 273 GetNameExpression(parent, wsParent, FALSE, eLogicType);
279 wsParent += L"."; 274 wsParent += L".";
280 wsParent += wsName; 275 wsParent += wsName;
281 wsName = wsParent; 276 wsName = wsParent;
282 parent = XFA_ResolveNodes_GetParent(parent, XFA_LOGIC_NoTransparent); 277 parent = ResolveNodes_GetParent(parent, XFA_LOGIC_NoTransparent);
283 } 278 }
284 return; 279 return;
285 } 280 }
286 281
287 CFX_WideString ws; 282 CFX_WideString ws;
288 FX_BOOL bIsProperty = XFA_NodeIsProperty(refNode); 283 FX_BOOL bIsProperty = NodeIsProperty(refNode);
289 if (refNode->IsUnnamed() || 284 if (refNode->IsUnnamed() ||
290 (bIsProperty && refNode->GetElementType() != XFA_Element::PageSet)) { 285 (bIsProperty && refNode->GetElementType() != XFA_Element::PageSet)) {
291 ws = refNode->GetClassName(); 286 ws = refNode->GetClassName();
292 wsName.Format(L"#%s[%d]", ws.c_str(), 287 wsName.Format(L"#%s[%d]", ws.c_str(),
293 XFA_GetIndex(refNode, eLogicType, bIsProperty, TRUE)); 288 GetIndex(refNode, eLogicType, bIsProperty, TRUE));
294 return; 289 return;
295 } 290 }
296 ws = refNode->GetCData(XFA_ATTRIBUTE_Name); 291 ws = refNode->GetCData(XFA_ATTRIBUTE_Name);
297 ws.Replace(L".", L"\\."); 292 ws.Replace(L".", L"\\.");
298 wsName.Format(L"%s[%d]", ws.c_str(), 293 wsName.Format(L"%s[%d]", ws.c_str(),
299 XFA_GetIndex(refNode, eLogicType, bIsProperty, FALSE)); 294 GetIndex(refNode, eLogicType, bIsProperty, FALSE));
300 } 295 }
301 296
302 FX_BOOL CXFA_NodeHelper::XFA_NodeIsTransparent(CXFA_Node* refNode) { 297 FX_BOOL CXFA_NodeHelper::NodeIsTransparent(CXFA_Node* refNode) {
303 if (!refNode) { 298 if (!refNode) {
304 return FALSE; 299 return FALSE;
305 } 300 }
306 XFA_Element refNodeType = refNode->GetElementType(); 301 XFA_Element refNodeType = refNode->GetElementType();
307 if ((refNode->IsUnnamed() && refNode->IsContainerNode()) || 302 if ((refNode->IsUnnamed() && refNode->IsContainerNode()) ||
308 refNodeType == XFA_Element::SubformSet || 303 refNodeType == XFA_Element::SubformSet ||
309 refNodeType == XFA_Element::Area || refNodeType == XFA_Element::Proto) { 304 refNodeType == XFA_Element::Area || refNodeType == XFA_Element::Proto) {
310 return TRUE; 305 return TRUE;
311 } 306 }
312 return FALSE; 307 return FALSE;
313 } 308 }
314 309
315 FX_BOOL CXFA_NodeHelper::XFA_CreateNode_ForCondition( 310 FX_BOOL CXFA_NodeHelper::CreateNode_ForCondition(CFX_WideString& wsCondition) {
316 CFX_WideString& wsCondition) {
317 int32_t iLen = wsCondition.GetLength(); 311 int32_t iLen = wsCondition.GetLength();
318 CFX_WideString wsIndex(L"0"); 312 CFX_WideString wsIndex(L"0");
319 FX_BOOL bAll = FALSE; 313 FX_BOOL bAll = FALSE;
320 if (iLen == 0) { 314 if (iLen == 0) {
321 m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; 315 m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne;
322 return FALSE; 316 return FALSE;
323 } 317 }
324 if (wsCondition.GetAt(0) == '[') { 318 if (wsCondition.GetAt(0) == '[') {
325 int32_t i = 1; 319 int32_t i = 1;
326 for (; i < iLen; ++i) { 320 for (; i < iLen; ++i) {
(...skipping 17 matching lines...) Expand all
344 m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; 338 m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne;
345 wsIndex = wsCondition.Mid(i, iLen - 1 - i); 339 wsIndex = wsCondition.Mid(i, iLen - 1 - i);
346 } 340 }
347 int32_t iIndex = wsIndex.GetInteger(); 341 int32_t iIndex = wsIndex.GetInteger();
348 m_iCreateCount = iIndex; 342 m_iCreateCount = iIndex;
349 return TRUE; 343 return TRUE;
350 } 344 }
351 return FALSE; 345 return FALSE;
352 } 346 }
353 347
354 FX_BOOL CXFA_NodeHelper::XFA_ResolveNodes_CreateNode( 348 FX_BOOL CXFA_NodeHelper::ResolveNodes_CreateNode(
355 CFX_WideString wsName, 349 CFX_WideString wsName,
356 CFX_WideString wsCondition, 350 CFX_WideString wsCondition,
357 FX_BOOL bLastNode, 351 FX_BOOL bLastNode,
358 CXFA_ScriptContext* pScriptContext) { 352 CXFA_ScriptContext* pScriptContext) {
359 if (!m_pCreateParent) { 353 if (!m_pCreateParent) {
360 return FALSE; 354 return FALSE;
361 } 355 }
362 FX_BOOL bIsClassName = FALSE; 356 FX_BOOL bIsClassName = FALSE;
363 FX_BOOL bResult = FALSE; 357 FX_BOOL bResult = FALSE;
364 if (wsName.GetAt(0) == '!') { 358 if (wsName.GetAt(0) == '!') {
365 wsName = wsName.Right(wsName.GetLength() - 1); 359 wsName = wsName.Right(wsName.GetLength() - 1);
366 m_pCreateParent = ToNode( 360 m_pCreateParent = ToNode(
367 pScriptContext->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); 361 pScriptContext->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets));
368 } 362 }
369 if (wsName.GetAt(0) == '#') { 363 if (wsName.GetAt(0) == '#') {
370 bIsClassName = TRUE; 364 bIsClassName = TRUE;
371 wsName = wsName.Right(wsName.GetLength() - 1); 365 wsName = wsName.Right(wsName.GetLength() - 1);
372 } 366 }
373 if (m_iCreateCount == 0) { 367 if (m_iCreateCount == 0) {
374 XFA_CreateNode_ForCondition(wsCondition); 368 CreateNode_ForCondition(wsCondition);
375 } 369 }
376 if (bIsClassName) { 370 if (bIsClassName) {
377 XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC()); 371 XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC());
378 if (eType == XFA_Element::Unknown) 372 if (eType == XFA_Element::Unknown)
379 return FALSE; 373 return FALSE;
380 374
381 for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) { 375 for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) {
382 CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eType); 376 CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eType);
383 if (pNewNode) { 377 if (pNewNode) {
384 m_pCreateParent->InsertChild(pNewNode); 378 m_pCreateParent->InsertChild(pNewNode);
(...skipping 20 matching lines...) Expand all
405 bResult = TRUE; 399 bResult = TRUE;
406 } 400 }
407 } 401 }
408 } 402 }
409 if (!bResult) { 403 if (!bResult) {
410 m_pCreateParent = nullptr; 404 m_pCreateParent = nullptr;
411 } 405 }
412 return bResult; 406 return bResult;
413 } 407 }
414 408
415 void CXFA_NodeHelper::XFA_SetCreateNodeType(CXFA_Node* refNode) { 409 void CXFA_NodeHelper::SetCreateNodeType(CXFA_Node* refNode) {
416 if (!refNode) { 410 if (!refNode) {
417 return; 411 return;
418 } 412 }
419 if (refNode->GetElementType() == XFA_Element::Subform) { 413 if (refNode->GetElementType() == XFA_Element::Subform) {
420 m_eLastCreateType = XFA_Element::DataGroup; 414 m_eLastCreateType = XFA_Element::DataGroup;
421 } else if (refNode->GetElementType() == XFA_Element::Field) { 415 } else if (refNode->GetElementType() == XFA_Element::Field) {
422 m_eLastCreateType = XFA_FieldIsMultiListBox(refNode) 416 m_eLastCreateType = XFA_FieldIsMultiListBox(refNode)
423 ? XFA_Element::DataGroup 417 ? XFA_Element::DataGroup
424 : XFA_Element::DataValue; 418 : XFA_Element::DataValue;
425 } else if (refNode->GetElementType() == XFA_Element::ExclGroup) { 419 } else if (refNode->GetElementType() == XFA_Element::ExclGroup) {
426 m_eLastCreateType = XFA_Element::DataValue; 420 m_eLastCreateType = XFA_Element::DataValue;
427 } 421 }
428 } 422 }
429 423
430 FX_BOOL CXFA_NodeHelper::XFA_NodeIsProperty(CXFA_Node* refNode) { 424 FX_BOOL CXFA_NodeHelper::NodeIsProperty(CXFA_Node* refNode) {
431 CXFA_Node* parent = 425 CXFA_Node* parent = ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent);
432 XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent);
433 return parent && refNode && 426 return parent && refNode &&
434 XFA_GetPropertyOfElement(parent->GetElementType(), 427 XFA_GetPropertyOfElement(parent->GetElementType(),
435 refNode->GetElementType(), 428 refNode->GetElementType(),
436 XFA_XDPPACKET_UNKNOWN); 429 XFA_XDPPACKET_UNKNOWN);
437 } 430 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_script_nodehelper.h ('k') | xfa/fxfa/parser/xfa_script_resolveprocessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698