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

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

Issue 2018733002: Clean up part of CXFA_Node class (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: revert two FX_BOOL->bool Created 4 years, 6 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 | « no previous file | no next file » | 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_object.h" 7 #include "xfa/fxfa/parser/xfa_object.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "core/fxcrt/include/fx_ext.h" 11 #include "core/fxcrt/include/fx_ext.h"
12 #include "third_party/base/stl_util.h" 12 #include "third_party/base/stl_util.h"
13 #include "xfa/fde/xml/fde_xml_imp.h" 13 #include "xfa/fde/xml/fde_xml_imp.h"
14 #include "xfa/fgas/crt/fgas_codepage.h" 14 #include "xfa/fgas/crt/fgas_codepage.h"
15 #include "xfa/fgas/crt/fgas_system.h" 15 #include "xfa/fgas/crt/fgas_system.h"
16 #include "xfa/fxfa/app/xfa_ffnotify.h" 16 #include "xfa/fxfa/app/xfa_ffnotify.h"
17 #include "xfa/fxfa/parser/cxfa_occur.h" 17 #include "xfa/fxfa/parser/cxfa_occur.h"
18 #include "xfa/fxfa/parser/xfa_basic_imp.h" 18 #include "xfa/fxfa/parser/xfa_basic_imp.h"
19 #include "xfa/fxfa/parser/xfa_doclayout.h" 19 #include "xfa/fxfa/parser/xfa_doclayout.h"
20 #include "xfa/fxfa/parser/xfa_document.h" 20 #include "xfa/fxfa/parser/xfa_document.h"
21 #include "xfa/fxfa/parser/xfa_document_layout_imp.h" 21 #include "xfa/fxfa/parser/xfa_document_layout_imp.h"
22 #include "xfa/fxfa/parser/xfa_localemgr.h" 22 #include "xfa/fxfa/parser/xfa_localemgr.h"
23 #include "xfa/fxfa/parser/xfa_parser.h" 23 #include "xfa/fxfa/parser/xfa_parser.h"
24 #include "xfa/fxfa/parser/xfa_parser_imp.h" 24 #include "xfa/fxfa/parser/xfa_parser_imp.h"
25 #include "xfa/fxfa/parser/xfa_script.h" 25 #include "xfa/fxfa/parser/xfa_script.h"
26 #include "xfa/fxfa/parser/xfa_script_imp.h" 26 #include "xfa/fxfa/parser/xfa_script_imp.h"
27 #include "xfa/fxfa/parser/xfa_utils.h" 27 #include "xfa/fxfa/parser/xfa_utils.h"
28 #include "xfa/fxjse/cfxjse_arguments.h" 28 #include "xfa/fxjse/cfxjse_arguments.h"
29 29
30 namespace {
31
32 void XFA_DeleteWideString(void* pData) {
33 delete static_cast<CFX_WideString*>(pData);
34 }
35
36 void XFA_CopyWideString(void*& pData) {
37 if (pData) {
38 CFX_WideString* pNewData = new CFX_WideString(*(CFX_WideString*)pData);
39 pData = pNewData;
40 }
41 }
42
43 XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {XFA_DeleteWideString,
44 XFA_CopyWideString};
45
46 XFA_OBJECTTYPE XFA_GetElementObjectType(XFA_ELEMENT eElement) {
47 return static_cast<XFA_OBJECTTYPE>(XFA_GetElementByID(eElement)->eObjectType);
48 }
49
50 void XFA_DataNodeDeleteBindItem(void* pData) {
51 delete static_cast<CXFA_NodeArray*>(pData);
52 }
53
54 XFA_MAPDATABLOCKCALLBACKINFO deleteBindItemCallBack = {
55 XFA_DataNodeDeleteBindItem, nullptr};
56
57 } // namespace
58
30 CXFA_Object::CXFA_Object(CXFA_Document* pDocument, uint32_t uFlags) 59 CXFA_Object::CXFA_Object(CXFA_Document* pDocument, uint32_t uFlags)
31 : m_pDocument(pDocument), m_uFlags(uFlags) {} 60 : m_pDocument(pDocument), m_uFlags(uFlags) {}
61
32 void CXFA_Object::GetClassName(CFX_WideStringC& wsName) const { 62 void CXFA_Object::GetClassName(CFX_WideStringC& wsName) const {
33 wsName = XFA_GetElementByID(GetClassID())->pName; 63 wsName = XFA_GetElementByID(GetClassID())->pName;
34 } 64 }
65
35 uint32_t CXFA_Object::GetClassHashCode() const { 66 uint32_t CXFA_Object::GetClassHashCode() const {
36 return XFA_GetElementByID(GetClassID())->uHash; 67 return XFA_GetElementByID(GetClassID())->uHash;
37 } 68 }
69
38 XFA_ELEMENT CXFA_Object::GetClassID() const { 70 XFA_ELEMENT CXFA_Object::GetClassID() const {
39 if (IsNode()) { 71 if (IsNode())
40 return AsNode()->GetClassID(); 72 return AsNode()->GetClassID();
41 } 73 if (IsOrdinaryObject())
42 if (IsOrdinaryObject()) {
43 return AsOrdinaryObject()->GetClassID(); 74 return AsOrdinaryObject()->GetClassID();
44 } 75 if (IsNodeList())
45 if (IsNodeList()) {
46 return AsNodeList()->GetClassID(); 76 return AsNodeList()->GetClassID();
47 } 77 if (IsOrdinaryList())
48 if (IsOrdinaryList()) {
49 return XFA_ELEMENT_List; 78 return XFA_ELEMENT_List;
50 }
51 ASSERT(FALSE); 79 ASSERT(FALSE);
52 return (XFA_ELEMENT)0; 80 return (XFA_ELEMENT)0;
53 } 81 }
82
54 void CXFA_Object::Script_ObjectClass_ClassName(CFXJSE_Value* pValue, 83 void CXFA_Object::Script_ObjectClass_ClassName(CFXJSE_Value* pValue,
55 FX_BOOL bSetting, 84 FX_BOOL bSetting,
56 XFA_ATTRIBUTE eAttribute) { 85 XFA_ATTRIBUTE eAttribute) {
57 if (!bSetting) { 86 if (!bSetting) {
58 CFX_WideStringC className; 87 CFX_WideStringC className;
59 GetClassName(className); 88 GetClassName(className);
60 FXJSE_Value_SetUTF8String( 89 FXJSE_Value_SetUTF8String(
61 pValue, 90 pValue,
62 FX_UTF8Encode(className.c_str(), className.GetLength()).AsStringC()); 91 FX_UTF8Encode(className.c_str(), className.GetLength()).AsStringC());
63 } else { 92 } else {
64 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 93 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
65 } 94 }
66 } 95 }
96
67 void CXFA_Object::ThrowScriptErrorMessage(int32_t iStringID, ...) { 97 void CXFA_Object::ThrowScriptErrorMessage(int32_t iStringID, ...) {
68 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); 98 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider();
69 ASSERT(pAppProvider); 99 ASSERT(pAppProvider);
70 CFX_WideString wsFormat; 100 CFX_WideString wsFormat;
71 pAppProvider->LoadString(iStringID, wsFormat); 101 pAppProvider->LoadString(iStringID, wsFormat);
72 CFX_WideString wsMessage; 102 CFX_WideString wsMessage;
73 va_list arg_ptr; 103 va_list arg_ptr;
74 va_start(arg_ptr, iStringID); 104 va_start(arg_ptr, iStringID);
75 wsMessage.FormatV(wsFormat.c_str(), arg_ptr); 105 wsMessage.FormatV(wsFormat.c_str(), arg_ptr);
76 va_end(arg_ptr); 106 va_end(arg_ptr);
77 FXJSE_ThrowMessage( 107 FXJSE_ThrowMessage(
78 "", FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); 108 "", FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC());
79 } 109 }
80 110
81 static void XFA_DeleteWideString(void* pData) {
82 delete static_cast<CFX_WideString*>(pData);
83 }
84
85 static void XFA_CopyWideString(void*& pData) {
86 if (pData) {
87 CFX_WideString* pNewData = new CFX_WideString(*(CFX_WideString*)pData);
88 pData = pNewData;
89 }
90 }
91 static XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {
92 XFA_DeleteWideString, XFA_CopyWideString};
93 static XFA_OBJECTTYPE XFA_GetElementObjectType(XFA_ELEMENT eElement) {
94 return (XFA_OBJECTTYPE)XFA_GetElementByID(eElement)->eObjectType;
95 }
96 CXFA_Node::CXFA_Node(CXFA_Document* pDoc, 111 CXFA_Node::CXFA_Node(CXFA_Document* pDoc,
97 uint16_t ePacket, 112 uint16_t ePacket,
98 XFA_ELEMENT eElement) 113 XFA_ELEMENT eElement)
99 : CXFA_Object(pDoc, XFA_GetElementObjectType(eElement)), 114 : CXFA_Object(pDoc, XFA_GetElementObjectType(eElement)),
100 m_pNext(nullptr), 115 m_pNext(nullptr),
101 m_pChild(nullptr), 116 m_pChild(nullptr),
102 m_pLastChild(nullptr), 117 m_pLastChild(nullptr),
103 m_pParent(nullptr), 118 m_pParent(nullptr),
104 m_pXMLNode(nullptr), 119 m_pXMLNode(nullptr),
105 m_eNodeClass(eElement), 120 m_eNodeClass(eElement),
106 m_ePacket(ePacket), 121 m_ePacket(ePacket),
107 m_dwNameHash(0), 122 m_dwNameHash(0),
108 m_pAuxNode(nullptr), 123 m_pAuxNode(nullptr),
109 m_pMapModuleData(nullptr) { 124 m_pMapModuleData(nullptr) {
110 ASSERT(m_pDocument); 125 ASSERT(m_pDocument);
111 } 126 }
127
112 CXFA_Node::~CXFA_Node() { 128 CXFA_Node::~CXFA_Node() {
113 ASSERT(m_pParent == NULL); 129 ASSERT(!m_pParent);
114 RemoveMapModuleKey(); 130 RemoveMapModuleKey();
115 CXFA_Node *pNext, *pNode = m_pChild; 131 CXFA_Node* pNode = m_pChild;
116 while (pNode) { 132 while (pNode) {
117 pNext = pNode->m_pNext; 133 CXFA_Node* pNext = pNode->m_pNext;
118 pNode->m_pParent = NULL; 134 pNode->m_pParent = nullptr;
119 delete pNode; 135 delete pNode;
120 pNode = pNext; 136 pNode = pNext;
121 } 137 }
122 if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) { 138 if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode))
123 m_pXMLNode->Release(); 139 m_pXMLNode->Release();
124 }
125 } 140 }
141
126 CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) { 142 CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) {
127 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); 143 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory();
128 CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass); 144 CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass);
129 if (!pClone) { 145 if (!pClone)
130 return NULL; 146 return nullptr;
131 } 147
132 MergeAllData(pClone); 148 MergeAllData(pClone);
133 pClone->UpdateNameHash(); 149 pClone->UpdateNameHash();
134 if (IsNeedSavingXMLNode()) { 150 if (IsNeedSavingXMLNode()) {
135 CFDE_XMLNode* pCloneXML = NULL; 151 CFDE_XMLNode* pCloneXML = nullptr;
136 if (IsAttributeInXML()) { 152 if (IsAttributeInXML()) {
137 CFX_WideString wsName; 153 CFX_WideString wsName;
138 GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); 154 GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE);
139 CFDE_XMLElement* pCloneXMLElement = new CFDE_XMLElement(wsName); 155 CFDE_XMLElement* pCloneXMLElement = new CFDE_XMLElement(wsName);
140 CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value); 156 CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value);
141 if (!wsValue.IsEmpty()) { 157 if (!wsValue.IsEmpty()) {
142 pCloneXMLElement->SetTextData(CFX_WideString(wsValue)); 158 pCloneXMLElement->SetTextData(CFX_WideString(wsValue));
143 } 159 }
144 pCloneXML = pCloneXMLElement; 160 pCloneXML = pCloneXMLElement;
145 pCloneXMLElement = NULL; 161 pCloneXMLElement = nullptr;
146 pClone->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown); 162 pClone->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown);
147 } else { 163 } else {
148 pCloneXML = m_pXMLNode->Clone(FALSE); 164 pCloneXML = m_pXMLNode->Clone(FALSE);
149 } 165 }
150 pClone->SetXMLMappingNode(pCloneXML); 166 pClone->SetXMLMappingNode(pCloneXML);
151 pClone->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); 167 pClone->SetFlag(XFA_NODEFLAG_OwnXMLNode, false);
152 } 168 }
153 if (bRecursive) { 169 if (bRecursive) {
154 for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild; 170 for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild;
155 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 171 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
156 pClone->InsertChild(pChild->Clone(bRecursive)); 172 pClone->InsertChild(pChild->Clone(bRecursive));
157 } 173 }
158 } 174 }
159 pClone->SetFlag(XFA_NODEFLAG_Initialized, true); 175 pClone->SetFlag(XFA_NODEFLAG_Initialized, true);
160 pClone->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); 176 pClone->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
161 return pClone; 177 return pClone;
162 } 178 }
179
163 CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem) const { 180 CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem) const {
164 switch (eItem) { 181 switch (eItem) {
165 case XFA_NODEITEM_NextSibling: 182 case XFA_NODEITEM_NextSibling:
166 return m_pNext; 183 return m_pNext;
167 case XFA_NODEITEM_FirstChild: 184 case XFA_NODEITEM_FirstChild:
168 return m_pChild; 185 return m_pChild;
169 case XFA_NODEITEM_Parent: 186 case XFA_NODEITEM_Parent:
170 return m_pParent; 187 return m_pParent;
171 case XFA_NODEITEM_PrevSibling: 188 case XFA_NODEITEM_PrevSibling:
172 if (m_pParent) { 189 if (m_pParent) {
173 CXFA_Node* pSibling = m_pParent->m_pChild; 190 CXFA_Node* pSibling = m_pParent->m_pChild;
174 CXFA_Node* pPrev = NULL; 191 CXFA_Node* pPrev = nullptr;
175 while (pSibling && pSibling != this) { 192 while (pSibling && pSibling != this) {
176 pPrev = pSibling; 193 pPrev = pSibling;
177 pSibling = pSibling->m_pNext; 194 pSibling = pSibling->m_pNext;
178 } 195 }
179 return pPrev; 196 return pPrev;
180 } 197 }
181 return NULL; 198 return nullptr;
182 default: 199 default:
183 break; 200 break;
184 } 201 }
185 return NULL; 202 return nullptr;
186 } 203 }
204
187 CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem, 205 CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem,
188 XFA_OBJECTTYPE eType) const { 206 XFA_OBJECTTYPE eType) const {
189 CXFA_Node* pNode = NULL; 207 CXFA_Node* pNode = nullptr;
190 switch (eItem) { 208 switch (eItem) {
191 case XFA_NODEITEM_NextSibling: 209 case XFA_NODEITEM_NextSibling:
192 pNode = m_pNext; 210 pNode = m_pNext;
193 if (eType != XFA_OBJECTTYPEMASK) { 211 if (eType != XFA_OBJECTTYPEMASK) {
194 while (pNode && pNode->GetObjectType() != eType) { 212 while (pNode && pNode->GetObjectType() != eType)
195 pNode = pNode->m_pNext; 213 pNode = pNode->m_pNext;
196 }
197 } 214 }
198 break; 215 break;
199 case XFA_NODEITEM_FirstChild: 216 case XFA_NODEITEM_FirstChild:
200 pNode = m_pChild; 217 pNode = m_pChild;
201 if (eType != XFA_OBJECTTYPEMASK) { 218 if (eType != XFA_OBJECTTYPEMASK) {
202 while (pNode && pNode->GetObjectType() != eType) { 219 while (pNode && pNode->GetObjectType() != eType)
203 pNode = pNode->m_pNext; 220 pNode = pNode->m_pNext;
204 }
205 } 221 }
206 break; 222 break;
207 case XFA_NODEITEM_Parent: 223 case XFA_NODEITEM_Parent:
208 pNode = m_pParent; 224 pNode = m_pParent;
209 if (eType != XFA_OBJECTTYPEMASK) { 225 if (eType != XFA_OBJECTTYPEMASK) {
210 while (pNode && pNode->GetObjectType() != eType) { 226 while (pNode && pNode->GetObjectType() != eType)
211 pNode = pNode->m_pParent; 227 pNode = pNode->m_pParent;
212 }
213 } 228 }
214 break; 229 break;
215 case XFA_NODEITEM_PrevSibling: 230 case XFA_NODEITEM_PrevSibling:
216 if (m_pParent) { 231 if (m_pParent) {
217 CXFA_Node* pSibling = m_pParent->m_pChild; 232 CXFA_Node* pSibling = m_pParent->m_pChild;
218 while (pSibling && pSibling != this) { 233 while (pSibling && pSibling != this) {
219 if (eType == XFA_OBJECTTYPEMASK || 234 if (eType == XFA_OBJECTTYPEMASK ||
220 eType == pSibling->GetObjectType()) { 235 eType == pSibling->GetObjectType()) {
221 pNode = pSibling; 236 pNode = pSibling;
222 } 237 }
223 pSibling = pSibling->m_pNext; 238 pSibling = pSibling->m_pNext;
224 } 239 }
225 } 240 }
226 break; 241 break;
227 default: 242 default:
228 break; 243 break;
229 } 244 }
230 return pNode; 245 return pNode;
231 } 246 }
247
232 int32_t CXFA_Node::GetNodeList(CXFA_NodeArray& nodes, 248 int32_t CXFA_Node::GetNodeList(CXFA_NodeArray& nodes,
233 uint32_t dwTypeFilter, 249 uint32_t dwTypeFilter,
234 XFA_ELEMENT eElementFilter, 250 XFA_ELEMENT eElementFilter,
235 int32_t iLevel) { 251 int32_t iLevel) {
236 if (--iLevel < 0) { 252 if (--iLevel < 0) {
237 return nodes.GetSize(); 253 return nodes.GetSize();
238 } 254 }
239 if (eElementFilter != XFA_ELEMENT_UNKNOWN) { 255 if (eElementFilter != XFA_ELEMENT_UNKNOWN) {
240 CXFA_Node* pChild = m_pChild; 256 CXFA_Node* pChild = m_pChild;
241 while (pChild) { 257 while (pChild) {
242 if (pChild->GetClassID() == eElementFilter) { 258 if (pChild->GetClassID() == eElementFilter) {
243 nodes.Add(pChild); 259 nodes.Add(pChild);
244 if (iLevel > 0) { 260 if (iLevel > 0) {
245 GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel); 261 GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel);
246 } 262 }
247 } 263 }
248 pChild = pChild->m_pNext; 264 pChild = pChild->m_pNext;
249 } 265 }
250 } else if (dwTypeFilter == 266 } else if (dwTypeFilter ==
251 (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) { 267 (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) {
252 CXFA_Node* pChild = m_pChild; 268 CXFA_Node* pChild = m_pChild;
253 while (pChild) { 269 while (pChild) {
254 nodes.Add(pChild); 270 nodes.Add(pChild);
255 if (iLevel > 0) { 271 if (iLevel > 0) {
256 GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel); 272 GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel);
257 } 273 }
258 pChild = pChild->m_pNext; 274 pChild = pChild->m_pNext;
259 } 275 }
260 } else if (dwTypeFilter != 0) { 276 } else if (dwTypeFilter != 0) {
261 FX_BOOL bFilterChildren = (dwTypeFilter & XFA_NODEFILTER_Children) != 0; 277 bool bFilterChildren = !!(dwTypeFilter & XFA_NODEFILTER_Children);
262 FX_BOOL bFilterProperties = (dwTypeFilter & XFA_NODEFILTER_Properties) != 0; 278 bool bFilterProperties = !!(dwTypeFilter & XFA_NODEFILTER_Properties);
263 FX_BOOL bFilterOneOfProperties = 279 bool bFilterOneOfProperties =
264 (dwTypeFilter & XFA_NODEFILTER_OneOfProperty) != 0; 280 !!(dwTypeFilter & XFA_NODEFILTER_OneOfProperty);
265 CXFA_Node* pChild = m_pChild; 281 CXFA_Node* pChild = m_pChild;
266 while (pChild) { 282 while (pChild) {
267 const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( 283 const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
268 GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN); 284 GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN);
269 if (pProperty) { 285 if (pProperty) {
270 if (bFilterProperties) { 286 if (bFilterProperties) {
271 nodes.Add(pChild); 287 nodes.Add(pChild);
272 } else if (bFilterOneOfProperties && 288 } else if (bFilterOneOfProperties &&
273 (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) { 289 (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) {
274 nodes.Add(pChild); 290 nodes.Add(pChild);
275 } else if (bFilterChildren && 291 } else if (bFilterChildren &&
276 (pChild->GetClassID() == XFA_ELEMENT_Variables || 292 (pChild->GetClassID() == XFA_ELEMENT_Variables ||
277 pChild->GetClassID() == XFA_ELEMENT_PageSet)) { 293 pChild->GetClassID() == XFA_ELEMENT_PageSet)) {
278 nodes.Add(pChild); 294 nodes.Add(pChild);
279 } 295 }
280 } else { 296 } else if (bFilterChildren) {
281 if (bFilterChildren) { 297 nodes.Add(pChild);
282 nodes.Add(pChild);
283 }
284 } 298 }
285 pChild = pChild->m_pNext; 299 pChild = pChild->m_pNext;
286 } 300 }
287 if (bFilterOneOfProperties && nodes.GetSize() < 1) { 301 if (bFilterOneOfProperties && nodes.GetSize() < 1) {
288 int32_t iProperties = 0; 302 int32_t iProperties = 0;
289 const XFA_PROPERTY* pProperty = 303 const XFA_PROPERTY* pProperty =
290 XFA_GetElementProperties(GetClassID(), iProperties); 304 XFA_GetElementProperties(GetClassID(), iProperties);
291 if (pProperty == NULL || iProperties < 1) { 305 if (!pProperty || iProperties < 1)
292 return 0; 306 return 0;
293 }
294 for (int32_t i = 0; i < iProperties; i++) { 307 for (int32_t i = 0; i < iProperties; i++) {
295 if (pProperty[i].uFlags & XFA_PROPERTYFLAG_DefaultOneOf) { 308 if (pProperty[i].uFlags & XFA_PROPERTYFLAG_DefaultOneOf) {
296 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); 309 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory();
297 const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID()); 310 const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID());
298 CXFA_Node* pNewNode = 311 CXFA_Node* pNewNode =
299 pFactory->CreateNode(pPacket, (XFA_ELEMENT)pProperty[i].eName); 312 pFactory->CreateNode(pPacket, (XFA_ELEMENT)pProperty[i].eName);
300 if (!pNewNode) { 313 if (!pNewNode)
301 break; 314 break;
302 } 315 InsertChild(pNewNode, nullptr);
303 InsertChild(pNewNode, NULL);
304 pNewNode->SetFlag(XFA_NODEFLAG_Initialized, true); 316 pNewNode->SetFlag(XFA_NODEFLAG_Initialized, true);
305 nodes.Add(pNewNode); 317 nodes.Add(pNewNode);
306 break; 318 break;
307 } 319 }
308 } 320 }
309 } 321 }
310 } 322 }
311 return nodes.GetSize(); 323 return nodes.GetSize();
312 } 324 }
325
313 CXFA_Node* CXFA_Node::CreateSamePacketNode(XFA_ELEMENT eElement, 326 CXFA_Node* CXFA_Node::CreateSamePacketNode(XFA_ELEMENT eElement,
314 uint32_t dwFlags) { 327 uint32_t dwFlags) {
315 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); 328 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory();
316 CXFA_Node* pNode = pFactory->CreateNode(m_ePacket, eElement); 329 CXFA_Node* pNode = pFactory->CreateNode(m_ePacket, eElement);
317 pNode->SetFlag(dwFlags, true); 330 pNode->SetFlag(dwFlags, true);
318 return pNode; 331 return pNode;
319 } 332 }
333
320 CXFA_Node* CXFA_Node::CloneTemplateToForm(FX_BOOL bRecursive) { 334 CXFA_Node* CXFA_Node::CloneTemplateToForm(FX_BOOL bRecursive) {
321 ASSERT(m_ePacket == XFA_XDPPACKET_Template); 335 ASSERT(m_ePacket == XFA_XDPPACKET_Template);
322 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); 336 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory();
323 CXFA_Node* pClone = pFactory->CreateNode(XFA_XDPPACKET_Form, m_eNodeClass); 337 CXFA_Node* pClone = pFactory->CreateNode(XFA_XDPPACKET_Form, m_eNodeClass);
324 if (!pClone) { 338 if (!pClone)
325 return NULL; 339 return nullptr;
326 } 340
327 pClone->SetTemplateNode(this); 341 pClone->SetTemplateNode(this);
328 pClone->UpdateNameHash(); 342 pClone->UpdateNameHash();
329 pClone->SetXMLMappingNode(GetXMLMappingNode()); 343 pClone->SetXMLMappingNode(GetXMLMappingNode());
330 if (bRecursive) { 344 if (bRecursive) {
331 for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild; 345 for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild;
332 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 346 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
333 pClone->InsertChild(pChild->CloneTemplateToForm(bRecursive)); 347 pClone->InsertChild(pChild->CloneTemplateToForm(bRecursive));
334 } 348 }
335 } 349 }
336 pClone->SetFlag(XFA_NODEFLAG_Initialized, true); 350 pClone->SetFlag(XFA_NODEFLAG_Initialized, true);
337 return pClone; 351 return pClone;
338 } 352 }
339 353
340 CXFA_Node* CXFA_Node::GetTemplateNode() const { 354 CXFA_Node* CXFA_Node::GetTemplateNode() const {
341 return m_pAuxNode; 355 return m_pAuxNode;
342 } 356 }
343 357
344 void CXFA_Node::SetTemplateNode(CXFA_Node* pTemplateNode) { 358 void CXFA_Node::SetTemplateNode(CXFA_Node* pTemplateNode) {
345 m_pAuxNode = pTemplateNode; 359 m_pAuxNode = pTemplateNode;
346 } 360 }
361
347 CXFA_Node* CXFA_Node::GetBindData() { 362 CXFA_Node* CXFA_Node::GetBindData() {
348 ASSERT(GetPacketID() == XFA_XDPPACKET_Form); 363 ASSERT(GetPacketID() == XFA_XDPPACKET_Form);
349 return static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode)); 364 return static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
350 } 365 }
366
351 int32_t CXFA_Node::GetBindItems(CXFA_NodeArray& formItems) { 367 int32_t CXFA_Node::GetBindItems(CXFA_NodeArray& formItems) {
352 if (m_uFlags & XFA_NODEFLAG_BindFormItems) { 368 if (m_uFlags & XFA_NODEFLAG_BindFormItems) {
353 CXFA_NodeArray* pItems = NULL; 369 CXFA_NodeArray* pItems = nullptr;
354 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); 370 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
355 formItems.Copy(*pItems); 371 formItems.Copy(*pItems);
356 return formItems.GetSize(); 372 return formItems.GetSize();
357 } 373 }
358 CXFA_Node* pFormNode = 374 CXFA_Node* pFormNode =
359 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode)); 375 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
360 if (pFormNode) { 376 if (pFormNode)
361 formItems.Add(pFormNode); 377 formItems.Add(pFormNode);
362 }
363 return formItems.GetSize(); 378 return formItems.GetSize();
364 } 379 }
365 380
366 static void XFA_DataNodeDeleteBindItem(void* pData) {
367 delete static_cast<CXFA_NodeArray*>(pData);
368 }
369
370 static XFA_MAPDATABLOCKCALLBACKINFO deleteBindItemCallBack = {
371 XFA_DataNodeDeleteBindItem, NULL};
372 int32_t CXFA_Node::AddBindItem(CXFA_Node* pFormNode) { 381 int32_t CXFA_Node::AddBindItem(CXFA_Node* pFormNode) {
373 ASSERT(pFormNode); 382 ASSERT(pFormNode);
374 if (m_uFlags & XFA_NODEFLAG_BindFormItems) { 383 if (m_uFlags & XFA_NODEFLAG_BindFormItems) {
375 CXFA_NodeArray* pItems = NULL; 384 CXFA_NodeArray* pItems = nullptr;
376 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); 385 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
377 ASSERT(pItems); 386 ASSERT(pItems);
378 if (pItems->Find(pFormNode) < 0) { 387 if (pItems->Find(pFormNode) < 0) {
379 pItems->Add(pFormNode); 388 pItems->Add(pFormNode);
380 } 389 }
381 return pItems->GetSize(); 390 return pItems->GetSize();
382 } 391 }
383 CXFA_Node* pOldFormItem = 392 CXFA_Node* pOldFormItem =
384 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode)); 393 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
385 if (!pOldFormItem) { 394 if (!pOldFormItem) {
386 SetObject(XFA_ATTRIBUTE_BindingNode, pFormNode); 395 SetObject(XFA_ATTRIBUTE_BindingNode, pFormNode);
387 return 1; 396 return 1;
388 } else if (pOldFormItem == pFormNode) { 397 } else if (pOldFormItem == pFormNode) {
389 return 1; 398 return 1;
390 } 399 }
391 CXFA_NodeArray* pItems = new CXFA_NodeArray; 400 CXFA_NodeArray* pItems = new CXFA_NodeArray;
392 SetObject(XFA_ATTRIBUTE_BindingNode, pItems, &deleteBindItemCallBack); 401 SetObject(XFA_ATTRIBUTE_BindingNode, pItems, &deleteBindItemCallBack);
393 pItems->Add(pOldFormItem); 402 pItems->Add(pOldFormItem);
394 pItems->Add(pFormNode); 403 pItems->Add(pFormNode);
395 m_uFlags |= XFA_NODEFLAG_BindFormItems; 404 m_uFlags |= XFA_NODEFLAG_BindFormItems;
396 return 2; 405 return 2;
397 } 406 }
407
398 int32_t CXFA_Node::RemoveBindItem(CXFA_Node* pFormNode) { 408 int32_t CXFA_Node::RemoveBindItem(CXFA_Node* pFormNode) {
399 if (m_uFlags & XFA_NODEFLAG_BindFormItems) { 409 if (m_uFlags & XFA_NODEFLAG_BindFormItems) {
400 CXFA_NodeArray* pItems = NULL; 410 CXFA_NodeArray* pItems = nullptr;
401 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); 411 TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
402 ASSERT(pItems); 412 ASSERT(pItems);
403 int32_t iIndex = pItems->Find(pFormNode); 413 int32_t iIndex = pItems->Find(pFormNode);
404 int32_t iCount = pItems->GetSize(); 414 int32_t iCount = pItems->GetSize();
405 if (iIndex >= 0) { 415 if (iIndex >= 0) {
406 if (iIndex != iCount - 1) { 416 if (iIndex != iCount - 1)
407 pItems->SetAt(iIndex, pItems->GetAt(iCount - 1)); 417 pItems->SetAt(iIndex, pItems->GetAt(iCount - 1));
408 }
409 pItems->RemoveAt(iCount - 1); 418 pItems->RemoveAt(iCount - 1);
410 if (iCount == 2) { 419 if (iCount == 2) {
411 CXFA_Node* pLastFormNode = pItems->GetAt(0); 420 CXFA_Node* pLastFormNode = pItems->GetAt(0);
412 SetObject(XFA_ATTRIBUTE_BindingNode, pLastFormNode); 421 SetObject(XFA_ATTRIBUTE_BindingNode, pLastFormNode);
413 m_uFlags &= ~XFA_NODEFLAG_BindFormItems; 422 m_uFlags &= ~XFA_NODEFLAG_BindFormItems;
414 } 423 }
415 iCount--; 424 iCount--;
416 } 425 }
417 return iCount; 426 return iCount;
418 } 427 }
419 CXFA_Node* pOldFormItem = 428 CXFA_Node* pOldFormItem =
420 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode)); 429 static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
421 if (pOldFormItem == pFormNode) { 430 if (pOldFormItem == pFormNode) {
422 SetObject(XFA_ATTRIBUTE_BindingNode, NULL); 431 SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
423 pOldFormItem = NULL; 432 pOldFormItem = nullptr;
424 } 433 }
425 return pOldFormItem == NULL ? 0 : 1; 434 return pOldFormItem ? 1 : 0;
426 } 435 }
436
427 FX_BOOL CXFA_Node::HasBindItem() { 437 FX_BOOL CXFA_Node::HasBindItem() {
428 return (GetPacketID() == XFA_XDPPACKET_Datasets) && 438 return GetPacketID() == XFA_XDPPACKET_Datasets &&
429 GetObject(XFA_ATTRIBUTE_BindingNode) != NULL; 439 GetObject(XFA_ATTRIBUTE_BindingNode);
430 } 440 }
441
431 CXFA_WidgetData* CXFA_Node::GetWidgetData() { 442 CXFA_WidgetData* CXFA_Node::GetWidgetData() {
432 return (CXFA_WidgetData*)GetObject(XFA_ATTRIBUTE_WidgetData); 443 return (CXFA_WidgetData*)GetObject(XFA_ATTRIBUTE_WidgetData);
433 } 444 }
445
434 CXFA_WidgetData* CXFA_Node::GetContainerWidgetData() { 446 CXFA_WidgetData* CXFA_Node::GetContainerWidgetData() {
435 if (GetPacketID() != XFA_XDPPACKET_Form) { 447 if (GetPacketID() != XFA_XDPPACKET_Form)
436 return NULL; 448 return nullptr;
437 }
438 XFA_ELEMENT classID = GetClassID(); 449 XFA_ELEMENT classID = GetClassID();
439 if (classID == XFA_ELEMENT_ExclGroup) { 450 if (classID == XFA_ELEMENT_ExclGroup)
440 return NULL; 451 return nullptr;
441 }
442 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); 452 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
443 if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_ExclGroup) { 453 if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_ExclGroup)
444 return NULL; 454 return nullptr;
445 } 455
446 if (classID == XFA_ELEMENT_Field) { 456 if (classID == XFA_ELEMENT_Field) {
447 CXFA_WidgetData* pFieldWidgetData = GetWidgetData(); 457 CXFA_WidgetData* pFieldWidgetData = GetWidgetData();
448 if (pFieldWidgetData && 458 if (pFieldWidgetData &&
449 pFieldWidgetData->GetChoiceListOpen() == 459 pFieldWidgetData->GetChoiceListOpen() ==
450 XFA_ATTRIBUTEENUM_MultiSelect) { 460 XFA_ATTRIBUTEENUM_MultiSelect) {
451 return NULL; 461 return nullptr;
452 } else { 462 } else {
453 CFX_WideString wsPicture; 463 CFX_WideString wsPicture;
454 if (pFieldWidgetData) { 464 if (pFieldWidgetData) {
455 pFieldWidgetData->GetPictureContent(wsPicture, 465 pFieldWidgetData->GetPictureContent(wsPicture,
456 XFA_VALUEPICTURE_DataBind); 466 XFA_VALUEPICTURE_DataBind);
457 } 467 }
458 if (!wsPicture.IsEmpty()) { 468 if (!wsPicture.IsEmpty())
459 return pFieldWidgetData; 469 return pFieldWidgetData;
460 }
461 CXFA_Node* pDataNode = GetBindData(); 470 CXFA_Node* pDataNode = GetBindData();
462 if (!pDataNode) { 471 if (!pDataNode)
463 return NULL; 472 return nullptr;
464 } 473 pFieldWidgetData = nullptr;
465 pFieldWidgetData = NULL;
466 CXFA_NodeArray formNodes; 474 CXFA_NodeArray formNodes;
467 pDataNode->GetBindItems(formNodes); 475 pDataNode->GetBindItems(formNodes);
468 for (int32_t i = 0; i < formNodes.GetSize(); i++) { 476 for (int32_t i = 0; i < formNodes.GetSize(); i++) {
469 CXFA_Node* pFormNode = formNodes.GetAt(i); 477 CXFA_Node* pFormNode = formNodes.GetAt(i);
470 if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) { 478 if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved))
471 continue; 479 continue;
472 }
473 pFieldWidgetData = pFormNode->GetWidgetData(); 480 pFieldWidgetData = pFormNode->GetWidgetData();
474 if (pFieldWidgetData) { 481 if (pFieldWidgetData) {
475 pFieldWidgetData->GetPictureContent(wsPicture, 482 pFieldWidgetData->GetPictureContent(wsPicture,
476 XFA_VALUEPICTURE_DataBind); 483 XFA_VALUEPICTURE_DataBind);
477 } 484 }
478 if (!wsPicture.IsEmpty()) { 485 if (!wsPicture.IsEmpty())
479 break; 486 break;
480 } 487 pFieldWidgetData = nullptr;
481 pFieldWidgetData = NULL;
482 } 488 }
483 return pFieldWidgetData; 489 return pFieldWidgetData;
484 } 490 }
485 } 491 }
486 CXFA_Node* pGrandNode = 492 CXFA_Node* pGrandNode =
487 pParentNode ? pParentNode->GetNodeItem(XFA_NODEITEM_Parent) : NULL; 493 pParentNode ? pParentNode->GetNodeItem(XFA_NODEITEM_Parent) : nullptr;
488 CXFA_Node* pValueNode = 494 CXFA_Node* pValueNode =
489 (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_Value) 495 (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_Value)
490 ? pParentNode 496 ? pParentNode
491 : NULL; 497 : nullptr;
492 if (!pValueNode) { 498 if (!pValueNode) {
493 pValueNode = (pGrandNode && pGrandNode->GetClassID() == XFA_ELEMENT_Value) 499 pValueNode = (pGrandNode && pGrandNode->GetClassID() == XFA_ELEMENT_Value)
494 ? pGrandNode 500 ? pGrandNode
495 : NULL; 501 : nullptr;
496 } 502 }
497 CXFA_Node* pParentOfValueNode = 503 CXFA_Node* pParentOfValueNode =
498 pValueNode ? pValueNode->GetNodeItem(XFA_NODEITEM_Parent) : NULL; 504 pValueNode ? pValueNode->GetNodeItem(XFA_NODEITEM_Parent) : nullptr;
499 return pParentOfValueNode ? pParentOfValueNode->GetContainerWidgetData() 505 return pParentOfValueNode ? pParentOfValueNode->GetContainerWidgetData()
500 : NULL; 506 : nullptr;
501 } 507 }
508
502 FX_BOOL CXFA_Node::GetLocaleName(CFX_WideString& wsLocaleName) { 509 FX_BOOL CXFA_Node::GetLocaleName(CFX_WideString& wsLocaleName) {
503 CXFA_Node* pForm = GetDocument()->GetXFAObject(XFA_HASHCODE_Form)->AsNode(); 510 CXFA_Node* pForm = GetDocument()->GetXFAObject(XFA_HASHCODE_Form)->AsNode();
504 CXFA_Node* pTopSubform = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform); 511 CXFA_Node* pTopSubform = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform);
505 ASSERT(pTopSubform); 512 ASSERT(pTopSubform);
506 CXFA_Node* pLocaleNode = this; 513 CXFA_Node* pLocaleNode = this;
507 FX_BOOL bLocale = FALSE; 514 FX_BOOL bLocale = FALSE;
508 do { 515 do {
509 bLocale = pLocaleNode->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE); 516 bLocale = pLocaleNode->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE);
510 if (!bLocale) { 517 if (!bLocale) {
511 pLocaleNode = pLocaleNode->GetNodeItem(XFA_NODEITEM_Parent); 518 pLocaleNode = pLocaleNode->GetNodeItem(XFA_NODEITEM_Parent);
512 } 519 }
513 } while (pLocaleNode && pLocaleNode != pTopSubform && !bLocale); 520 } while (pLocaleNode && pLocaleNode != pTopSubform && !bLocale);
514 if (bLocale) { 521 if (bLocale)
515 return bLocale; 522 return TRUE;
516 }
517 CXFA_Node* pConfig = ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Config)); 523 CXFA_Node* pConfig = ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Config));
518 wsLocaleName = GetDocument()->GetLocalMgr()->GetConfigLocaleName(pConfig); 524 wsLocaleName = GetDocument()->GetLocalMgr()->GetConfigLocaleName(pConfig);
519 if (!wsLocaleName.IsEmpty()) { 525 if (!wsLocaleName.IsEmpty())
520 bLocale = TRUE; 526 return TRUE;
521 } 527 if (pTopSubform &&
522 if (bLocale) { 528 pTopSubform->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE)) {
523 return bLocale; 529 return TRUE;
524 }
525 if (pTopSubform) {
526 bLocale = pTopSubform->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE);
527 }
528 if (bLocale) {
529 return bLocale;
530 } 530 }
531 IFX_Locale* pLocale = GetDocument()->GetLocalMgr()->GetDefLocale(); 531 IFX_Locale* pLocale = GetDocument()->GetLocalMgr()->GetDefLocale();
532 if (pLocale) { 532 if (pLocale) {
533 wsLocaleName = pLocale->GetName(); 533 wsLocaleName = pLocale->GetName();
534 bLocale = TRUE; 534 return TRUE;
535 } 535 }
536 return bLocale; 536 return FALSE;
537 } 537 }
538
538 XFA_ATTRIBUTEENUM CXFA_Node::GetIntact() { 539 XFA_ATTRIBUTEENUM CXFA_Node::GetIntact() {
539 XFA_ELEMENT eElement = GetClassID(); 540 XFA_ELEMENT eElement = GetClassID();
540 CXFA_Node* pKeep = GetFirstChildByClass(XFA_ELEMENT_Keep); 541 CXFA_Node* pKeep = GetFirstChildByClass(XFA_ELEMENT_Keep);
541 XFA_ATTRIBUTEENUM eLayoutType = GetEnum(XFA_ATTRIBUTE_Layout); 542 XFA_ATTRIBUTEENUM eLayoutType = GetEnum(XFA_ATTRIBUTE_Layout);
542 if (pKeep) { 543 if (pKeep) {
543 XFA_ATTRIBUTEENUM eIntact; 544 XFA_ATTRIBUTEENUM eIntact;
544 if (pKeep->TryEnum(XFA_ATTRIBUTE_Intact, eIntact, FALSE)) { 545 if (pKeep->TryEnum(XFA_ATTRIBUTE_Intact, eIntact, FALSE)) {
545 if (eIntact == XFA_ATTRIBUTEENUM_None && 546 if (eIntact == XFA_ATTRIBUTEENUM_None &&
546 eLayoutType == XFA_ATTRIBUTEENUM_Row && 547 eLayoutType == XFA_ATTRIBUTEENUM_Row &&
547 m_pDocument->GetCurVersionMode() < XFA_VERSION_208) { 548 m_pDocument->GetCurVersionMode() < XFA_VERSION_208) {
548 CXFA_Node* pPreviewRow = 549 CXFA_Node* pPreviewRow =
549 GetNodeItem(XFA_NODEITEM_PrevSibling, XFA_OBJECTTYPE_ContainerNode); 550 GetNodeItem(XFA_NODEITEM_PrevSibling, XFA_OBJECTTYPE_ContainerNode);
550 if (pPreviewRow && 551 if (pPreviewRow &&
551 pPreviewRow->GetEnum(XFA_ATTRIBUTE_Layout) == 552 pPreviewRow->GetEnum(XFA_ATTRIBUTE_Layout) ==
552 XFA_ATTRIBUTEENUM_Row) { 553 XFA_ATTRIBUTEENUM_Row) {
553 XFA_ATTRIBUTEENUM eValue; 554 XFA_ATTRIBUTEENUM eValue;
554 if (pKeep->TryEnum(XFA_ATTRIBUTE_Previous, eValue, FALSE)) { 555 if (pKeep->TryEnum(XFA_ATTRIBUTE_Previous, eValue, FALSE) &&
555 if (eValue == XFA_ATTRIBUTEENUM_ContentArea || 556 (eValue == XFA_ATTRIBUTEENUM_ContentArea ||
556 eValue == XFA_ATTRIBUTEENUM_PageArea) { 557 eValue == XFA_ATTRIBUTEENUM_PageArea)) {
557 return XFA_ATTRIBUTEENUM_ContentArea; 558 return XFA_ATTRIBUTEENUM_ContentArea;
558 }
559 } 559 }
560 CXFA_Node* pKeep = 560 CXFA_Node* pNode =
561 pPreviewRow->GetFirstChildByClass(XFA_ELEMENT_Keep); 561 pPreviewRow->GetFirstChildByClass(XFA_ELEMENT_Keep);
562 if (pKeep) { 562 if (pNode && pNode->TryEnum(XFA_ATTRIBUTE_Next, eValue, FALSE) &&
563 if (pKeep->TryEnum(XFA_ATTRIBUTE_Next, eValue, FALSE)) { 563 (eValue == XFA_ATTRIBUTEENUM_ContentArea ||
564 if (eValue == XFA_ATTRIBUTEENUM_ContentArea || 564 eValue == XFA_ATTRIBUTEENUM_PageArea)) {
565 eValue == XFA_ATTRIBUTEENUM_PageArea) { 565 return XFA_ATTRIBUTEENUM_ContentArea;
566 return XFA_ATTRIBUTEENUM_ContentArea;
567 }
568 }
569 } 566 }
570 } 567 }
571 } 568 }
572 return eIntact; 569 return eIntact;
573 } 570 }
574 } 571 }
575 switch (eElement) { 572 switch (eElement) {
576 case XFA_ELEMENT_Subform: 573 case XFA_ELEMENT_Subform:
577 switch (eLayoutType) { 574 switch (eLayoutType) {
578 case XFA_ATTRIBUTEENUM_Position: 575 case XFA_ATTRIBUTEENUM_Position:
579 case XFA_ATTRIBUTEENUM_Row: 576 case XFA_ATTRIBUTEENUM_Row:
580 return XFA_ATTRIBUTEENUM_ContentArea; 577 return XFA_ATTRIBUTEENUM_ContentArea;
581 case XFA_ATTRIBUTEENUM_Tb: 578 case XFA_ATTRIBUTEENUM_Tb:
582 case XFA_ATTRIBUTEENUM_Table: 579 case XFA_ATTRIBUTEENUM_Table:
583 case XFA_ATTRIBUTEENUM_Lr_tb: 580 case XFA_ATTRIBUTEENUM_Lr_tb:
584 case XFA_ATTRIBUTEENUM_Rl_tb: 581 case XFA_ATTRIBUTEENUM_Rl_tb:
585 return XFA_ATTRIBUTEENUM_None; 582 return XFA_ATTRIBUTEENUM_None;
586 default: 583 default:
587 break; 584 break;
588 } 585 }
589 break; 586 break;
590 case XFA_ELEMENT_Field: { 587 case XFA_ELEMENT_Field: {
591 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); 588 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
592 if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_PageArea) { 589 if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_PageArea)
593 return XFA_ATTRIBUTEENUM_ContentArea; 590 return XFA_ATTRIBUTEENUM_ContentArea;
594 }
595 if (pParentNode->GetIntact() == XFA_ATTRIBUTEENUM_None) { 591 if (pParentNode->GetIntact() == XFA_ATTRIBUTEENUM_None) {
596 XFA_ATTRIBUTEENUM eParLayout = 592 XFA_ATTRIBUTEENUM eParLayout =
597 pParentNode->GetEnum(XFA_ATTRIBUTE_Layout); 593 pParentNode->GetEnum(XFA_ATTRIBUTE_Layout);
598 if (eParLayout == XFA_ATTRIBUTEENUM_Position || 594 if (eParLayout == XFA_ATTRIBUTEENUM_Position ||
599 eParLayout == XFA_ATTRIBUTEENUM_Row || 595 eParLayout == XFA_ATTRIBUTEENUM_Row ||
600 eParLayout == XFA_ATTRIBUTEENUM_Table) { 596 eParLayout == XFA_ATTRIBUTEENUM_Table) {
601 return XFA_ATTRIBUTEENUM_None; 597 return XFA_ATTRIBUTEENUM_None;
602 } 598 }
603 XFA_VERSION version = m_pDocument->GetCurVersionMode(); 599 XFA_VERSION version = m_pDocument->GetCurVersionMode();
604 if (eParLayout == XFA_ATTRIBUTEENUM_Tb && version < XFA_VERSION_208) { 600 if (eParLayout == XFA_ATTRIBUTEENUM_Tb && version < XFA_VERSION_208) {
605 CXFA_Measurement measureH; 601 CXFA_Measurement measureH;
606 if (TryMeasure(XFA_ATTRIBUTE_H, measureH, FALSE)) { 602 if (TryMeasure(XFA_ATTRIBUTE_H, measureH, FALSE))
607 return XFA_ATTRIBUTEENUM_ContentArea; 603 return XFA_ATTRIBUTEENUM_ContentArea;
608 }
609 } 604 }
610 return XFA_ATTRIBUTEENUM_None; 605 return XFA_ATTRIBUTEENUM_None;
611 } 606 }
612 return XFA_ATTRIBUTEENUM_ContentArea; 607 return XFA_ATTRIBUTEENUM_ContentArea;
613 } 608 }
614 case XFA_ELEMENT_Draw: 609 case XFA_ELEMENT_Draw:
615 return XFA_ATTRIBUTEENUM_ContentArea; 610 return XFA_ATTRIBUTEENUM_ContentArea;
616 default: 611 default:
617 break; 612 break;
618 } 613 }
619 return XFA_ATTRIBUTEENUM_None; 614 return XFA_ATTRIBUTEENUM_None;
620 } 615 }
616
621 CXFA_Node* CXFA_Node::GetDataDescriptionNode() { 617 CXFA_Node* CXFA_Node::GetDataDescriptionNode() {
622 if (m_ePacket == XFA_XDPPACKET_Datasets) { 618 if (m_ePacket == XFA_XDPPACKET_Datasets)
623 return m_pAuxNode; 619 return m_pAuxNode;
624 } 620 return nullptr;
625 return NULL;
626 } 621 }
622
627 void CXFA_Node::SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode) { 623 void CXFA_Node::SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode) {
628 ASSERT(m_ePacket == XFA_XDPPACKET_Datasets); 624 ASSERT(m_ePacket == XFA_XDPPACKET_Datasets);
629 m_pAuxNode = pDataDescriptionNode; 625 m_pAuxNode = pDataDescriptionNode;
630 } 626 }
627
631 void CXFA_Node::Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments) { 628 void CXFA_Node::Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments) {
632 int32_t iLength = pArguments->GetLength(); 629 int32_t iLength = pArguments->GetLength();
633 if (iLength != 1) { 630 if (iLength != 1) {
634 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resolveNode"); 631 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resolveNode");
635 return; 632 return;
636 } 633 }
637 CFX_WideString wsExpression = 634 CFX_WideString wsExpression =
638 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC()); 635 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
639 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 636 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
640 if (!pScriptContext) { 637 if (!pScriptContext)
641 return; 638 return;
642 }
643 CXFA_Node* refNode = this; 639 CXFA_Node* refNode = this;
644 if (refNode->GetClassID() == XFA_ELEMENT_Xfa) { 640 if (refNode->GetClassID() == XFA_ELEMENT_Xfa)
645 refNode = ToNode(pScriptContext->GetThisObject()); 641 refNode = ToNode(pScriptContext->GetThisObject());
646 }
647 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | 642 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
648 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | 643 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
649 XFA_RESOLVENODE_Siblings; 644 XFA_RESOLVENODE_Siblings;
650 XFA_RESOLVENODE_RS resoveNodeRS; 645 XFA_RESOLVENODE_RS resoveNodeRS;
651 int32_t iRet = pScriptContext->ResolveObjects( 646 int32_t iRet = pScriptContext->ResolveObjects(
652 refNode, wsExpression.AsStringC(), resoveNodeRS, dwFlag); 647 refNode, wsExpression.AsStringC(), resoveNodeRS, dwFlag);
653 if (iRet < 1) { 648 if (iRet < 1)
654 return FXJSE_Value_SetNull(pArguments->GetReturnValue()); 649 return FXJSE_Value_SetNull(pArguments->GetReturnValue());
655 }
656 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { 650 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
657 CXFA_Object* pNode = resoveNodeRS.nodes[0]; 651 CXFA_Object* pNode = resoveNodeRS.nodes[0];
658 FXJSE_Value_Set(pArguments->GetReturnValue(), 652 FXJSE_Value_Set(pArguments->GetReturnValue(),
659 pScriptContext->GetJSValueFromMap(pNode)); 653 pScriptContext->GetJSValueFromMap(pNode));
660 } else { 654 } else {
661 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = 655 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo =
662 resoveNodeRS.pScriptAttribute; 656 resoveNodeRS.pScriptAttribute;
663 if (lpAttributeInfo && lpAttributeInfo->eValueType == XFA_SCRIPT_Object) { 657 if (lpAttributeInfo && lpAttributeInfo->eValueType == XFA_SCRIPT_Object) {
664 std::unique_ptr<CFXJSE_Value> pValue( 658 std::unique_ptr<CFXJSE_Value> pValue(
665 new CFXJSE_Value(pScriptContext->GetRuntime())); 659 new CFXJSE_Value(pScriptContext->GetRuntime()));
666 (resoveNodeRS.nodes[0]->*(lpAttributeInfo->lpfnCallback))( 660 (resoveNodeRS.nodes[0]->*(lpAttributeInfo->lpfnCallback))(
667 pValue.get(), FALSE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); 661 pValue.get(), FALSE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute);
668 FXJSE_Value_Set(pArguments->GetReturnValue(), pValue.get()); 662 FXJSE_Value_Set(pArguments->GetReturnValue(), pValue.get());
669 } else { 663 } else {
670 FXJSE_Value_SetNull(pArguments->GetReturnValue()); 664 FXJSE_Value_SetNull(pArguments->GetReturnValue());
671 } 665 }
672 } 666 }
673 } 667 }
668
674 void CXFA_Node::Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments) { 669 void CXFA_Node::Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments) {
675 int32_t iLength = pArguments->GetLength(); 670 int32_t iLength = pArguments->GetLength();
676 if (iLength != 1) { 671 if (iLength != 1) {
677 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 672 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
678 L"resolveNodes"); 673 L"resolveNodes");
679 return; 674 return;
680 } 675 }
681 CFX_WideString wsExpression = 676 CFX_WideString wsExpression =
682 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC()); 677 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
683 CFXJSE_Value* pValue = pArguments->GetReturnValue(); 678 CFXJSE_Value* pValue = pArguments->GetReturnValue();
684 if (!pValue) { 679 if (!pValue)
685 return; 680 return;
686 }
687 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | 681 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
688 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | 682 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
689 XFA_RESOLVENODE_Siblings; 683 XFA_RESOLVENODE_Siblings;
690 CXFA_Node* refNode = this; 684 CXFA_Node* refNode = this;
691 if (refNode->GetClassID() == XFA_ELEMENT_Xfa) { 685 if (refNode->GetClassID() == XFA_ELEMENT_Xfa)
692 refNode = ToNode(m_pDocument->GetScriptContext()->GetThisObject()); 686 refNode = ToNode(m_pDocument->GetScriptContext()->GetThisObject());
693 }
694 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag, refNode); 687 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag, refNode);
695 } 688 }
689
696 void CXFA_Node::Script_Som_ResolveNodeList(CFXJSE_Value* pValue, 690 void CXFA_Node::Script_Som_ResolveNodeList(CFXJSE_Value* pValue,
697 CFX_WideString wsExpression, 691 CFX_WideString wsExpression,
698 uint32_t dwFlag, 692 uint32_t dwFlag,
699 CXFA_Node* refNode) { 693 CXFA_Node* refNode) {
700 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 694 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
701 if (!pScriptContext) { 695 if (!pScriptContext)
702 return; 696 return;
703 }
704 XFA_RESOLVENODE_RS resoveNodeRS; 697 XFA_RESOLVENODE_RS resoveNodeRS;
705 if (refNode == NULL) { 698 if (!refNode)
706 refNode = this; 699 refNode = this;
707 }
708 pScriptContext->ResolveObjects(refNode, wsExpression.AsStringC(), 700 pScriptContext->ResolveObjects(refNode, wsExpression.AsStringC(),
709 resoveNodeRS, dwFlag); 701 resoveNodeRS, dwFlag);
710 CXFA_ArrayNodeList* pNodeList = new CXFA_ArrayNodeList(m_pDocument); 702 CXFA_ArrayNodeList* pNodeList = new CXFA_ArrayNodeList(m_pDocument);
711 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { 703 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
712 for (int32_t i = 0; i < resoveNodeRS.nodes.GetSize(); i++) { 704 for (int32_t i = 0; i < resoveNodeRS.nodes.GetSize(); i++) {
713 if (resoveNodeRS.nodes[i]->IsNode()) 705 if (resoveNodeRS.nodes[i]->IsNode())
714 pNodeList->Append(resoveNodeRS.nodes[i]->AsNode()); 706 pNodeList->Append(resoveNodeRS.nodes[i]->AsNode());
715 } 707 }
716 } else { 708 } else {
717 CXFA_ValueArray valueArray(pScriptContext->GetRuntime()); 709 CXFA_ValueArray valueArray(pScriptContext->GetRuntime());
718 if (resoveNodeRS.GetAttributeResult(valueArray) > 0) { 710 if (resoveNodeRS.GetAttributeResult(valueArray) > 0) {
719 CXFA_ObjArray objectArray; 711 CXFA_ObjArray objectArray;
720 valueArray.GetAttributeObject(objectArray); 712 valueArray.GetAttributeObject(objectArray);
721 for (int32_t i = 0; i < objectArray.GetSize(); i++) { 713 for (int32_t i = 0; i < objectArray.GetSize(); i++) {
722 if (objectArray[i]->IsNode()) 714 if (objectArray[i]->IsNode())
723 pNodeList->Append(objectArray[i]->AsNode()); 715 pNodeList->Append(objectArray[i]->AsNode());
724 } 716 }
725 } 717 }
726 } 718 }
727 FXJSE_Value_SetObject(pValue, (CXFA_Object*)pNodeList, 719 FXJSE_Value_SetObject(pValue, (CXFA_Object*)pNodeList,
728 pScriptContext->GetJseNormalClass()); 720 pScriptContext->GetJseNormalClass());
729 } 721 }
722
730 void CXFA_Node::Script_TreeClass_All(CFXJSE_Value* pValue, 723 void CXFA_Node::Script_TreeClass_All(CFXJSE_Value* pValue,
731 FX_BOOL bSetting, 724 FX_BOOL bSetting,
732 XFA_ATTRIBUTE eAttribute) { 725 XFA_ATTRIBUTE eAttribute) {
733 if (bSetting) { 726 if (bSetting) {
734 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 727 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
735 } else { 728 } else {
736 uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL; 729 uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
737 CFX_WideString wsName; 730 CFX_WideString wsName;
738 GetAttribute(XFA_ATTRIBUTE_Name, wsName); 731 GetAttribute(XFA_ATTRIBUTE_Name, wsName);
739 CFX_WideString wsExpression = wsName + FX_WSTRC(L"[*]"); 732 CFX_WideString wsExpression = wsName + FX_WSTRC(L"[*]");
740 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag); 733 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
741 } 734 }
742 } 735 }
736
743 void CXFA_Node::Script_TreeClass_Nodes(CFXJSE_Value* pValue, 737 void CXFA_Node::Script_TreeClass_Nodes(CFXJSE_Value* pValue,
744 FX_BOOL bSetting, 738 FX_BOOL bSetting,
745 XFA_ATTRIBUTE eAttribute) { 739 XFA_ATTRIBUTE eAttribute) {
746 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 740 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
747 if (!pScriptContext) { 741 if (!pScriptContext)
748 return; 742 return;
749 }
750 if (bSetting) { 743 if (bSetting) {
751 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); 744 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider();
752 ASSERT(pAppProvider); 745 ASSERT(pAppProvider);
753 CFX_WideString wsMessage; 746 CFX_WideString wsMessage;
754 pAppProvider->LoadString(XFA_IDS_Unable_TO_SET, wsMessage); 747 pAppProvider->LoadString(XFA_IDS_Unable_TO_SET, wsMessage);
755 FXJSE_ThrowMessage( 748 FXJSE_ThrowMessage(
756 "", 749 "",
757 FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); 750 FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC());
758 } else { 751 } else {
759 CXFA_AttachNodeList* pNodeList = new CXFA_AttachNodeList(m_pDocument, this); 752 CXFA_AttachNodeList* pNodeList = new CXFA_AttachNodeList(m_pDocument, this);
760 FXJSE_Value_SetObject(pValue, (CXFA_Object*)pNodeList, 753 FXJSE_Value_SetObject(pValue, (CXFA_Object*)pNodeList,
761 pScriptContext->GetJseNormalClass()); 754 pScriptContext->GetJseNormalClass());
762 } 755 }
763 } 756 }
757
764 void CXFA_Node::Script_TreeClass_ClassAll(CFXJSE_Value* pValue, 758 void CXFA_Node::Script_TreeClass_ClassAll(CFXJSE_Value* pValue,
765 FX_BOOL bSetting, 759 FX_BOOL bSetting,
766 XFA_ATTRIBUTE eAttribute) { 760 XFA_ATTRIBUTE eAttribute) {
767 if (bSetting) { 761 if (bSetting) {
768 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 762 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
769 } else { 763 } else {
770 uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL; 764 uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
771 CFX_WideStringC wsName; 765 CFX_WideStringC wsName;
772 GetClassName(wsName); 766 GetClassName(wsName);
773 CFX_WideString wsExpression = FX_WSTRC(L"#") + wsName + FX_WSTRC(L"[*]"); 767 CFX_WideString wsExpression = FX_WSTRC(L"#") + wsName + FX_WSTRC(L"[*]");
774 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag); 768 Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
775 } 769 }
776 } 770 }
771
777 void CXFA_Node::Script_TreeClass_Parent(CFXJSE_Value* pValue, 772 void CXFA_Node::Script_TreeClass_Parent(CFXJSE_Value* pValue,
778 FX_BOOL bSetting, 773 FX_BOOL bSetting,
779 XFA_ATTRIBUTE eAttribute) { 774 XFA_ATTRIBUTE eAttribute) {
780 if (bSetting) { 775 if (bSetting) {
781 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 776 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
782 } else { 777 } else {
783 CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent); 778 CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent);
784 if (pParent) { 779 if (pParent) {
785 FXJSE_Value_Set( 780 FXJSE_Value_Set(
786 pValue, m_pDocument->GetScriptContext()->GetJSValueFromMap(pParent)); 781 pValue, m_pDocument->GetScriptContext()->GetJSValueFromMap(pParent));
787 } else { 782 } else {
788 FXJSE_Value_SetNull(pValue); 783 FXJSE_Value_SetNull(pValue);
789 } 784 }
790 } 785 }
791 } 786 }
787
792 void CXFA_Node::Script_TreeClass_Index(CFXJSE_Value* pValue, 788 void CXFA_Node::Script_TreeClass_Index(CFXJSE_Value* pValue,
793 FX_BOOL bSetting, 789 FX_BOOL bSetting,
794 XFA_ATTRIBUTE eAttribute) { 790 XFA_ATTRIBUTE eAttribute) {
795 if (bSetting) { 791 if (bSetting)
796 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 792 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
797 } else { 793 else
798 FXJSE_Value_SetInteger(pValue, GetNodeSameNameIndex()); 794 FXJSE_Value_SetInteger(pValue, GetNodeSameNameIndex());
799 }
800 } 795 }
796
801 void CXFA_Node::Script_TreeClass_ClassIndex(CFXJSE_Value* pValue, 797 void CXFA_Node::Script_TreeClass_ClassIndex(CFXJSE_Value* pValue,
802 FX_BOOL bSetting, 798 FX_BOOL bSetting,
803 XFA_ATTRIBUTE eAttribute) { 799 XFA_ATTRIBUTE eAttribute) {
804 if (bSetting) { 800 if (bSetting)
805 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 801 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
806 } else { 802 else
807 FXJSE_Value_SetInteger(pValue, GetNodeSameClassIndex()); 803 FXJSE_Value_SetInteger(pValue, GetNodeSameClassIndex());
808 }
809 } 804 }
805
810 void CXFA_Node::Script_TreeClass_SomExpression(CFXJSE_Value* pValue, 806 void CXFA_Node::Script_TreeClass_SomExpression(CFXJSE_Value* pValue,
811 FX_BOOL bSetting, 807 FX_BOOL bSetting,
812 XFA_ATTRIBUTE eAttribute) { 808 XFA_ATTRIBUTE eAttribute) {
813 if (bSetting) { 809 if (bSetting) {
814 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 810 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
815 } else { 811 } else {
816 CFX_WideString wsSOMExpression; 812 CFX_WideString wsSOMExpression;
817 GetSOMExpression(wsSOMExpression); 813 GetSOMExpression(wsSOMExpression);
818 FXJSE_Value_SetUTF8String(pValue, 814 FXJSE_Value_SetUTF8String(pValue,
819 FX_UTF8Encode(wsSOMExpression).AsStringC()); 815 FX_UTF8Encode(wsSOMExpression).AsStringC());
820 } 816 }
821 } 817 }
818
822 void CXFA_Node::Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments) { 819 void CXFA_Node::Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments) {
823 int32_t iLength = pArguments->GetLength(); 820 int32_t iLength = pArguments->GetLength();
824 if (iLength != 1) { 821 if (iLength != 1) {
825 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"applyXSL"); 822 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"applyXSL");
826 return; 823 return;
827 } 824 }
828 CFX_WideString wsExpression = 825 CFX_WideString wsExpression =
829 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC()); 826 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
830 // TODO(weili): check whether we need to implement this, pdfium:501. 827 // TODO(weili): check whether we need to implement this, pdfium:501.
831 // For now, just put the variables here to avoid unused variable warning. 828 // For now, just put the variables here to avoid unused variable warning.
832 (void)wsExpression; 829 (void)wsExpression;
833 } 830 }
834 831
835 void CXFA_Node::Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments) { 832 void CXFA_Node::Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments) {
836 int32_t iLength = pArguments->GetLength(); 833 int32_t iLength = pArguments->GetLength();
837 if (iLength < 1 || iLength > 3) { 834 if (iLength < 1 || iLength > 3) {
838 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"assignNode"); 835 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"assignNode");
839 return; 836 return;
840 } 837 }
841 CFX_WideString wsExpression; 838 CFX_WideString wsExpression;
842 CFX_WideString wsValue; 839 CFX_WideString wsValue;
843 int32_t iAction = 0; 840 int32_t iAction = 0;
844 if (iLength >= 1) { 841 wsExpression =
845 wsExpression = 842 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
846 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
847 }
848 if (iLength >= 2) { 843 if (iLength >= 2) {
849 wsValue = 844 wsValue =
850 CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC()); 845 CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
851 } 846 }
852 if (iLength >= 3) 847 if (iLength >= 3)
853 iAction = pArguments->GetInt32(2); 848 iAction = pArguments->GetInt32(2);
854 // TODO(weili): check whether we need to implement this, pdfium:501. 849 // TODO(weili): check whether we need to implement this, pdfium:501.
855 // For now, just put the variables here to avoid unused variable warning. 850 // For now, just put the variables here to avoid unused variable warning.
856 (void)wsExpression; 851 (void)wsExpression;
857 (void)wsValue; 852 (void)wsValue;
858 (void)iAction; 853 (void)iAction;
859 } 854 }
860 855
861 void CXFA_Node::Script_NodeClass_Clone(CFXJSE_Arguments* pArguments) { 856 void CXFA_Node::Script_NodeClass_Clone(CFXJSE_Arguments* pArguments) {
862 int32_t iLength = pArguments->GetLength(); 857 int32_t iLength = pArguments->GetLength();
863 if (iLength != 1) { 858 if (iLength != 1) {
864 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"clone"); 859 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"clone");
865 return; 860 return;
866 } 861 }
867 FX_BOOL bClone = TRUE; 862 bool bClone = !!pArguments->GetInt32(0);
868 bClone = pArguments->GetInt32(0) == 0 ? FALSE : TRUE;
869 CXFA_Node* pCloneNode = Clone(bClone); 863 CXFA_Node* pCloneNode = Clone(bClone);
870 FXJSE_Value_Set( 864 FXJSE_Value_Set(
871 pArguments->GetReturnValue(), 865 pArguments->GetReturnValue(),
872 m_pDocument->GetScriptContext()->GetJSValueFromMap(pCloneNode)); 866 m_pDocument->GetScriptContext()->GetJSValueFromMap(pCloneNode));
873 } 867 }
868
874 void CXFA_Node::Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments) { 869 void CXFA_Node::Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments) {
875 int32_t iLength = pArguments->GetLength(); 870 int32_t iLength = pArguments->GetLength();
876 if (iLength != 1) { 871 if (iLength != 1) {
877 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 872 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
878 L"getAttribute"); 873 L"getAttribute");
879 return; 874 return;
880 } 875 }
881 CFX_WideString wsExpression = 876 CFX_WideString wsExpression =
882 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC()); 877 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
883 CFX_WideString wsValue; 878 CFX_WideString wsValue;
884 GetAttribute(wsExpression.AsStringC(), wsValue); 879 GetAttribute(wsExpression.AsStringC(), wsValue);
885 CFXJSE_Value* pValue = pArguments->GetReturnValue(); 880 CFXJSE_Value* pValue = pArguments->GetReturnValue();
886 if (pValue) { 881 if (pValue)
887 FXJSE_Value_SetUTF8String(pValue, FX_UTF8Encode(wsValue).AsStringC()); 882 FXJSE_Value_SetUTF8String(pValue, FX_UTF8Encode(wsValue).AsStringC());
888 }
889 } 883 }
884
890 void CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) { 885 void CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) {
891 int32_t iLength = pArguments->GetLength(); 886 int32_t iLength = pArguments->GetLength();
892 if (iLength < 1 || iLength > 2) { 887 if (iLength < 1 || iLength > 2) {
893 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"getElement"); 888 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"getElement");
894 return; 889 return;
895 } 890 }
896 CFX_WideString wsExpression; 891 CFX_WideString wsExpression;
897 int32_t iValue = 0; 892 int32_t iValue = 0;
898 if (iLength >= 1) { 893 wsExpression =
899 CFX_ByteString bsExpression = pArguments->GetUTF8String(0); 894 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
900 wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC()); 895 if (iLength >= 2)
901 }
902 if (iLength >= 2) {
903 iValue = pArguments->GetInt32(1); 896 iValue = pArguments->GetInt32(1);
904 }
905 const XFA_ELEMENTINFO* pElementInfo = 897 const XFA_ELEMENTINFO* pElementInfo =
906 XFA_GetElementByName(wsExpression.AsStringC()); 898 XFA_GetElementByName(wsExpression.AsStringC());
907 CXFA_Node* pNode = GetProperty(iValue, pElementInfo->eName); 899 CXFA_Node* pNode = GetProperty(iValue, pElementInfo->eName);
908 FXJSE_Value_Set(pArguments->GetReturnValue(), 900 FXJSE_Value_Set(pArguments->GetReturnValue(),
909 m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); 901 m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
910 } 902 }
911 903
912 void CXFA_Node::Script_NodeClass_IsPropertySpecified( 904 void CXFA_Node::Script_NodeClass_IsPropertySpecified(
913 CFXJSE_Arguments* pArguments) { 905 CFXJSE_Arguments* pArguments) {
914 int32_t iLength = pArguments->GetLength(); 906 int32_t iLength = pArguments->GetLength();
915 if (iLength < 1 || iLength > 3) { 907 if (iLength < 1 || iLength > 3) {
916 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 908 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
917 L"isPropertySpecified"); 909 L"isPropertySpecified");
918 return; 910 return;
919 } 911 }
920 CFX_WideString wsExpression; 912 CFX_WideString wsExpression;
921 FX_BOOL bParent = TRUE; 913 bool bParent = true;
922 int32_t iIndex = 0; 914 int32_t iIndex = 0;
923 if (iLength >= 1) { 915 wsExpression =
924 wsExpression = 916 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
925 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
926 }
927 if (iLength >= 2) 917 if (iLength >= 2)
928 bParent = !!pArguments->GetInt32(1) ? TRUE : FALSE; 918 bParent = !!pArguments->GetInt32(1);
929 if (iLength >= 3) 919 if (iLength >= 3)
930 iIndex = pArguments->GetInt32(2); 920 iIndex = pArguments->GetInt32(2);
931 FX_BOOL bHas = FALSE; 921 FX_BOOL bHas = FALSE;
932 const XFA_ATTRIBUTEINFO* pAttributeInfo = 922 const XFA_ATTRIBUTEINFO* pAttributeInfo =
933 XFA_GetAttributeByName(wsExpression.AsStringC()); 923 XFA_GetAttributeByName(wsExpression.AsStringC());
934 CFX_WideString wsValue; 924 CFX_WideString wsValue;
935 if (pAttributeInfo) 925 if (pAttributeInfo)
936 bHas = HasAttribute(pAttributeInfo->eName); 926 bHas = HasAttribute(pAttributeInfo->eName);
937 if (!bHas) { 927 if (!bHas) {
938 const XFA_ELEMENTINFO* pElementInfo = 928 const XFA_ELEMENTINFO* pElementInfo =
(...skipping 11 matching lines...) Expand all
950 FXJSE_Value_SetBoolean(pValue, bHas); 940 FXJSE_Value_SetBoolean(pValue, bHas);
951 } 941 }
952 942
953 void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) { 943 void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) {
954 int32_t iLength = pArguments->GetLength(); 944 int32_t iLength = pArguments->GetLength();
955 if (iLength < 1 || iLength > 3) { 945 if (iLength < 1 || iLength > 3) {
956 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"loadXML"); 946 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"loadXML");
957 return; 947 return;
958 } 948 }
959 CFX_WideString wsExpression; 949 CFX_WideString wsExpression;
960 FX_BOOL bIgnoreRoot = TRUE; 950 bool bIgnoreRoot = true;
961 FX_BOOL bOverwrite = 0; 951 bool bOverwrite = 0;
962 if (iLength >= 1) { 952 wsExpression =
963 CFX_ByteString bsExpression = pArguments->GetUTF8String(0); 953 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
964 wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC()); 954 if (wsExpression.IsEmpty())
965 if (wsExpression.IsEmpty()) {
966 return;
967 }
968 }
969 if (iLength >= 2) {
970 bIgnoreRoot = pArguments->GetInt32(1) == 0 ? FALSE : TRUE;
971 }
972 if (iLength >= 3) {
973 bOverwrite = pArguments->GetInt32(2) == 0 ? FALSE : TRUE;
974 }
975 IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument);
976 if (!pParser) {
977 return; 955 return;
978 } 956 if (iLength >= 2)
979 CFDE_XMLNode* pXMLNode = NULL; 957 bIgnoreRoot = !!pArguments->GetInt32(1);
980 int32_t iParserStatus = pParser->ParseXMLData(wsExpression, pXMLNode, NULL); 958 if (iLength >= 3)
981 if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) { 959 bOverwrite = !!pArguments->GetInt32(2);
982 pParser->Release(); 960 std::unique_ptr<IXFA_Parser, ReleaseDeleter<IXFA_Parser>> pParser(
983 pParser = NULL; 961 IXFA_Parser::Create(m_pDocument));
962 if (!pParser)
984 return; 963 return;
985 } 964 CFDE_XMLNode* pXMLNode = nullptr;
965 int32_t iParserStatus =
966 pParser->ParseXMLData(wsExpression, pXMLNode, nullptr);
967 if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode)
968 return;
986 if (bIgnoreRoot && 969 if (bIgnoreRoot &&
987 (pXMLNode->GetType() != FDE_XMLNODE_Element || 970 (pXMLNode->GetType() != FDE_XMLNODE_Element ||
988 XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) { 971 XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) {
989 bIgnoreRoot = FALSE; 972 bIgnoreRoot = false;
990 } 973 }
991 CXFA_Node* pFakeRoot = Clone(FALSE); 974 CXFA_Node* pFakeRoot = Clone(FALSE);
992 CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType); 975 CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType);
993 if (!wsContentType.IsEmpty()) { 976 if (!wsContentType.IsEmpty()) {
994 pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType, 977 pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType,
995 CFX_WideString(wsContentType)); 978 CFX_WideString(wsContentType));
996 } 979 }
997 CFDE_XMLNode* pFakeXMLRoot = pFakeRoot->GetXMLMappingNode(); 980 CFDE_XMLNode* pFakeXMLRoot = pFakeRoot->GetXMLMappingNode();
998 if (!pFakeXMLRoot) { 981 if (!pFakeXMLRoot) {
999 CFDE_XMLNode* pThisXMLRoot = GetXMLMappingNode(); 982 CFDE_XMLNode* pThisXMLRoot = GetXMLMappingNode();
1000 pFakeXMLRoot = pThisXMLRoot ? pThisXMLRoot->Clone(FALSE) : NULL; 983 pFakeXMLRoot = pThisXMLRoot ? pThisXMLRoot->Clone(FALSE) : nullptr;
1001 } 984 }
1002 if (!pFakeXMLRoot) { 985 if (!pFakeXMLRoot) {
1003 CFX_WideStringC wsClassName; 986 CFX_WideStringC wsClassName;
1004 GetClassName(wsClassName); 987 GetClassName(wsClassName);
1005 pFakeXMLRoot = new CFDE_XMLElement(CFX_WideString(wsClassName)); 988 pFakeXMLRoot = new CFDE_XMLElement(CFX_WideString(wsClassName));
1006 } 989 }
1007 if (bIgnoreRoot) { 990 if (bIgnoreRoot) {
1008 CFDE_XMLNode* pXMLChild = pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild); 991 CFDE_XMLNode* pXMLChild = pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
1009 while (pXMLChild) { 992 while (pXMLChild) {
1010 CFDE_XMLNode* pXMLSibling = 993 CFDE_XMLNode* pXMLSibling =
(...skipping 27 matching lines...) Expand all
1038 CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); 1021 CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
1039 RemoveChild(pChild); 1022 RemoveChild(pChild);
1040 pFakeRoot->InsertChild(pChild); 1023 pFakeRoot->InsertChild(pChild);
1041 pChild = pItem; 1024 pChild = pItem;
1042 } 1025 }
1043 if (GetPacketID() == XFA_XDPPACKET_Form && 1026 if (GetPacketID() == XFA_XDPPACKET_Form &&
1044 GetClassID() == XFA_ELEMENT_ExData) { 1027 GetClassID() == XFA_ELEMENT_ExData) {
1045 CFDE_XMLNode* pTempXMLNode = GetXMLMappingNode(); 1028 CFDE_XMLNode* pTempXMLNode = GetXMLMappingNode();
1046 SetXMLMappingNode(pFakeXMLRoot); 1029 SetXMLMappingNode(pFakeXMLRoot);
1047 SetFlag(XFA_NODEFLAG_OwnXMLNode, false); 1030 SetFlag(XFA_NODEFLAG_OwnXMLNode, false);
1048 if (pTempXMLNode && 1031 if (pTempXMLNode && !pTempXMLNode->GetNodeItem(CFDE_XMLNode::Parent)) {
1049 pTempXMLNode->GetNodeItem(CFDE_XMLNode::Parent) == NULL) {
1050 pFakeXMLRoot = pTempXMLNode; 1032 pFakeXMLRoot = pTempXMLNode;
1051 } else { 1033 } else {
1052 pFakeXMLRoot = NULL; 1034 pFakeXMLRoot = nullptr;
1053 } 1035 }
1054 } 1036 }
1055 MoveBufferMapData(pFakeRoot, this, XFA_CalcData, TRUE); 1037 MoveBufferMapData(pFakeRoot, this, XFA_CalcData, TRUE);
1056 } else { 1038 } else {
1057 CXFA_Node* pChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild); 1039 CXFA_Node* pChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
1058 while (pChild) { 1040 while (pChild) {
1059 CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); 1041 CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
1060 pFakeRoot->RemoveChild(pChild); 1042 pFakeRoot->RemoveChild(pChild);
1061 InsertChild(pChild); 1043 InsertChild(pChild);
1062 pChild->SetFlag(XFA_NODEFLAG_Initialized, true); 1044 pChild->SetFlag(XFA_NODEFLAG_Initialized, true);
1063 pChild = pItem; 1045 pChild = pItem;
1064 } 1046 }
1065 } 1047 }
1066 if (pFakeXMLRoot) { 1048 if (pFakeXMLRoot) {
1067 pFakeRoot->SetXMLMappingNode(pFakeXMLRoot); 1049 pFakeRoot->SetXMLMappingNode(pFakeXMLRoot);
1068 pFakeRoot->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); 1050 pFakeRoot->SetFlag(XFA_NODEFLAG_OwnXMLNode, false);
1069 } 1051 }
1070 pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, false); 1052 pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, false);
1071 } else { 1053 } else {
1072 if (pFakeXMLRoot) { 1054 if (pFakeXMLRoot) {
1073 pFakeXMLRoot->Release(); 1055 pFakeXMLRoot->Release();
1074 pFakeXMLRoot = NULL; 1056 pFakeXMLRoot = nullptr;
1075 } 1057 }
1076 } 1058 }
1077 pParser->Release();
1078 pParser = NULL;
1079 } 1059 }
1060
1080 void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) { 1061 void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) {
1062 // TODO(weili): Check whether we need to implement this, pdfium:501.
1081 } 1063 }
1082 1064
1083 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) { 1065 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) {
1084 int32_t iLength = pArguments->GetLength(); 1066 int32_t iLength = pArguments->GetLength();
1085 if (iLength < 0 || iLength > 1) { 1067 if (iLength < 0 || iLength > 1) {
1086 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML"); 1068 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML");
1087 return; 1069 return;
1088 } 1070 }
1089 FX_BOOL bPrettyMode = FALSE; 1071 bool bPrettyMode = false;
1090 if (iLength == 1) { 1072 if (iLength == 1) {
1091 if (pArguments->GetUTF8String(0) != "pretty") { 1073 if (pArguments->GetUTF8String(0) != "pretty") {
1092 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); 1074 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
1093 return; 1075 return;
1094 } 1076 }
1095 bPrettyMode = TRUE; 1077 bPrettyMode = true;
1096 } 1078 }
1097 CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 1079 CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
1098 if (GetPacketID() == XFA_XDPPACKET_Form || 1080 if (GetPacketID() == XFA_XDPPACKET_Form ||
1099 GetPacketID() == XFA_XDPPACKET_Datasets) { 1081 GetPacketID() == XFA_XDPPACKET_Datasets) {
1100 CFDE_XMLNode* pElement = nullptr; 1082 CFDE_XMLNode* pElement = nullptr;
1101 if (GetPacketID() == XFA_XDPPACKET_Datasets) { 1083 if (GetPacketID() == XFA_XDPPACKET_Datasets) {
1102 pElement = GetXMLMappingNode(); 1084 pElement = GetXMLMappingNode();
1103 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { 1085 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
1104 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader); 1086 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
1105 return; 1087 return;
1106 } 1088 }
1107 XFA_DataExporter_DealWithDataGroupNode(this); 1089 XFA_DataExporter_DealWithDataGroupNode(this);
1108 } 1090 }
1109 std::unique_ptr<IFX_MemoryStream> pMemoryStream( 1091 std::unique_ptr<IFX_MemoryStream, ReleaseDeleter<IFX_MemoryStream>>
1110 FX_CreateMemoryStream(TRUE)); 1092 pMemoryStream(FX_CreateMemoryStream(TRUE));
1111 std::unique_ptr<IFX_Stream> pStream(IFX_Stream::CreateStream( 1093 std::unique_ptr<IFX_Stream, ReleaseDeleter<IFX_Stream>> pStream(
1112 (IFX_FileWrite*)pMemoryStream.get(), 1094 IFX_Stream::CreateStream(
1113 FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append)); 1095 static_cast<IFX_FileWrite*>(pMemoryStream.get()),
1096 FX_STREAMACCESS_Text | FX_STREAMACCESS_Write |
1097 FX_STREAMACCESS_Append));
1114 if (!pStream) { 1098 if (!pStream) {
1115 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader); 1099 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
1116 return; 1100 return;
1117 } 1101 }
1118 pStream->SetCodePage(FX_CODEPAGE_UTF8); 1102 pStream->SetCodePage(FX_CODEPAGE_UTF8);
1119 pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength()); 1103 pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
1120 if (GetPacketID() == XFA_XDPPACKET_Form) 1104 if (GetPacketID() == XFA_XDPPACKET_Form)
1121 XFA_DataExporter_RegenerateFormFile(this, pStream.get(), NULL, TRUE); 1105 XFA_DataExporter_RegenerateFormFile(this, pStream.get(), nullptr, TRUE);
1122 else 1106 else
1123 pElement->SaveXMLNode(pStream.get()); 1107 pElement->SaveXMLNode(pStream.get());
1124 // TODO(weili): Check whether we need to save pretty print XML, pdfium:501. 1108 // TODO(weili): Check whether we need to save pretty print XML, pdfium:501.
1125 // For now, just put it here to avoid unused variable warning. 1109 // For now, just put it here to avoid unused variable warning.
1126 (void)bPrettyMode; 1110 (void)bPrettyMode;
1127 FXJSE_Value_SetUTF8String( 1111 FXJSE_Value_SetUTF8String(
1128 pArguments->GetReturnValue(), 1112 pArguments->GetReturnValue(),
1129 CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize())); 1113 CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
1130 return; 1114 return;
1131 } 1115 }
1132 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), ""); 1116 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), "");
1133 } 1117 }
1134 1118
1135 void CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) { 1119 void CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) {
1136 int32_t iLength = pArguments->GetLength(); 1120 int32_t iLength = pArguments->GetLength();
1137 if (iLength != 2) { 1121 if (iLength != 2) {
1138 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 1122 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
1139 L"setAttribute"); 1123 L"setAttribute");
1140 return; 1124 return;
1141 } 1125 }
1142 CFX_WideString wsAttributeValue = 1126 CFX_WideString wsAttributeValue =
1143 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC()); 1127 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
1144 CFX_WideString wsAttribute = 1128 CFX_WideString wsAttribute =
1145 CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC()); 1129 CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
1146 SetAttribute(wsAttribute.AsStringC(), wsAttributeValue.AsStringC(), TRUE); 1130 SetAttribute(wsAttribute.AsStringC(), wsAttributeValue.AsStringC(), true);
1147 } 1131 }
1148 1132
1149 void CXFA_Node::Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments) { 1133 void CXFA_Node::Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments) {
1150 int32_t iLength = pArguments->GetLength(); 1134 int32_t iLength = pArguments->GetLength();
1151 if (iLength != 1 && iLength != 2) { 1135 if (iLength != 1 && iLength != 2) {
1152 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setElement"); 1136 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setElement");
1153 return; 1137 return;
1154 } 1138 }
1155 CXFA_Node* pNode = nullptr; 1139 CXFA_Node* pNode = nullptr;
1156 CFX_WideString wsName; 1140 CFX_WideString wsName;
1157 if (iLength >= 1) 1141 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
1158 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); 1142 if (iLength == 2)
1159 if (iLength >= 2) {
1160 wsName = CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC()); 1143 wsName = CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
1161 }
1162 // TODO(weili): check whether we need to implement this, pdfium:501. 1144 // TODO(weili): check whether we need to implement this, pdfium:501.
1163 // For now, just put the variables here to avoid unused variable warning. 1145 // For now, just put the variables here to avoid unused variable warning.
1164 (void)pNode; 1146 (void)pNode;
1165 (void)wsName; 1147 (void)wsName;
1166 } 1148 }
1167 1149
1168 void CXFA_Node::Script_NodeClass_Ns(CFXJSE_Value* pValue, 1150 void CXFA_Node::Script_NodeClass_Ns(CFXJSE_Value* pValue,
1169 FX_BOOL bSetting, 1151 FX_BOOL bSetting,
1170 XFA_ATTRIBUTE eAttribute) { 1152 XFA_ATTRIBUTE eAttribute) {
1171 if (bSetting) { 1153 if (bSetting) {
1172 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 1154 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
1173 } else { 1155 } else {
1174 CFX_WideString wsNameSpace; 1156 CFX_WideString wsNameSpace;
1175 TryNamespace(wsNameSpace); 1157 TryNamespace(wsNameSpace);
1176 FXJSE_Value_SetUTF8String(pValue, FX_UTF8Encode(wsNameSpace).AsStringC()); 1158 FXJSE_Value_SetUTF8String(pValue, FX_UTF8Encode(wsNameSpace).AsStringC());
1177 } 1159 }
1178 } 1160 }
1161
1179 void CXFA_Node::Script_NodeClass_Model(CFXJSE_Value* pValue, 1162 void CXFA_Node::Script_NodeClass_Model(CFXJSE_Value* pValue,
1180 FX_BOOL bSetting, 1163 FX_BOOL bSetting,
1181 XFA_ATTRIBUTE eAttribute) { 1164 XFA_ATTRIBUTE eAttribute) {
1182 if (bSetting) { 1165 if (bSetting) {
1183 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 1166 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
1184 } else { 1167 } else {
1185 FXJSE_Value_Set(pValue, m_pDocument->GetScriptContext()->GetJSValueFromMap( 1168 FXJSE_Value_Set(pValue, m_pDocument->GetScriptContext()->GetJSValueFromMap(
1186 GetModelNode())); 1169 GetModelNode()));
1187 } 1170 }
1188 } 1171 }
1172
1189 void CXFA_Node::Script_NodeClass_IsContainer(CFXJSE_Value* pValue, 1173 void CXFA_Node::Script_NodeClass_IsContainer(CFXJSE_Value* pValue,
1190 FX_BOOL bSetting, 1174 FX_BOOL bSetting,
1191 XFA_ATTRIBUTE eAttribute) { 1175 XFA_ATTRIBUTE eAttribute) {
1192 if (bSetting) { 1176 if (bSetting)
1193 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 1177 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
1194 } else { 1178 else
1195 FXJSE_Value_SetBoolean(pValue, IsContainerNode()); 1179 FXJSE_Value_SetBoolean(pValue, IsContainerNode());
1196 }
1197 } 1180 }
1181
1198 void CXFA_Node::Script_NodeClass_IsNull(CFXJSE_Value* pValue, 1182 void CXFA_Node::Script_NodeClass_IsNull(CFXJSE_Value* pValue,
1199 FX_BOOL bSetting, 1183 FX_BOOL bSetting,
1200 XFA_ATTRIBUTE eAttribute) { 1184 XFA_ATTRIBUTE eAttribute) {
1201 if (bSetting) { 1185 if (bSetting) {
1202 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 1186 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
1203 } else { 1187 } else {
1204 if (GetClassID() == XFA_ELEMENT_Subform) { 1188 if (GetClassID() == XFA_ELEMENT_Subform) {
1205 FXJSE_Value_SetBoolean(pValue, FALSE); 1189 FXJSE_Value_SetBoolean(pValue, FALSE);
1206 return; 1190 return;
1207 } 1191 }
1208 CFX_WideString strValue; 1192 CFX_WideString strValue;
1209 FXJSE_Value_SetBoolean(pValue, !TryContent(strValue) || strValue.IsEmpty()); 1193 FXJSE_Value_SetBoolean(pValue, !TryContent(strValue) || strValue.IsEmpty());
1210 } 1194 }
1211 } 1195 }
1196
1212 void CXFA_Node::Script_NodeClass_OneOfChild(CFXJSE_Value* pValue, 1197 void CXFA_Node::Script_NodeClass_OneOfChild(CFXJSE_Value* pValue,
1213 FX_BOOL bSetting, 1198 FX_BOOL bSetting,
1214 XFA_ATTRIBUTE eAttribute) { 1199 XFA_ATTRIBUTE eAttribute) {
1215 if (bSetting) { 1200 if (bSetting) {
1216 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); 1201 ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET);
1217 } else { 1202 } else {
1218 CXFA_NodeArray properts; 1203 CXFA_NodeArray properts;
1219 int32_t iSize = GetNodeList(properts, XFA_NODEFILTER_OneOfProperty); 1204 int32_t iSize = GetNodeList(properts, XFA_NODEFILTER_OneOfProperty);
1220 if (iSize > 0) { 1205 if (iSize > 0) {
1221 FXJSE_Value_Set( 1206 FXJSE_Value_Set(
1222 pValue, 1207 pValue,
1223 m_pDocument->GetScriptContext()->GetJSValueFromMap(properts[0])); 1208 m_pDocument->GetScriptContext()->GetJSValueFromMap(properts[0]));
1224 } 1209 }
1225 } 1210 }
1226 } 1211 }
1212
1227 void CXFA_Node::Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments) {} 1213 void CXFA_Node::Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments) {}
1228 void CXFA_Node::Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments) { 1214 void CXFA_Node::Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments) {
1229 CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument); 1215 CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument);
1230 FXJSE_Value_SetObject(pArguments->GetReturnValue(), (CXFA_Object*)pFormNodes, 1216 FXJSE_Value_SetObject(pArguments->GetReturnValue(), (CXFA_Object*)pFormNodes,
1231 m_pDocument->GetScriptContext()->GetJseNormalClass()); 1217 m_pDocument->GetScriptContext()->GetJseNormalClass());
1232 } 1218 }
1233 void CXFA_Node::Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments) { 1219 void CXFA_Node::Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments) {
1234 } 1220 }
1235 void CXFA_Node::Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments) { 1221 void CXFA_Node::Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments) {
1236 Script_Template_CreateNode(pArguments); 1222 Script_Template_CreateNode(pArguments);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1466 CXFA_Node* pProtoRoot = 1452 CXFA_Node* pProtoRoot =
1467 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Subform) 1453 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Subform)
1468 ->GetFirstChildByClass(XFA_ELEMENT_Proto); 1454 ->GetFirstChildByClass(XFA_ELEMENT_Proto);
1469 if (!wsUseVal.IsEmpty()) { 1455 if (!wsUseVal.IsEmpty()) {
1470 if (wsUseVal[0] == '#') { 1456 if (wsUseVal[0] == '#') {
1471 wsID = CFX_WideString(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1); 1457 wsID = CFX_WideString(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1);
1472 } else { 1458 } else {
1473 wsSOM = wsUseVal; 1459 wsSOM = wsUseVal;
1474 } 1460 }
1475 } 1461 }
1476 CXFA_Node* pProtoNode = NULL; 1462 CXFA_Node* pProtoNode = nullptr;
1477 if (!wsSOM.IsEmpty()) { 1463 if (!wsSOM.IsEmpty()) {
1478 uint32_t dwFlag = XFA_RESOLVENODE_Children | 1464 uint32_t dwFlag = XFA_RESOLVENODE_Children |
1479 XFA_RESOLVENODE_Attributes | 1465 XFA_RESOLVENODE_Attributes |
1480 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | 1466 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
1481 XFA_RESOLVENODE_Siblings; 1467 XFA_RESOLVENODE_Siblings;
1482 XFA_RESOLVENODE_RS resoveNodeRS; 1468 XFA_RESOLVENODE_RS resoveNodeRS;
1483 int32_t iRet = m_pDocument->GetScriptContext()->ResolveObjects( 1469 int32_t iRet = m_pDocument->GetScriptContext()->ResolveObjects(
1484 pProtoRoot, wsSOM.AsStringC(), resoveNodeRS, dwFlag); 1470 pProtoRoot, wsSOM.AsStringC(), resoveNodeRS, dwFlag);
1485 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { 1471 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) {
1486 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); 1472 pProtoNode = resoveNodeRS.nodes[0]->AsNode();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 Script_Boolean_Value(pValue, bSetting, eAttribute); 1630 Script_Boolean_Value(pValue, bSetting, eAttribute);
1645 return; 1631 return;
1646 } 1632 }
1647 if (bSetting) { 1633 if (bSetting) {
1648 CFX_ByteString newValue; 1634 CFX_ByteString newValue;
1649 if (!(FXJSE_Value_IsNull(pValue) || FXJSE_Value_IsUndefined(pValue))) { 1635 if (!(FXJSE_Value_IsNull(pValue) || FXJSE_Value_IsUndefined(pValue))) {
1650 FXJSE_Value_ToUTF8String(pValue, newValue); 1636 FXJSE_Value_ToUTF8String(pValue, newValue);
1651 } 1637 }
1652 CFX_WideString wsNewValue = CFX_WideString::FromUTF8(newValue.AsStringC()); 1638 CFX_WideString wsNewValue = CFX_WideString::FromUTF8(newValue.AsStringC());
1653 CFX_WideString wsFormatValue(wsNewValue); 1639 CFX_WideString wsFormatValue(wsNewValue);
1654 CXFA_WidgetData* pContainerWidgetData = NULL; 1640 CXFA_WidgetData* pContainerWidgetData = nullptr;
1655 if (GetPacketID() == XFA_XDPPACKET_Datasets) { 1641 if (GetPacketID() == XFA_XDPPACKET_Datasets) {
1656 CXFA_NodeArray formNodes; 1642 CXFA_NodeArray formNodes;
1657 GetBindItems(formNodes); 1643 GetBindItems(formNodes);
1658 CFX_WideString wsPicture; 1644 CFX_WideString wsPicture;
1659 for (int32_t i = 0; i < formNodes.GetSize(); i++) { 1645 for (int32_t i = 0; i < formNodes.GetSize(); i++) {
1660 CXFA_Node* pFormNode = formNodes.GetAt(i); 1646 CXFA_Node* pFormNode = formNodes.GetAt(i);
1661 if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) { 1647 if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) {
1662 continue; 1648 continue;
1663 } 1649 }
1664 pContainerWidgetData = pFormNode->GetContainerWidgetData(); 1650 pContainerWidgetData = pFormNode->GetContainerWidgetData();
1665 if (pContainerWidgetData) { 1651 if (pContainerWidgetData) {
1666 pContainerWidgetData->GetPictureContent(wsPicture, 1652 pContainerWidgetData->GetPictureContent(wsPicture,
1667 XFA_VALUEPICTURE_DataBind); 1653 XFA_VALUEPICTURE_DataBind);
1668 } 1654 }
1669 if (!wsPicture.IsEmpty()) { 1655 if (!wsPicture.IsEmpty()) {
1670 break; 1656 break;
1671 } 1657 }
1672 pContainerWidgetData = NULL; 1658 pContainerWidgetData = nullptr;
1673 } 1659 }
1674 } else if (GetPacketID() == XFA_XDPPACKET_Form) { 1660 } else if (GetPacketID() == XFA_XDPPACKET_Form) {
1675 pContainerWidgetData = GetContainerWidgetData(); 1661 pContainerWidgetData = GetContainerWidgetData();
1676 } 1662 }
1677 if (pContainerWidgetData) { 1663 if (pContainerWidgetData) {
1678 pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue); 1664 pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue);
1679 } 1665 }
1680 SetScriptContent(wsNewValue, wsFormatValue, true, TRUE); 1666 SetScriptContent(wsNewValue, wsFormatValue, true, TRUE);
1681 } else { 1667 } else {
1682 CFX_WideString content = GetScriptContent(TRUE); 1668 CFX_WideString content = GetScriptContent(TRUE);
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after
2493 } 2479 }
2494 if ((eCurType != XFA_ELEMENT_Subform) && 2480 if ((eCurType != XFA_ELEMENT_Subform) &&
2495 (eCurType != XFA_ELEMENT_SubformSet)) { 2481 (eCurType != XFA_ELEMENT_SubformSet)) {
2496 continue; 2482 continue;
2497 } 2483 }
2498 if (iCount == 0) { 2484 if (iCount == 0) {
2499 CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name); 2485 CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
2500 CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name); 2486 CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
2501 if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' || 2487 if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' ||
2502 wsInstName.Mid(1) != wsName) { 2488 wsInstName.Mid(1) != wsName) {
2503 return NULL; 2489 return nullptr;
2504 } 2490 }
2505 dwNameHash = pNode->GetNameHash(); 2491 dwNameHash = pNode->GetNameHash();
2506 } 2492 }
2507 if (dwNameHash != pNode->GetNameHash()) { 2493 if (dwNameHash != pNode->GetNameHash()) {
2508 break; 2494 break;
2509 } 2495 }
2510 iCount++; 2496 iCount++;
2511 if (iCount > iIndex) { 2497 if (iCount > iIndex) {
2512 return pNode; 2498 return pNode;
2513 } 2499 }
2514 } 2500 }
2515 return NULL; 2501 return nullptr;
2516 } 2502 }
2517 void CXFA_Node::Script_Som_InstanceIndex(CFXJSE_Value* pValue, 2503 void CXFA_Node::Script_Som_InstanceIndex(CFXJSE_Value* pValue,
2518 FX_BOOL bSetting, 2504 FX_BOOL bSetting,
2519 XFA_ATTRIBUTE eAttribute) { 2505 XFA_ATTRIBUTE eAttribute) {
2520 if (bSetting) { 2506 if (bSetting) {
2521 int32_t iTo = FXJSE_Value_ToInteger(pValue); 2507 int32_t iTo = FXJSE_Value_ToInteger(pValue);
2522 int32_t iFrom = Subform_and_SubformSet_InstanceIndex(); 2508 int32_t iFrom = Subform_and_SubformSet_InstanceIndex();
2523 CXFA_Node* pManagerNode = NULL; 2509 CXFA_Node* pManagerNode = nullptr;
2524 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; 2510 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
2525 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { 2511 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
2526 if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { 2512 if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) {
2527 pManagerNode = pNode; 2513 pManagerNode = pNode;
2528 break; 2514 break;
2529 } 2515 }
2530 } 2516 }
2531 if (pManagerNode) { 2517 if (pManagerNode) {
2532 pManagerNode->InstanceManager_MoveInstance(iTo, iFrom); 2518 pManagerNode->InstanceManager_MoveInstance(iTo, iFrom);
2533 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); 2519 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify();
(...skipping 13 matching lines...) Expand all
2547 } 2533 }
2548 } else { 2534 } else {
2549 FXJSE_Value_SetInteger(pValue, Subform_and_SubformSet_InstanceIndex()); 2535 FXJSE_Value_SetInteger(pValue, Subform_and_SubformSet_InstanceIndex());
2550 } 2536 }
2551 } 2537 }
2552 void CXFA_Node::Script_Subform_InstanceManager(CFXJSE_Value* pValue, 2538 void CXFA_Node::Script_Subform_InstanceManager(CFXJSE_Value* pValue,
2553 FX_BOOL bSetting, 2539 FX_BOOL bSetting,
2554 XFA_ATTRIBUTE eAttribute) { 2540 XFA_ATTRIBUTE eAttribute) {
2555 if (!bSetting) { 2541 if (!bSetting) {
2556 CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name); 2542 CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name);
2557 CXFA_Node* pInstanceMgr = NULL; 2543 CXFA_Node* pInstanceMgr = nullptr;
2558 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; 2544 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
2559 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { 2545 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
2560 if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { 2546 if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) {
2561 CFX_WideStringC wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name); 2547 CFX_WideStringC wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name);
2562 if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName.GetAt(0) == '_' && 2548 if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName.GetAt(0) == '_' &&
2563 wsInstMgrName.Mid(1) == wsName) { 2549 wsInstMgrName.Mid(1) == wsName) {
2564 pInstanceMgr = pNode; 2550 pInstanceMgr = pNode;
2565 } 2551 }
2566 break; 2552 break;
2567 } 2553 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 CXFA_Node* pDataNode = pFormNode->GetBindData(); 3032 CXFA_Node* pDataNode = pFormNode->GetBindData();
3047 if (!pDataNode) { 3033 if (!pDataNode) {
3048 continue; 3034 continue;
3049 } 3035 }
3050 if (pDataNode->RemoveBindItem(pFormNode) == 0) { 3036 if (pDataNode->RemoveBindItem(pFormNode) == 0) {
3051 if (CXFA_Node* pDataParent = 3037 if (CXFA_Node* pDataParent =
3052 pDataNode->GetNodeItem(XFA_NODEITEM_Parent)) { 3038 pDataNode->GetNodeItem(XFA_NODEITEM_Parent)) {
3053 pDataParent->RemoveChild(pDataNode); 3039 pDataParent->RemoveChild(pDataNode);
3054 } 3040 }
3055 } 3041 }
3056 pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); 3042 pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
3057 } 3043 }
3058 } 3044 }
3059 static CXFA_Node* XFA_ScriptInstanceManager_CreateInstance( 3045 static CXFA_Node* XFA_ScriptInstanceManager_CreateInstance(
3060 CXFA_Node* pInstMgrNode, 3046 CXFA_Node* pInstMgrNode,
3061 FX_BOOL bDataMerge) { 3047 FX_BOOL bDataMerge) {
3062 CXFA_Document* pDocument = pInstMgrNode->GetDocument(); 3048 CXFA_Document* pDocument = pInstMgrNode->GetDocument();
3063 CXFA_Node* pTemplateNode = pInstMgrNode->GetTemplateNode(); 3049 CXFA_Node* pTemplateNode = pInstMgrNode->GetTemplateNode();
3064 CXFA_Node* pFormParent = pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent); 3050 CXFA_Node* pFormParent = pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent);
3065 CXFA_Node* pDataScope = NULL; 3051 CXFA_Node* pDataScope = nullptr;
3066 for (CXFA_Node* pRootBoundNode = pFormParent; 3052 for (CXFA_Node* pRootBoundNode = pFormParent;
3067 pRootBoundNode && 3053 pRootBoundNode &&
3068 pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode; 3054 pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode;
3069 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { 3055 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) {
3070 pDataScope = pRootBoundNode->GetBindData(); 3056 pDataScope = pRootBoundNode->GetBindData();
3071 if (pDataScope) { 3057 if (pDataScope) {
3072 break; 3058 break;
3073 } 3059 }
3074 } 3060 }
3075 if (!pDataScope) { 3061 if (!pDataScope) {
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
3712 XFA_KEYTYPE_Element); 3698 XFA_KEYTYPE_Element);
3713 } 3699 }
3714 FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) { 3700 FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) {
3715 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 3701 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
3716 return HasMapModuleKey(pKey, bCanInherit); 3702 return HasMapModuleKey(pKey, bCanInherit);
3717 } 3703 }
3718 FX_BOOL CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr, 3704 FX_BOOL CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr,
3719 const CFX_WideStringC& wsValue, 3705 const CFX_WideStringC& wsValue,
3720 bool bNotify) { 3706 bool bNotify) {
3721 const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr); 3707 const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
3722 if (pAttr == NULL) { 3708 if (!pAttr)
3723 return FALSE; 3709 return FALSE;
3724 } 3710
3725 XFA_ATTRIBUTETYPE eType = pAttr->eType; 3711 XFA_ATTRIBUTETYPE eType = pAttr->eType;
3726 if (eType == XFA_ATTRIBUTETYPE_NOTSURE) { 3712 if (eType == XFA_ATTRIBUTETYPE_NOTSURE) {
3727 const XFA_NOTSUREATTRIBUTE* pNotsure = 3713 const XFA_NOTSUREATTRIBUTE* pNotsure =
3728 XFA_GetNotsureAttribute(GetClassID(), pAttr->eName); 3714 XFA_GetNotsureAttribute(GetClassID(), pAttr->eName);
3729 eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata; 3715 eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata;
3730 } 3716 }
3731 switch (eType) { 3717 switch (eType) {
3732 case XFA_ATTRIBUTETYPE_Enum: { 3718 case XFA_ATTRIBUTETYPE_Enum: {
3733 const XFA_ATTRIBUTEENUMINFO* pEnum = XFA_GetAttributeEnumByName(wsValue); 3719 const XFA_ATTRIBUTEENUMINFO* pEnum = XFA_GetAttributeEnumByName(wsValue);
3734 return SetEnum(pAttr->eName, 3720 return SetEnum(pAttr->eName,
(...skipping 14 matching lines...) Expand all
3749 return SetMeasure(pAttr->eName, CXFA_Measurement(wsValue), bNotify); 3735 return SetMeasure(pAttr->eName, CXFA_Measurement(wsValue), bNotify);
3750 default: 3736 default:
3751 break; 3737 break;
3752 } 3738 }
3753 return FALSE; 3739 return FALSE;
3754 } 3740 }
3755 FX_BOOL CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr, 3741 FX_BOOL CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr,
3756 CFX_WideString& wsValue, 3742 CFX_WideString& wsValue,
3757 FX_BOOL bUseDefault) { 3743 FX_BOOL bUseDefault) {
3758 const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr); 3744 const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
3759 if (pAttr == NULL) { 3745 if (!pAttr) {
3760 return FALSE; 3746 return FALSE;
3761 } 3747 }
3762 XFA_ATTRIBUTETYPE eType = pAttr->eType; 3748 XFA_ATTRIBUTETYPE eType = pAttr->eType;
3763 if (eType == XFA_ATTRIBUTETYPE_NOTSURE) { 3749 if (eType == XFA_ATTRIBUTETYPE_NOTSURE) {
3764 const XFA_NOTSUREATTRIBUTE* pNotsure = 3750 const XFA_NOTSUREATTRIBUTE* pNotsure =
3765 XFA_GetNotsureAttribute(GetClassID(), pAttr->eName); 3751 XFA_GetNotsureAttribute(GetClassID(), pAttr->eName);
3766 eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata; 3752 eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata;
3767 } 3753 }
3768 switch (eType) { 3754 switch (eType) {
3769 case XFA_ATTRIBUTETYPE_Enum: { 3755 case XFA_ATTRIBUTETYPE_Enum: {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3837 return TRUE; 3823 return TRUE;
3838 } 3824 }
3839 FX_BOOL CXFA_Node::RemoveAttribute(const CFX_WideStringC& wsAttr) { 3825 FX_BOOL CXFA_Node::RemoveAttribute(const CFX_WideStringC& wsAttr) {
3840 void* pKey = XFA_GetMapKey_Custom(wsAttr); 3826 void* pKey = XFA_GetMapKey_Custom(wsAttr);
3841 RemoveMapModuleKey(pKey); 3827 RemoveMapModuleKey(pKey);
3842 return TRUE; 3828 return TRUE;
3843 } 3829 }
3844 FX_BOOL CXFA_Node::TryBoolean(XFA_ATTRIBUTE eAttr, 3830 FX_BOOL CXFA_Node::TryBoolean(XFA_ATTRIBUTE eAttr,
3845 FX_BOOL& bValue, 3831 FX_BOOL& bValue,
3846 FX_BOOL bUseDefault) { 3832 FX_BOOL bUseDefault) {
3847 void* pValue = NULL; 3833 void* pValue = nullptr;
3848 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, bUseDefault, pValue)) { 3834 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, bUseDefault, pValue))
3849 return FALSE; 3835 return FALSE;
3850 }
3851 bValue = (FX_BOOL)(uintptr_t)pValue; 3836 bValue = (FX_BOOL)(uintptr_t)pValue;
3852 return TRUE; 3837 return TRUE;
3853 } 3838 }
3854 FX_BOOL CXFA_Node::TryInteger(XFA_ATTRIBUTE eAttr, 3839 FX_BOOL CXFA_Node::TryInteger(XFA_ATTRIBUTE eAttr,
3855 int32_t& iValue, 3840 int32_t& iValue,
3856 FX_BOOL bUseDefault) { 3841 FX_BOOL bUseDefault) {
3857 void* pValue = NULL; 3842 void* pValue = nullptr;
3858 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, bUseDefault, pValue)) { 3843 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, bUseDefault, pValue))
3859 return FALSE; 3844 return FALSE;
3860 }
3861 iValue = (int32_t)(uintptr_t)pValue; 3845 iValue = (int32_t)(uintptr_t)pValue;
3862 return TRUE; 3846 return TRUE;
3863 } 3847 }
3864 FX_BOOL CXFA_Node::TryEnum(XFA_ATTRIBUTE eAttr, 3848 FX_BOOL CXFA_Node::TryEnum(XFA_ATTRIBUTE eAttr,
3865 XFA_ATTRIBUTEENUM& eValue, 3849 XFA_ATTRIBUTEENUM& eValue,
3866 FX_BOOL bUseDefault) { 3850 FX_BOOL bUseDefault) {
3867 void* pValue = NULL; 3851 void* pValue = nullptr;
3868 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, bUseDefault, pValue)) { 3852 if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, bUseDefault, pValue))
3869 return FALSE; 3853 return FALSE;
3870 }
3871 eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; 3854 eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue;
3872 return TRUE; 3855 return TRUE;
3873 } 3856 }
3874 3857
3875 FX_BOOL CXFA_Node::SetMeasure(XFA_ATTRIBUTE eAttr, 3858 FX_BOOL CXFA_Node::SetMeasure(XFA_ATTRIBUTE eAttr,
3876 CXFA_Measurement mValue, 3859 CXFA_Measurement mValue,
3877 bool bNotify) { 3860 bool bNotify) {
3878 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 3861 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
3879 OnChanging(eAttr, bNotify); 3862 OnChanging(eAttr, bNotify);
3880 SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement)); 3863 SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement));
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
4041 } else { 4024 } else {
4042 CFX_WideStringC wsValueC; 4025 CFX_WideStringC wsValueC;
4043 if (GetMapModuleString(pKey, wsValueC)) { 4026 if (GetMapModuleString(pKey, wsValueC)) {
4044 wsValue = wsValueC; 4027 wsValue = wsValueC;
4045 return TRUE; 4028 return TRUE;
4046 } 4029 }
4047 } 4030 }
4048 if (!bUseDefault) { 4031 if (!bUseDefault) {
4049 return FALSE; 4032 return FALSE;
4050 } 4033 }
4051 void* pValue = NULL; 4034 void* pValue = nullptr;
4052 if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, 4035 if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr,
4053 XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) { 4036 XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) {
4054 wsValue = (const FX_WCHAR*)pValue; 4037 wsValue = (const FX_WCHAR*)pValue;
4055 return TRUE; 4038 return TRUE;
4056 } 4039 }
4057 return FALSE; 4040 return FALSE;
4058 } 4041 }
4059 FX_BOOL CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr, 4042 FX_BOOL CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr,
4060 CFX_WideStringC& wsValue, 4043 CFX_WideStringC& wsValue,
4061 FX_BOOL bUseDefault, 4044 FX_BOOL bUseDefault,
4062 FX_BOOL bProto) { 4045 FX_BOOL bProto) {
4063 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 4046 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
4064 if (eAttr == XFA_ATTRIBUTE_Value) { 4047 if (eAttr == XFA_ATTRIBUTE_Value) {
4065 CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto); 4048 CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto);
4066 if (pStr) { 4049 if (pStr) {
4067 wsValue = pStr->AsStringC(); 4050 wsValue = pStr->AsStringC();
4068 return TRUE; 4051 return TRUE;
4069 } 4052 }
4070 } else { 4053 } else {
4071 if (GetMapModuleString(pKey, wsValue)) { 4054 if (GetMapModuleString(pKey, wsValue)) {
4072 return TRUE; 4055 return TRUE;
4073 } 4056 }
4074 } 4057 }
4075 if (!bUseDefault) { 4058 if (!bUseDefault) {
4076 return FALSE; 4059 return FALSE;
4077 } 4060 }
4078 void* pValue = NULL; 4061 void* pValue = nullptr;
4079 if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, 4062 if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr,
4080 XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) { 4063 XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) {
4081 wsValue = (CFX_WideStringC)(const FX_WCHAR*)pValue; 4064 wsValue = (CFX_WideStringC)(const FX_WCHAR*)pValue;
4082 return TRUE; 4065 return TRUE;
4083 } 4066 }
4084 return FALSE; 4067 return FALSE;
4085 } 4068 }
4086 FX_BOOL CXFA_Node::SetObject(XFA_ATTRIBUTE eAttr, 4069 FX_BOOL CXFA_Node::SetObject(XFA_ATTRIBUTE eAttr,
4087 void* pData, 4070 void* pData,
4088 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { 4071 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
4089 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 4072 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
4090 return SetUserData(pKey, pData, pCallbackInfo); 4073 return SetUserData(pKey, pData, pCallbackInfo);
4091 } 4074 }
4092 FX_BOOL CXFA_Node::TryObject(XFA_ATTRIBUTE eAttr, void*& pData) { 4075 FX_BOOL CXFA_Node::TryObject(XFA_ATTRIBUTE eAttr, void*& pData) {
4093 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 4076 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
4094 pData = GetUserData(pKey); 4077 pData = GetUserData(pKey);
4095 return pData != NULL; 4078 return pData != nullptr;
4096 } 4079 }
4097 FX_BOOL CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr, 4080 FX_BOOL CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr,
4098 XFA_ATTRIBUTETYPE eType, 4081 XFA_ATTRIBUTETYPE eType,
4099 void* pValue, 4082 void* pValue,
4100 bool bNotify) { 4083 bool bNotify) {
4101 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); 4084 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr);
4102 OnChanging(eAttr, bNotify); 4085 OnChanging(eAttr, bNotify);
4103 SetMapModuleValue(pKey, pValue); 4086 SetMapModuleValue(pKey, pValue);
4104 OnChanged(eAttr, bNotify, FALSE); 4087 OnChanged(eAttr, bNotify, FALSE);
4105 if (IsNeedSavingXMLNode()) { 4088 if (IsNeedSavingXMLNode()) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4138 return TRUE; 4121 return TRUE;
4139 } 4122 }
4140 if (!bUseDefault) { 4123 if (!bUseDefault) {
4141 return FALSE; 4124 return FALSE;
4142 } 4125 }
4143 return XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, eType, 4126 return XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, eType,
4144 m_ePacket); 4127 m_ePacket);
4145 } 4128 }
4146 static void XFA_DefaultFreeData(void* pData) {} 4129 static void XFA_DefaultFreeData(void* pData) {}
4147 static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADefaultFreeData = { 4130 static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADefaultFreeData = {
4148 XFA_DefaultFreeData, NULL}; 4131 XFA_DefaultFreeData, nullptr};
4149 FX_BOOL CXFA_Node::SetUserData(void* pKey, 4132 FX_BOOL CXFA_Node::SetUserData(void* pKey,
4150 void* pData, 4133 void* pData,
4151 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { 4134 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
4152 SetMapModuleBuffer(pKey, &pData, sizeof(void*), 4135 SetMapModuleBuffer(pKey, &pData, sizeof(void*),
4153 pCallbackInfo ? pCallbackInfo : &gs_XFADefaultFreeData); 4136 pCallbackInfo ? pCallbackInfo : &gs_XFADefaultFreeData);
4154 return TRUE; 4137 return TRUE;
4155 } 4138 }
4156 FX_BOOL CXFA_Node::TryUserData(void* pKey, void*& pData, FX_BOOL bProtoAlso) { 4139 FX_BOOL CXFA_Node::TryUserData(void* pKey, void*& pData, FX_BOOL bProtoAlso) {
4157 int32_t iBytes = 0; 4140 int32_t iBytes = 0;
4158 if (!GetMapModuleBuffer(pKey, pData, iBytes, bProtoAlso)) { 4141 if (!GetMapModuleBuffer(pKey, pData, iBytes, bProtoAlso)) {
4159 return FALSE; 4142 return FALSE;
4160 } 4143 }
4161 return iBytes == sizeof(void*) && FXSYS_memcpy(&pData, pData, iBytes); 4144 return iBytes == sizeof(void*) && FXSYS_memcpy(&pData, pData, iBytes);
4162 } 4145 }
4163 FX_BOOL CXFA_Node::SetScriptContent(const CFX_WideString& wsContent, 4146 FX_BOOL CXFA_Node::SetScriptContent(const CFX_WideString& wsContent,
4164 const CFX_WideString& wsXMLValue, 4147 const CFX_WideString& wsXMLValue,
4165 bool bNotify, 4148 bool bNotify,
4166 FX_BOOL bScriptModify, 4149 FX_BOOL bScriptModify,
4167 FX_BOOL bSyncData) { 4150 FX_BOOL bSyncData) {
4168 CXFA_Node* pNode = NULL; 4151 CXFA_Node* pNode = nullptr;
4169 CXFA_Node* pBindNode = NULL; 4152 CXFA_Node* pBindNode = nullptr;
4170 switch (GetObjectType()) { 4153 switch (GetObjectType()) {
4171 case XFA_OBJECTTYPE_ContainerNode: { 4154 case XFA_OBJECTTYPE_ContainerNode: {
4172 if (XFA_FieldIsMultiListBox(this)) { 4155 if (XFA_FieldIsMultiListBox(this)) {
4173 CXFA_Node* pValue = GetProperty(0, XFA_ELEMENT_Value); 4156 CXFA_Node* pValue = GetProperty(0, XFA_ELEMENT_Value);
4174 CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild); 4157 CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
4175 ASSERT(pChildValue); 4158 ASSERT(pChildValue);
4176 pChildValue->SetCData(XFA_ATTRIBUTE_ContentType, L"text/xml"); 4159 pChildValue->SetCData(XFA_ATTRIBUTE_ContentType, L"text/xml");
4177 pChildValue->SetScriptContent(wsContent, wsContent, bNotify, 4160 pChildValue->SetScriptContent(wsContent, wsContent, bNotify,
4178 bScriptModify, FALSE); 4161 bScriptModify, FALSE);
4179 CXFA_Node* pBind = GetBindData(); 4162 CXFA_Node* pBind = GetBindData();
(...skipping 22 matching lines...) Expand all
4202 while (CXFA_Node* pChildNode = 4185 while (CXFA_Node* pChildNode =
4203 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { 4186 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) {
4204 pBind->RemoveChild(pChildNode); 4187 pBind->RemoveChild(pChildNode);
4205 } 4188 }
4206 } else { 4189 } else {
4207 CXFA_NodeArray valueNodes; 4190 CXFA_NodeArray valueNodes;
4208 int32_t iDatas = pBind->GetNodeList( 4191 int32_t iDatas = pBind->GetNodeList(
4209 valueNodes, XFA_NODEFILTER_Children, XFA_ELEMENT_DataValue); 4192 valueNodes, XFA_NODEFILTER_Children, XFA_ELEMENT_DataValue);
4210 if (iDatas < iSize) { 4193 if (iDatas < iSize) {
4211 int32_t iAddNodes = iSize - iDatas; 4194 int32_t iAddNodes = iSize - iDatas;
4212 CXFA_Node* pValueNodes = NULL; 4195 CXFA_Node* pValueNodes = nullptr;
4213 while (iAddNodes-- > 0) { 4196 while (iAddNodes-- > 0) {
4214 pValueNodes = 4197 pValueNodes =
4215 pBind->CreateSamePacketNode(XFA_ELEMENT_DataValue); 4198 pBind->CreateSamePacketNode(XFA_ELEMENT_DataValue);
4216 pValueNodes->SetCData(XFA_ATTRIBUTE_Name, L"value"); 4199 pValueNodes->SetCData(XFA_ATTRIBUTE_Name, L"value");
4217 pValueNodes->CreateXMLMappingNode(); 4200 pValueNodes->CreateXMLMappingNode();
4218 pBind->InsertChild(pValueNodes); 4201 pBind->InsertChild(pValueNodes);
4219 } 4202 }
4220 pValueNodes = NULL; 4203 pValueNodes = nullptr;
4221 } else if (iDatas > iSize) { 4204 } else if (iDatas > iSize) {
4222 int32_t iDelNodes = iDatas - iSize; 4205 int32_t iDelNodes = iDatas - iSize;
4223 while (iDelNodes-- > 0) { 4206 while (iDelNodes-- > 0) {
4224 pBind->RemoveChild(pBind->GetNodeItem(XFA_NODEITEM_FirstChild)); 4207 pBind->RemoveChild(pBind->GetNodeItem(XFA_NODEITEM_FirstChild));
4225 } 4208 }
4226 } 4209 }
4227 int32_t i = 0; 4210 int32_t i = 0;
4228 for (CXFA_Node* pValueNode = 4211 for (CXFA_Node* pValueNode =
4229 pBind->GetNodeItem(XFA_NODEITEM_FirstChild); 4212 pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
4230 pValueNode; pValueNode = pValueNode->GetNodeItem( 4213 pValueNode; pValueNode = pValueNode->GetNodeItem(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4262 CXFA_NodeArray nodeArray; 4245 CXFA_NodeArray nodeArray;
4263 pBindNode->GetBindItems(nodeArray); 4246 pBindNode->GetBindItems(nodeArray);
4264 for (int32_t i = 0; i < nodeArray.GetSize(); i++) { 4247 for (int32_t i = 0; i < nodeArray.GetSize(); i++) {
4265 CXFA_Node* pNode = nodeArray[i]; 4248 CXFA_Node* pNode = nodeArray[i];
4266 if (pNode == this) { 4249 if (pNode == this) {
4267 continue; 4250 continue;
4268 } 4251 }
4269 pNode->SetScriptContent(wsContent, wsContent, bNotify, true, FALSE); 4252 pNode->SetScriptContent(wsContent, wsContent, bNotify, true, FALSE);
4270 } 4253 }
4271 } 4254 }
4272 pBindNode = NULL; 4255 pBindNode = nullptr;
4273 break; 4256 break;
4274 } 4257 }
4275 case XFA_OBJECTTYPE_ContentNode: { 4258 case XFA_OBJECTTYPE_ContentNode: {
4276 CFX_WideString wsContentType; 4259 CFX_WideString wsContentType;
4277 if (GetClassID() == XFA_ELEMENT_ExData) { 4260 if (GetClassID() == XFA_ELEMENT_ExData) {
4278 GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); 4261 GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE);
4279 if (wsContentType == FX_WSTRC(L"text/html")) { 4262 if (wsContentType == FX_WSTRC(L"text/html")) {
4280 wsContentType = FX_WSTRC(L""); 4263 wsContentType = FX_WSTRC(L"");
4281 SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType.AsStringC()); 4264 SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType.AsStringC());
4282 } 4265 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4347 CFX_WideString CXFA_Node::GetScriptContent(FX_BOOL bScriptModify) { 4330 CFX_WideString CXFA_Node::GetScriptContent(FX_BOOL bScriptModify) {
4348 CFX_WideString wsContent; 4331 CFX_WideString wsContent;
4349 return TryContent(wsContent, bScriptModify) ? wsContent : CFX_WideString(); 4332 return TryContent(wsContent, bScriptModify) ? wsContent : CFX_WideString();
4350 } 4333 }
4351 CFX_WideString CXFA_Node::GetContent() { 4334 CFX_WideString CXFA_Node::GetContent() {
4352 return GetScriptContent(); 4335 return GetScriptContent();
4353 } 4336 }
4354 FX_BOOL CXFA_Node::TryContent(CFX_WideString& wsContent, 4337 FX_BOOL CXFA_Node::TryContent(CFX_WideString& wsContent,
4355 FX_BOOL bScriptModify, 4338 FX_BOOL bScriptModify,
4356 FX_BOOL bProto) { 4339 FX_BOOL bProto) {
4357 CXFA_Node* pNode = NULL; 4340 CXFA_Node* pNode = nullptr;
4358 switch (GetObjectType()) { 4341 switch (GetObjectType()) {
4359 case XFA_OBJECTTYPE_ContainerNode: 4342 case XFA_OBJECTTYPE_ContainerNode:
4360 if (GetClassID() == XFA_ELEMENT_ExclGroup) { 4343 if (GetClassID() == XFA_ELEMENT_ExclGroup) {
4361 pNode = this; 4344 pNode = this;
4362 } else { 4345 } else {
4363 CXFA_Node* pValue = GetChild(0, XFA_ELEMENT_Value); 4346 CXFA_Node* pValue = GetChild(0, XFA_ELEMENT_Value);
4364 if (!pValue) { 4347 if (!pValue) {
4365 return FALSE; 4348 return FALSE;
4366 } 4349 }
4367 CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild); 4350 CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
4468 return pModelNode->TryNamespace(wsNamespace); 4451 return pModelNode->TryNamespace(wsNamespace);
4469 } 4452 }
4470 } 4453 }
4471 CXFA_Node* CXFA_Node::GetProperty(int32_t index, 4454 CXFA_Node* CXFA_Node::GetProperty(int32_t index,
4472 XFA_ELEMENT eProperty, 4455 XFA_ELEMENT eProperty,
4473 FX_BOOL bCreateProperty) { 4456 FX_BOOL bCreateProperty) {
4474 XFA_ELEMENT eElement = GetClassID(); 4457 XFA_ELEMENT eElement = GetClassID();
4475 uint32_t dwPacket = GetPacketID(); 4458 uint32_t dwPacket = GetPacketID();
4476 const XFA_PROPERTY* pProperty = 4459 const XFA_PROPERTY* pProperty =
4477 XFA_GetPropertyOfElement(eElement, eProperty, dwPacket); 4460 XFA_GetPropertyOfElement(eElement, eProperty, dwPacket);
4478 if (pProperty == NULL || index >= pProperty->uOccur) { 4461 if (!pProperty || index >= pProperty->uOccur)
4479 return NULL; 4462 return nullptr;
4480 } 4463
4481 CXFA_Node* pNode = m_pChild; 4464 CXFA_Node* pNode = m_pChild;
4482 int32_t iCount = 0; 4465 int32_t iCount = 0;
4483 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4466 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4484 if (pNode->GetClassID() == eProperty) { 4467 if (pNode->GetClassID() == eProperty) {
4485 iCount++; 4468 iCount++;
4486 if (iCount > index) { 4469 if (iCount > index) {
4487 return pNode; 4470 return pNode;
4488 } 4471 }
4489 } 4472 }
4490 } 4473 }
4491 if (!bCreateProperty) { 4474 if (!bCreateProperty)
4492 return NULL; 4475 return nullptr;
4493 } 4476
4494 if (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf) { 4477 if (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf) {
4495 pNode = m_pChild; 4478 pNode = m_pChild;
4496 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4479 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4497 const XFA_PROPERTY* pExistProperty = 4480 const XFA_PROPERTY* pExistProperty =
4498 XFA_GetPropertyOfElement(eElement, pNode->GetClassID(), dwPacket); 4481 XFA_GetPropertyOfElement(eElement, pNode->GetClassID(), dwPacket);
4499 if (pExistProperty && (pExistProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) { 4482 if (pExistProperty && (pExistProperty->uFlags & XFA_PROPERTYFLAG_OneOf))
4500 return NULL; 4483 return nullptr;
4501 }
4502 } 4484 }
4503 } 4485 }
4504 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); 4486 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory();
4505 const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(dwPacket); 4487 const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(dwPacket);
4506 CXFA_Node* pNewNode = nullptr; 4488 CXFA_Node* pNewNode = nullptr;
4507 for (; iCount <= index; iCount++) { 4489 for (; iCount <= index; iCount++) {
4508 pNewNode = pFactory->CreateNode(pPacket, eProperty); 4490 pNewNode = pFactory->CreateNode(pPacket, eProperty);
4509 if (!pNewNode) { 4491 if (!pNewNode)
4510 return NULL; 4492 return nullptr;
4511 }
4512 InsertChild(pNewNode, nullptr); 4493 InsertChild(pNewNode, nullptr);
4513 pNewNode->SetFlag(XFA_NODEFLAG_Initialized, true); 4494 pNewNode->SetFlag(XFA_NODEFLAG_Initialized, true);
4514 } 4495 }
4515 return pNewNode; 4496 return pNewNode;
4516 } 4497 }
4517 int32_t CXFA_Node::CountChildren(XFA_ELEMENT eElement, FX_BOOL bOnlyChild) { 4498 int32_t CXFA_Node::CountChildren(XFA_ELEMENT eElement, FX_BOOL bOnlyChild) {
4518 CXFA_Node* pNode = m_pChild; 4499 CXFA_Node* pNode = m_pChild;
4519 int32_t iCount = 0; 4500 int32_t iCount = 0;
4520 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4501 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4521 if (pNode->GetClassID() == eElement || eElement == XFA_ELEMENT_UNKNOWN) { 4502 if (pNode->GetClassID() == eElement || eElement == XFA_ELEMENT_UNKNOWN) {
(...skipping 23 matching lines...) Expand all
4545 if (pProperty) { 4526 if (pProperty) {
4546 continue; 4527 continue;
4547 } 4528 }
4548 } 4529 }
4549 iCount++; 4530 iCount++;
4550 if (iCount > index) { 4531 if (iCount > index) {
4551 return pNode; 4532 return pNode;
4552 } 4533 }
4553 } 4534 }
4554 } 4535 }
4555 return NULL; 4536 return nullptr;
4556 } 4537 }
4557 int32_t CXFA_Node::InsertChild(int32_t index, CXFA_Node* pNode) { 4538 int32_t CXFA_Node::InsertChild(int32_t index, CXFA_Node* pNode) {
4558 ASSERT(!pNode->m_pNext); 4539 ASSERT(!pNode->m_pNext);
4559 pNode->m_pParent = this; 4540 pNode->m_pParent = this;
4560 FX_BOOL ret = m_pDocument->RemovePurgeNode(pNode); 4541 FX_BOOL ret = m_pDocument->RemovePurgeNode(pNode);
4561 ASSERT(ret); 4542 ASSERT(ret);
4562 (void)ret; // Avoid unused variable warning. 4543 (void)ret; // Avoid unused variable warning.
4563 4544
4564 if (m_pChild == NULL || index == 0) { 4545 if (!m_pChild || index == 0) {
4565 if (index > 0) { 4546 if (index > 0) {
4566 return -1; 4547 return -1;
4567 } 4548 }
4568 pNode->m_pNext = m_pChild; 4549 pNode->m_pNext = m_pChild;
4569 m_pChild = pNode; 4550 m_pChild = pNode;
4570 index = 0; 4551 index = 0;
4571 } else if (index < 0) { 4552 } else if (index < 0) {
4572 m_pLastChild->m_pNext = pNode; 4553 m_pLastChild->m_pNext = pNode;
4573 } else { 4554 } else {
4574 CXFA_Node* pPrev = m_pChild; 4555 CXFA_Node* pPrev = m_pChild;
4575 int32_t iCount = 0; 4556 int32_t iCount = 0;
4576 while (++iCount != index && pPrev->m_pNext) { 4557 while (++iCount != index && pPrev->m_pNext) {
4577 pPrev = pPrev->m_pNext; 4558 pPrev = pPrev->m_pNext;
4578 } 4559 }
4579 if (index > 0 && index != iCount) { 4560 if (index > 0 && index != iCount) {
4580 return -1; 4561 return -1;
4581 } 4562 }
4582 pNode->m_pNext = pPrev->m_pNext; 4563 pNode->m_pNext = pPrev->m_pNext;
4583 pPrev->m_pNext = pNode; 4564 pPrev->m_pNext = pNode;
4584 index = iCount; 4565 index = iCount;
4585 } 4566 }
4586 if (pNode->m_pNext == NULL) { 4567 if (!pNode->m_pNext) {
4587 m_pLastChild = pNode; 4568 m_pLastChild = pNode;
4588 } 4569 }
4589 ASSERT(m_pLastChild); 4570 ASSERT(m_pLastChild);
4590 ASSERT(m_pLastChild->m_pNext == NULL); 4571 ASSERT(!m_pLastChild->m_pNext);
4591 pNode->ClearFlag(XFA_NODEFLAG_HasRemoved); 4572 pNode->ClearFlag(XFA_NODEFLAG_HasRemoved);
4592 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); 4573 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify();
4593 if (pNotify) 4574 if (pNotify)
4594 pNotify->OnChildAdded(this); 4575 pNotify->OnChildAdded(this);
4595 4576
4596 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { 4577 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
4597 ASSERT(pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent) == NULL); 4578 ASSERT(!pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent));
4598 m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, index); 4579 m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, index);
4599 pNode->ClearFlag(XFA_NODEFLAG_OwnXMLNode); 4580 pNode->ClearFlag(XFA_NODEFLAG_OwnXMLNode);
4600 } 4581 }
4601 return index; 4582 return index;
4602 } 4583 }
4603 4584
4604 FX_BOOL CXFA_Node::InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode) { 4585 FX_BOOL CXFA_Node::InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode) {
4605 if (!pNode || pNode->m_pParent || 4586 if (!pNode || pNode->m_pParent ||
4606 (pBeforeNode && pBeforeNode->m_pParent != this)) { 4587 (pBeforeNode && pBeforeNode->m_pParent != this)) {
4607 ASSERT(false); 4588 ASSERT(false);
4608 return FALSE; 4589 return FALSE;
4609 } 4590 }
4610 FX_BOOL ret = m_pDocument->RemovePurgeNode(pNode); 4591 FX_BOOL ret = m_pDocument->RemovePurgeNode(pNode);
4611 ASSERT(ret); 4592 ASSERT(ret);
4612 (void)ret; // Avoid unused variable warning. 4593 (void)ret; // Avoid unused variable warning.
4613 4594
4614 int32_t nIndex = -1; 4595 int32_t nIndex = -1;
4615 pNode->m_pParent = this; 4596 pNode->m_pParent = this;
4616 if (m_pChild == NULL || pBeforeNode == m_pChild) { 4597 if (!m_pChild || pBeforeNode == m_pChild) {
4617 pNode->m_pNext = m_pChild; 4598 pNode->m_pNext = m_pChild;
4618 m_pChild = pNode; 4599 m_pChild = pNode;
4619 nIndex = 0; 4600 nIndex = 0;
4620 } else if (!pBeforeNode) { 4601 } else if (!pBeforeNode) {
4621 pNode->m_pNext = m_pLastChild->m_pNext; 4602 pNode->m_pNext = m_pLastChild->m_pNext;
4622 m_pLastChild->m_pNext = pNode; 4603 m_pLastChild->m_pNext = pNode;
4623 } else { 4604 } else {
4624 nIndex = 1; 4605 nIndex = 1;
4625 CXFA_Node* pPrev = m_pChild; 4606 CXFA_Node* pPrev = m_pChild;
4626 while (pPrev->m_pNext != pBeforeNode) { 4607 while (pPrev->m_pNext != pBeforeNode) {
4627 pPrev = pPrev->m_pNext; 4608 pPrev = pPrev->m_pNext;
4628 nIndex++; 4609 nIndex++;
4629 } 4610 }
4630 pNode->m_pNext = pPrev->m_pNext; 4611 pNode->m_pNext = pPrev->m_pNext;
4631 pPrev->m_pNext = pNode; 4612 pPrev->m_pNext = pNode;
4632 } 4613 }
4633 if (pNode->m_pNext == NULL) { 4614 if (!pNode->m_pNext) {
4634 m_pLastChild = pNode; 4615 m_pLastChild = pNode;
4635 } 4616 }
4636 ASSERT(m_pLastChild); 4617 ASSERT(m_pLastChild);
4637 ASSERT(m_pLastChild->m_pNext == NULL); 4618 ASSERT(!m_pLastChild->m_pNext);
4638 pNode->ClearFlag(XFA_NODEFLAG_HasRemoved); 4619 pNode->ClearFlag(XFA_NODEFLAG_HasRemoved);
4639 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); 4620 CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify();
4640 if (pNotify) 4621 if (pNotify)
4641 pNotify->OnChildAdded(this); 4622 pNotify->OnChildAdded(this);
4642 4623
4643 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { 4624 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
4644 ASSERT(pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent) == NULL); 4625 ASSERT(!pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent));
4645 m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, nIndex); 4626 m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, nIndex);
4646 pNode->ClearFlag(XFA_NODEFLAG_OwnXMLNode); 4627 pNode->ClearFlag(XFA_NODEFLAG_OwnXMLNode);
4647 } 4628 }
4648 return TRUE; 4629 return TRUE;
4649 } 4630 }
4650 CXFA_Node* CXFA_Node::Deprecated_GetPrevSibling() { 4631 CXFA_Node* CXFA_Node::Deprecated_GetPrevSibling() {
4651 if (!m_pParent) { 4632 if (!m_pParent) {
4652 return NULL; 4633 return nullptr;
4653 } 4634 }
4654 for (CXFA_Node* pSibling = m_pParent->m_pChild; pSibling; 4635 for (CXFA_Node* pSibling = m_pParent->m_pChild; pSibling;
4655 pSibling = pSibling->m_pNext) { 4636 pSibling = pSibling->m_pNext) {
4656 if (pSibling->m_pNext == this) { 4637 if (pSibling->m_pNext == this) {
4657 return pSibling; 4638 return pSibling;
4658 } 4639 }
4659 } 4640 }
4660 return NULL; 4641 return nullptr;
4661 } 4642 }
4662 FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, bool bNotify) { 4643 FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, bool bNotify) {
4663 if (pNode == NULL || pNode->m_pParent != this) { 4644 if (!pNode || pNode->m_pParent != this) {
4664 ASSERT(FALSE); 4645 ASSERT(FALSE);
4665 return FALSE; 4646 return FALSE;
4666 } 4647 }
4667 if (m_pChild == pNode) { 4648 if (m_pChild == pNode) {
4668 m_pChild = pNode->m_pNext; 4649 m_pChild = pNode->m_pNext;
4669 if (m_pLastChild == pNode) { 4650 if (m_pLastChild == pNode) {
4670 m_pLastChild = pNode->m_pNext; 4651 m_pLastChild = pNode->m_pNext;
4671 } 4652 }
4672 pNode->m_pNext = NULL; 4653 pNode->m_pNext = nullptr;
4673 pNode->m_pParent = NULL; 4654 pNode->m_pParent = nullptr;
4674 } else { 4655 } else {
4675 CXFA_Node* pPrev = pNode->Deprecated_GetPrevSibling(); 4656 CXFA_Node* pPrev = pNode->Deprecated_GetPrevSibling();
4676 pPrev->m_pNext = pNode->m_pNext; 4657 pPrev->m_pNext = pNode->m_pNext;
4677 if (m_pLastChild == pNode) { 4658 if (m_pLastChild == pNode) {
4678 m_pLastChild = pNode->m_pNext ? pNode->m_pNext : pPrev; 4659 m_pLastChild = pNode->m_pNext ? pNode->m_pNext : pPrev;
4679 } 4660 }
4680 pNode->m_pNext = NULL; 4661 pNode->m_pNext = nullptr;
4681 pNode->m_pParent = NULL; 4662 pNode->m_pParent = nullptr;
4682 } 4663 }
4683 ASSERT(m_pLastChild == NULL || m_pLastChild->m_pNext == NULL); 4664 ASSERT(!m_pLastChild || !m_pLastChild->m_pNext);
4684 OnRemoved(bNotify); 4665 OnRemoved(bNotify);
4685 pNode->SetFlag(XFA_NODEFLAG_HasRemoved, true); 4666 pNode->SetFlag(XFA_NODEFLAG_HasRemoved, true);
4686 m_pDocument->AddPurgeNode(pNode); 4667 m_pDocument->AddPurgeNode(pNode);
4687 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { 4668 if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
4688 if (pNode->IsAttributeInXML()) { 4669 if (pNode->IsAttributeInXML()) {
4689 ASSERT(pNode->m_pXMLNode == m_pXMLNode && 4670 ASSERT(pNode->m_pXMLNode == m_pXMLNode &&
4690 m_pXMLNode->GetType() == FDE_XMLNODE_Element); 4671 m_pXMLNode->GetType() == FDE_XMLNODE_Element);
4691 if (pNode->m_pXMLNode->GetType() == FDE_XMLNODE_Element) { 4672 if (pNode->m_pXMLNode->GetType() == FDE_XMLNODE_Element) {
4692 CFDE_XMLElement* pXMLElement = 4673 CFDE_XMLElement* pXMLElement =
4693 static_cast<CFDE_XMLElement*>(pNode->m_pXMLNode); 4674 static_cast<CFDE_XMLElement*>(pNode->m_pXMLNode);
(...skipping 20 matching lines...) Expand all
4714 CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const { 4695 CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const {
4715 return GetFirstChildByName(FX_HashCode_GetW(wsName, false)); 4696 return GetFirstChildByName(FX_HashCode_GetW(wsName, false));
4716 } 4697 }
4717 CXFA_Node* CXFA_Node::GetFirstChildByName(uint32_t dwNameHash) const { 4698 CXFA_Node* CXFA_Node::GetFirstChildByName(uint32_t dwNameHash) const {
4718 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; 4699 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
4719 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4700 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4720 if (pNode->GetNameHash() == dwNameHash) { 4701 if (pNode->GetNameHash() == dwNameHash) {
4721 return pNode; 4702 return pNode;
4722 } 4703 }
4723 } 4704 }
4724 return NULL; 4705 return nullptr;
4725 } 4706 }
4726 CXFA_Node* CXFA_Node::GetFirstChildByClass(XFA_ELEMENT eElement) const { 4707 CXFA_Node* CXFA_Node::GetFirstChildByClass(XFA_ELEMENT eElement) const {
4727 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; 4708 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
4728 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4709 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4729 if (pNode->GetClassID() == eElement) { 4710 if (pNode->GetClassID() == eElement) {
4730 return pNode; 4711 return pNode;
4731 } 4712 }
4732 } 4713 }
4733 return NULL; 4714 return nullptr;
4734 } 4715 }
4735 CXFA_Node* CXFA_Node::GetNextSameNameSibling(uint32_t dwNameHash) const { 4716 CXFA_Node* CXFA_Node::GetNextSameNameSibling(uint32_t dwNameHash) const {
4736 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; 4717 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode;
4737 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4718 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4738 if (pNode->GetNameHash() == dwNameHash) { 4719 if (pNode->GetNameHash() == dwNameHash) {
4739 return pNode; 4720 return pNode;
4740 } 4721 }
4741 } 4722 }
4742 return NULL; 4723 return nullptr;
4743 } 4724 }
4744 CXFA_Node* CXFA_Node::GetNextSameNameSibling( 4725 CXFA_Node* CXFA_Node::GetNextSameNameSibling(
4745 const CFX_WideStringC& wsNodeName) const { 4726 const CFX_WideStringC& wsNodeName) const {
4746 return GetNextSameNameSibling(FX_HashCode_GetW(wsNodeName, false)); 4727 return GetNextSameNameSibling(FX_HashCode_GetW(wsNodeName, false));
4747 } 4728 }
4748 CXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_ELEMENT eElement) const { 4729 CXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_ELEMENT eElement) const {
4749 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; 4730 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode;
4750 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { 4731 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
4751 if (pNode->GetClassID() == eElement) { 4732 if (pNode->GetClassID() == eElement) {
4752 return pNode; 4733 return pNode;
4753 } 4734 }
4754 } 4735 }
4755 return NULL; 4736 return nullptr;
4756 } 4737 }
4757 int32_t CXFA_Node::GetNodeSameNameIndex() const { 4738 int32_t CXFA_Node::GetNodeSameNameIndex() const {
4758 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 4739 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
4759 if (!pScriptContext) { 4740 if (!pScriptContext) {
4760 return -1; 4741 return -1;
4761 } 4742 }
4762 return pScriptContext->GetIndexByName(const_cast<CXFA_Node*>(this)); 4743 return pScriptContext->GetIndexByName(const_cast<CXFA_Node*>(this));
4763 } 4744 }
4764 int32_t CXFA_Node::GetNodeSameClassIndex() const { 4745 int32_t CXFA_Node::GetNodeSameClassIndex() const {
4765 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 4746 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
4766 if (!pScriptContext) { 4747 if (!pScriptContext) {
4767 return -1; 4748 return -1;
4768 } 4749 }
4769 return pScriptContext->GetIndexByClassName(const_cast<CXFA_Node*>(this)); 4750 return pScriptContext->GetIndexByClassName(const_cast<CXFA_Node*>(this));
4770 } 4751 }
4771 void CXFA_Node::GetSOMExpression(CFX_WideString& wsSOMExpression) { 4752 void CXFA_Node::GetSOMExpression(CFX_WideString& wsSOMExpression) {
4772 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); 4753 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
4773 if (!pScriptContext) { 4754 if (!pScriptContext) {
4774 return; 4755 return;
4775 } 4756 }
4776 pScriptContext->GetSomExpression(this, wsSOMExpression); 4757 pScriptContext->GetSomExpression(this, wsSOMExpression);
4777 } 4758 }
4778 CXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() { 4759 CXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() {
4779 CXFA_Node* pInstanceMgr = NULL; 4760 CXFA_Node* pInstanceMgr = nullptr;
4780 if (m_ePacket == XFA_XDPPACKET_Form) { 4761 if (m_ePacket == XFA_XDPPACKET_Form) {
4781 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); 4762 CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
4782 if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_Area) { 4763 if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_Area) {
4783 return pInstanceMgr; 4764 return pInstanceMgr;
4784 } 4765 }
4785 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; 4766 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
4786 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { 4767 pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
4787 XFA_ELEMENT eType = pNode->GetClassID(); 4768 XFA_ELEMENT eType = pNode->GetClassID();
4788 if ((eType == XFA_ELEMENT_Subform || eType == XFA_ELEMENT_SubformSet) && 4769 if ((eType == XFA_ELEMENT_Subform || eType == XFA_ELEMENT_SubformSet) &&
4789 pNode->m_dwNameHash != m_dwNameHash) { 4770 pNode->m_dwNameHash != m_dwNameHash) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
4965 4946
4966 FX_BOOL CXFA_Node::GetMapModuleValue(void* pKey, void*& pValue) { 4947 FX_BOOL CXFA_Node::GetMapModuleValue(void* pKey, void*& pValue) {
4967 CXFA_Node* pNode = this; 4948 CXFA_Node* pNode = this;
4968 while (pNode) { 4949 while (pNode) {
4969 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); 4950 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
4970 if (pModule && pModule->m_ValueMap.Lookup(pKey, pValue)) { 4951 if (pModule && pModule->m_ValueMap.Lookup(pKey, pValue)) {
4971 return TRUE; 4952 return TRUE;
4972 } 4953 }
4973 pNode = pNode->GetPacketID() != XFA_XDPPACKET_Datasets 4954 pNode = pNode->GetPacketID() != XFA_XDPPACKET_Datasets
4974 ? pNode->GetTemplateNode() 4955 ? pNode->GetTemplateNode()
4975 : NULL; 4956 : nullptr;
4976 } 4957 }
4977 return FALSE; 4958 return FALSE;
4978 } 4959 }
4979 void CXFA_Node::SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue) { 4960 void CXFA_Node::SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue) {
4980 SetMapModuleBuffer(pKey, (void*)wsValue.c_str(), 4961 SetMapModuleBuffer(pKey, (void*)wsValue.c_str(),
4981 wsValue.GetLength() * sizeof(FX_WCHAR)); 4962 wsValue.GetLength() * sizeof(FX_WCHAR));
4982 } 4963 }
4983 FX_BOOL CXFA_Node::GetMapModuleString(void* pKey, CFX_WideStringC& wsValue) { 4964 FX_BOOL CXFA_Node::GetMapModuleString(void* pKey, CFX_WideStringC& wsValue) {
4984 void* pValue; 4965 void* pValue;
4985 int32_t iBytes; 4966 int32_t iBytes;
4986 if (!GetMapModuleBuffer(pKey, pValue, iBytes)) { 4967 if (!GetMapModuleBuffer(pKey, pValue, iBytes)) {
4987 return FALSE; 4968 return FALSE;
4988 } 4969 }
4989 wsValue = CFX_WideStringC((const FX_WCHAR*)pValue, iBytes / sizeof(FX_WCHAR)); 4970 wsValue = CFX_WideStringC((const FX_WCHAR*)pValue, iBytes / sizeof(FX_WCHAR));
4990 return TRUE; 4971 return TRUE;
4991 } 4972 }
4992 void CXFA_Node::SetMapModuleBuffer( 4973 void CXFA_Node::SetMapModuleBuffer(
4993 void* pKey, 4974 void* pKey,
4994 void* pValue, 4975 void* pValue,
4995 int32_t iBytes, 4976 int32_t iBytes,
4996 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { 4977 XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
4997 XFA_MAPMODULEDATA* pModule = CreateMapModuleData(); 4978 XFA_MAPMODULEDATA* pModule = CreateMapModuleData();
4998 XFA_MAPDATABLOCK*& pBuffer = pModule->m_BufferMap[pKey]; 4979 XFA_MAPDATABLOCK*& pBuffer = pModule->m_BufferMap[pKey];
4999 if (pBuffer == NULL) { 4980 if (!pBuffer) {
5000 pBuffer = 4981 pBuffer =
5001 (XFA_MAPDATABLOCK*)FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes); 4982 (XFA_MAPDATABLOCK*)FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes);
5002 } else if (pBuffer->iBytes != iBytes) { 4983 } else if (pBuffer->iBytes != iBytes) {
5003 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 4984 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
5004 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 4985 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5005 } 4986 }
5006 pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(uint8_t, pBuffer, 4987 pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(uint8_t, pBuffer,
5007 sizeof(XFA_MAPDATABLOCK) + iBytes); 4988 sizeof(XFA_MAPDATABLOCK) + iBytes);
5008 } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 4989 } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
5009 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 4990 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5010 } 4991 }
5011 if (pBuffer == NULL) { 4992 if (!pBuffer)
5012 return; 4993 return;
5013 } 4994
5014 pBuffer->pCallbackInfo = pCallbackInfo; 4995 pBuffer->pCallbackInfo = pCallbackInfo;
5015 pBuffer->iBytes = iBytes; 4996 pBuffer->iBytes = iBytes;
5016 FXSYS_memcpy(pBuffer->GetData(), pValue, iBytes); 4997 FXSYS_memcpy(pBuffer->GetData(), pValue, iBytes);
5017 } 4998 }
5018 FX_BOOL CXFA_Node::GetMapModuleBuffer(void* pKey, 4999 FX_BOOL CXFA_Node::GetMapModuleBuffer(void* pKey,
5019 void*& pValue, 5000 void*& pValue,
5020 int32_t& iBytes, 5001 int32_t& iBytes,
5021 FX_BOOL bProtoAlso) const { 5002 FX_BOOL bProtoAlso) const {
5022 XFA_MAPDATABLOCK* pBuffer = NULL; 5003 XFA_MAPDATABLOCK* pBuffer = nullptr;
5023 const CXFA_Node* pNode = this; 5004 const CXFA_Node* pNode = this;
5024 while (pNode) { 5005 while (pNode) {
5025 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); 5006 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
5026 if (pModule && pModule->m_BufferMap.Lookup(pKey, pBuffer)) { 5007 if (pModule && pModule->m_BufferMap.Lookup(pKey, pBuffer)) {
5027 break; 5008 break;
5028 } 5009 }
5029 pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets) 5010 pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets)
5030 ? pNode->GetTemplateNode() 5011 ? pNode->GetTemplateNode()
5031 : NULL; 5012 : nullptr;
5032 } 5013 }
5033 if (pBuffer == NULL) { 5014 if (!pBuffer) {
5034 return FALSE; 5015 return FALSE;
5035 } 5016 }
5036 pValue = pBuffer->GetData(); 5017 pValue = pBuffer->GetData();
5037 iBytes = pBuffer->iBytes; 5018 iBytes = pBuffer->iBytes;
5038 return TRUE; 5019 return TRUE;
5039 } 5020 }
5040 FX_BOOL CXFA_Node::HasMapModuleKey(void* pKey, FX_BOOL bProtoAlso) { 5021 FX_BOOL CXFA_Node::HasMapModuleKey(void* pKey, FX_BOOL bProtoAlso) {
5041 CXFA_Node* pNode = this; 5022 CXFA_Node* pNode = this;
5042 while (pNode) { 5023 while (pNode) {
5043 void* pVal; 5024 void* pVal;
5044 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); 5025 XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
5045 if (pModule && 5026 if (pModule &&
5046 (pModule->m_ValueMap.Lookup(pKey, pVal) || 5027 (pModule->m_ValueMap.Lookup(pKey, pVal) ||
5047 pModule->m_BufferMap.Lookup(pKey, (XFA_MAPDATABLOCK*&)pVal))) { 5028 pModule->m_BufferMap.Lookup(pKey, (XFA_MAPDATABLOCK*&)pVal))) {
5048 return TRUE; 5029 return TRUE;
5049 } 5030 }
5050 pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets) 5031 pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets)
5051 ? pNode->GetTemplateNode() 5032 ? pNode->GetTemplateNode()
5052 : NULL; 5033 : nullptr;
5053 } 5034 }
5054 return FALSE; 5035 return FALSE;
5055 } 5036 }
5056 void CXFA_Node::RemoveMapModuleKey(void* pKey) { 5037 void CXFA_Node::RemoveMapModuleKey(void* pKey) {
5057 XFA_MAPMODULEDATA* pModule = GetMapModuleData(); 5038 XFA_MAPMODULEDATA* pModule = GetMapModuleData();
5058 if (!pModule) 5039 if (!pModule)
5059 return; 5040 return;
5060 5041
5061 if (pKey) { 5042 if (pKey) {
5062 XFA_MAPDATABLOCK* pBuffer = NULL; 5043 XFA_MAPDATABLOCK* pBuffer = nullptr;
5063 pModule->m_BufferMap.Lookup(pKey, pBuffer); 5044 pModule->m_BufferMap.Lookup(pKey, pBuffer);
5064 if (pBuffer) { 5045 if (pBuffer) {
5065 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 5046 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
5066 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 5047 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5067 } 5048 }
5068 FX_Free(pBuffer); 5049 FX_Free(pBuffer);
5069 } 5050 }
5070 pModule->m_BufferMap.RemoveKey(pKey); 5051 pModule->m_BufferMap.RemoveKey(pKey);
5071 pModule->m_ValueMap.RemoveKey(pKey); 5052 pModule->m_ValueMap.RemoveKey(pKey);
5072 } else { 5053 } else {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
5112 continue; 5093 continue;
5113 } 5094 }
5114 if (pSrcBuffer->pCallbackInfo && pSrcBuffer->pCallbackInfo->pFree && 5095 if (pSrcBuffer->pCallbackInfo && pSrcBuffer->pCallbackInfo->pFree &&
5115 !pSrcBuffer->pCallbackInfo->pCopy) { 5096 !pSrcBuffer->pCallbackInfo->pCopy) {
5116 if (pBuffer) { 5097 if (pBuffer) {
5117 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 5098 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5118 pDstModuleData->m_BufferMap.RemoveKey(pKey); 5099 pDstModuleData->m_BufferMap.RemoveKey(pKey);
5119 } 5100 }
5120 continue; 5101 continue;
5121 } 5102 }
5122 if (pBuffer == NULL) { 5103 if (!pBuffer) {
5123 pBuffer = (XFA_MAPDATABLOCK*)FX_Alloc( 5104 pBuffer = (XFA_MAPDATABLOCK*)FX_Alloc(
5124 uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); 5105 uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
5125 } else if (pBuffer->iBytes != pSrcBuffer->iBytes) { 5106 } else if (pBuffer->iBytes != pSrcBuffer->iBytes) {
5126 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 5107 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
5127 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 5108 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5128 } 5109 }
5129 pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc( 5110 pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(
5130 uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); 5111 uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
5131 } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 5112 } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
5132 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 5113 pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
5133 } 5114 }
5134 if (pBuffer == NULL) { 5115 if (!pBuffer) {
5135 continue; 5116 continue;
5136 } 5117 }
5137 pBuffer->pCallbackInfo = pSrcBuffer->pCallbackInfo; 5118 pBuffer->pCallbackInfo = pSrcBuffer->pCallbackInfo;
5138 pBuffer->iBytes = pSrcBuffer->iBytes; 5119 pBuffer->iBytes = pSrcBuffer->iBytes;
5139 FXSYS_memcpy(pBuffer->GetData(), pSrcBuffer->GetData(), pSrcBuffer->iBytes); 5120 FXSYS_memcpy(pBuffer->GetData(), pSrcBuffer->GetData(), pSrcBuffer->iBytes);
5140 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pCopy) { 5121 if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pCopy) {
5141 pBuffer->pCallbackInfo->pCopy(*(void**)pBuffer->GetData()); 5122 pBuffer->pCallbackInfo->pCopy(*(void**)pBuffer->GetData());
5142 } 5123 }
5143 } 5124 }
5144 } 5125 }
5145 void CXFA_Node::MoveBufferMapData(CXFA_Node* pDstModule, void* pKey) { 5126 void CXFA_Node::MoveBufferMapData(CXFA_Node* pDstModule, void* pKey) {
5146 if (!pDstModule) { 5127 if (!pDstModule) {
5147 return; 5128 return;
5148 } 5129 }
5149 FX_BOOL bNeedMove = TRUE; 5130 FX_BOOL bNeedMove = TRUE;
5150 if (!pKey) { 5131 if (!pKey) {
5151 bNeedMove = FALSE; 5132 bNeedMove = FALSE;
5152 } 5133 }
5153 if (pDstModule->GetClassID() != GetClassID()) { 5134 if (pDstModule->GetClassID() != GetClassID()) {
5154 bNeedMove = FALSE; 5135 bNeedMove = FALSE;
5155 } 5136 }
5156 XFA_MAPMODULEDATA* pSrcModuleData = NULL; 5137 XFA_MAPMODULEDATA* pSrcModuleData = nullptr;
5157 XFA_MAPMODULEDATA* pDstModuleData = NULL; 5138 XFA_MAPMODULEDATA* pDstModuleData = nullptr;
5158 if (bNeedMove) { 5139 if (bNeedMove) {
5159 pSrcModuleData = GetMapModuleData(); 5140 pSrcModuleData = GetMapModuleData();
5160 if (!pSrcModuleData) { 5141 if (!pSrcModuleData) {
5161 bNeedMove = FALSE; 5142 bNeedMove = FALSE;
5162 } 5143 }
5163 pDstModuleData = pDstModule->CreateMapModuleData(); 5144 pDstModuleData = pDstModule->CreateMapModuleData();
5164 } 5145 }
5165 if (bNeedMove) { 5146 if (bNeedMove) {
5166 void* pBufferBlockData = pSrcModuleData->m_BufferMap.GetValueAt(pKey); 5147 void* pBufferBlockData = pSrcModuleData->m_BufferMap.GetValueAt(pKey);
5167 if (pBufferBlockData) { 5148 if (pBufferBlockData) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
5204 m_pDocument->GetScriptContext()->CacheList(this); 5185 m_pDocument->GetScriptContext()->CacheList(this);
5205 } 5186 }
5206 CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) { 5187 CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) {
5207 uint32_t dwHashCode = FX_HashCode_GetW(wsName, false); 5188 uint32_t dwHashCode = FX_HashCode_GetW(wsName, false);
5208 int32_t iCount = GetLength(); 5189 int32_t iCount = GetLength();
5209 for (int32_t i = 0; i < iCount; i++) { 5190 for (int32_t i = 0; i < iCount; i++) {
5210 CXFA_Node* ret = Item(i); 5191 CXFA_Node* ret = Item(i);
5211 if (dwHashCode == ret->GetNameHash()) 5192 if (dwHashCode == ret->GetNameHash())
5212 return ret; 5193 return ret;
5213 } 5194 }
5214 return NULL; 5195 return nullptr;
5215 } 5196 }
5216 void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) { 5197 void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) {
5217 int32_t argc = pArguments->GetLength(); 5198 int32_t argc = pArguments->GetLength();
5218 if (argc == 1) { 5199 if (argc == 1) {
5219 CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); 5200 CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
5220 if (pNode) { 5201 if (pNode) {
5221 Append(pNode); 5202 Append(pNode);
5222 } else { 5203 } else {
5223 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); 5204 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
5224 } 5205 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
5302 } 5283 }
5303 int32_t CXFA_ArrayNodeList::GetLength() { 5284 int32_t CXFA_ArrayNodeList::GetLength() {
5304 return m_array.GetSize(); 5285 return m_array.GetSize();
5305 } 5286 }
5306 FX_BOOL CXFA_ArrayNodeList::Append(CXFA_Node* pNode) { 5287 FX_BOOL CXFA_ArrayNodeList::Append(CXFA_Node* pNode) {
5307 m_array.Add(pNode); 5288 m_array.Add(pNode);
5308 return TRUE; 5289 return TRUE;
5309 } 5290 }
5310 FX_BOOL CXFA_ArrayNodeList::Insert(CXFA_Node* pNewNode, 5291 FX_BOOL CXFA_ArrayNodeList::Insert(CXFA_Node* pNewNode,
5311 CXFA_Node* pBeforeNode) { 5292 CXFA_Node* pBeforeNode) {
5312 if (pBeforeNode == NULL) { 5293 if (!pBeforeNode) {
5313 m_array.Add(pNewNode); 5294 m_array.Add(pNewNode);
5314 } else { 5295 } else {
5315 int32_t iSize = m_array.GetSize(); 5296 int32_t iSize = m_array.GetSize();
5316 for (int32_t i = 0; i < iSize; ++i) { 5297 for (int32_t i = 0; i < iSize; ++i) {
5317 if (m_array[i] == pBeforeNode) { 5298 if (m_array[i] == pBeforeNode) {
5318 m_array.InsertAt(i, pNewNode); 5299 m_array.InsertAt(i, pNewNode);
5319 break; 5300 break;
5320 } 5301 }
5321 } 5302 }
5322 } 5303 }
5323 return TRUE; 5304 return TRUE;
5324 } 5305 }
5325 FX_BOOL CXFA_ArrayNodeList::Remove(CXFA_Node* pNode) { 5306 FX_BOOL CXFA_ArrayNodeList::Remove(CXFA_Node* pNode) {
5326 int32_t iSize = m_array.GetSize(); 5307 int32_t iSize = m_array.GetSize();
5327 for (int32_t i = 0; i < iSize; ++i) { 5308 for (int32_t i = 0; i < iSize; ++i) {
5328 if (m_array[i] == pNode) { 5309 if (m_array[i] == pNode) {
5329 m_array.RemoveAt(i); 5310 m_array.RemoveAt(i);
5330 break; 5311 break;
5331 } 5312 }
5332 } 5313 }
5333 return TRUE; 5314 return TRUE;
5334 } 5315 }
5335 CXFA_Node* CXFA_ArrayNodeList::Item(int32_t iIndex) { 5316 CXFA_Node* CXFA_ArrayNodeList::Item(int32_t iIndex) {
5336 int32_t iSize = m_array.GetSize(); 5317 int32_t iSize = m_array.GetSize();
5337 if (iIndex >= 0 && iIndex < iSize) { 5318 if (iIndex >= 0 && iIndex < iSize) {
5338 return m_array[iIndex]; 5319 return m_array[iIndex];
5339 } 5320 }
5340 return NULL; 5321 return nullptr;
5341 } 5322 }
5342 CXFA_AttachNodeList::CXFA_AttachNodeList(CXFA_Document* pDocument, 5323 CXFA_AttachNodeList::CXFA_AttachNodeList(CXFA_Document* pDocument,
5343 CXFA_Node* pAttachNode) 5324 CXFA_Node* pAttachNode)
5344 : CXFA_NodeList(pDocument) { 5325 : CXFA_NodeList(pDocument) {
5345 m_pAttachNode = pAttachNode; 5326 m_pAttachNode = pAttachNode;
5346 } 5327 }
5347 int32_t CXFA_AttachNodeList::GetLength() { 5328 int32_t CXFA_AttachNodeList::GetLength() {
5348 return m_pAttachNode->CountChildren( 5329 return m_pAttachNode->CountChildren(
5349 XFA_ELEMENT_UNKNOWN, m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); 5330 XFA_ELEMENT_UNKNOWN, m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform);
5350 } 5331 }
(...skipping 13 matching lines...) Expand all
5364 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); 5345 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode);
5365 } 5346 }
5366 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { 5347 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) {
5367 return m_pAttachNode->RemoveChild(pNode); 5348 return m_pAttachNode->RemoveChild(pNode);
5368 } 5349 }
5369 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { 5350 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) {
5370 return m_pAttachNode->GetChild( 5351 return m_pAttachNode->GetChild(
5371 iIndex, XFA_ELEMENT_UNKNOWN, 5352 iIndex, XFA_ELEMENT_UNKNOWN,
5372 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); 5353 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform);
5373 } 5354 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698