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

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

Issue 2138833002: Cleanup CXFA_SimpleParser. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « 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 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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/cxfa_simple_parser.h" 7 #include "xfa/fxfa/parser/cxfa_simple_parser.h"
8 8
9 #include "xfa/fgas/crt/fgas_codepage.h" 9 #include "xfa/fgas/crt/fgas_codepage.h"
10 #include "xfa/fxfa/include/fxfa.h" 10 #include "xfa/fxfa/include/fxfa.h"
11 #include "xfa/fxfa/include/xfa_checksum.h" 11 #include "xfa/fxfa/include/xfa_checksum.h"
12 #include "xfa/fxfa/parser/cxfa_xml_parser.h" 12 #include "xfa/fxfa/parser/cxfa_xml_parser.h"
13 #include "xfa/fxfa/parser/xfa_document.h" 13 #include "xfa/fxfa/parser/xfa_document.h"
14 14
15 namespace {
16
17 class RichTextNodeVisitor {
Wei Li 2016/07/11 17:53:38 Is this used?
dsinclair 2016/07/11 18:55:01 Nice catch, removed.
18 public:
19 static CFDE_XMLNode* GetFirstChild(CFDE_XMLNode* pNode) {
20 return pNode->GetNodeItem(CFDE_XMLNode::FirstChild);
21 }
22 static CFDE_XMLNode* GetNextSibling(CFDE_XMLNode* pNode) {
23 return pNode->GetNodeItem(CFDE_XMLNode::NextSibling);
24 }
25 static CFDE_XMLNode* GetParent(CFDE_XMLNode* pNode) {
26 return pNode->GetNodeItem(CFDE_XMLNode::Parent);
27 }
28 };
29
30 CFDE_XMLNode* GetDocumentNode(CFDE_XMLDoc* pXMLDoc,
31 FX_BOOL bVerifyWellFormness = FALSE) {
32 if (!pXMLDoc)
33 return nullptr;
34
35 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot();
36 for (CFDE_XMLNode* pXMLNode =
37 pXMLFakeRoot->GetNodeItem(CFDE_XMLNode::FirstChild);
Wei Li 2016/07/11 17:53:38 Nit: no need for |pXMLFakeRoot|
dsinclair 2016/07/11 18:55:01 Done.
38 pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
39 if (pXMLNode->GetType() != FDE_XMLNODE_Element)
40 continue;
41
42 if (!bVerifyWellFormness)
43 return pXMLNode;
44
45 for (CFDE_XMLNode* pNextNode =
46 pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling);
47 pNextNode;
48 pNextNode = pNextNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
49 if (pNextNode->GetType() == FDE_XMLNODE_Element)
50 return FALSE;
51 }
52 return pXMLNode;
53 }
54 return nullptr;
55 }
56
57 void GetElementTagNamespaceURI(CFDE_XMLElement* pElement,
58 CFX_WideString& wsNamespaceURI) {
59 CFX_WideString wsNodeStr;
60 pElement->GetNamespacePrefix(wsNodeStr);
61 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
62 pElement, wsNodeStr.AsStringC(), wsNamespaceURI)) {
63 wsNamespaceURI.clear();
64 }
65 }
66
67 FX_BOOL MatchNodeName(CFDE_XMLNode* pNode,
68 const CFX_WideStringC& wsLocalTagName,
69 const CFX_WideStringC& wsNamespaceURIPrefix,
70 uint32_t eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) {
71 if (!pNode || pNode->GetType() != FDE_XMLNODE_Element)
72 return FALSE;
73
74 CFDE_XMLElement* pElement = reinterpret_cast<CFDE_XMLElement*>(pNode);
75 CFX_WideString wsNodeStr;
76 pElement->GetLocalTagName(wsNodeStr);
77 if (wsNodeStr != wsLocalTagName)
78 return FALSE;
79
80 GetElementTagNamespaceURI(pElement, wsNodeStr);
81 if (eMatchFlags & XFA_XDPPACKET_FLAGS_NOMATCH)
82 return TRUE;
83 if (eMatchFlags & XFA_XDPPACKET_FLAGS_PREFIXMATCH) {
84 return wsNodeStr.Left(wsNamespaceURIPrefix.GetLength()) ==
85 wsNamespaceURIPrefix;
86 }
87 return wsNodeStr == wsNamespaceURIPrefix;
88 }
89
90 FX_BOOL GetAttributeLocalName(const CFX_WideStringC& wsAttributeName,
91 CFX_WideString& wsLocalAttrName) {
92 CFX_WideString wsAttrName(wsAttributeName);
93 FX_STRSIZE iFind = wsAttrName.Find(L':', 0);
94 if (iFind < 0) {
95 wsLocalAttrName = wsAttrName;
96 return FALSE;
97 }
98 wsLocalAttrName = wsAttrName.Right(wsAttrName.GetLength() - iFind - 1);
99 return TRUE;
100 }
101
102 FX_BOOL ResolveAttribute(CFDE_XMLElement* pElement,
103 const CFX_WideStringC& wsAttributeName,
104 CFX_WideString& wsLocalAttrName,
105 CFX_WideString& wsNamespaceURI) {
106 CFX_WideString wsAttrName(wsAttributeName);
107 CFX_WideString wsNSPrefix;
108 if (GetAttributeLocalName(wsAttributeName, wsLocalAttrName)) {
109 wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() -
110 wsLocalAttrName.GetLength() - 1);
111 }
112 if (wsLocalAttrName == FX_WSTRC(L"xmlns") ||
113 wsNSPrefix == FX_WSTRC(L"xmlns") || wsNSPrefix == FX_WSTRC(L"xml")) {
114 return FALSE;
115 }
116 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
117 pElement, wsNSPrefix.AsStringC(), wsNamespaceURI)) {
118 wsNamespaceURI.clear();
119 return FALSE;
120 }
121 return TRUE;
122 }
123
124 FX_BOOL FindAttributeWithNS(CFDE_XMLElement* pElement,
125 const CFX_WideStringC& wsLocalAttributeName,
126 const CFX_WideStringC& wsNamespaceURIPrefix,
127 CFX_WideString& wsValue,
128 FX_BOOL bMatchNSAsPrefix = FALSE) {
129 if (!pElement)
130 return FALSE;
131
132 CFX_WideString wsAttrName;
133 CFX_WideString wsAttrValue;
134 CFX_WideString wsAttrNS;
135 for (int32_t iAttrCount = pElement->CountAttributes(), i = 0; i < iAttrCount;
136 i++) {
137 pElement->GetAttribute(i, wsAttrName, wsAttrValue);
138 FX_STRSIZE iFind = wsAttrName.Find(L':', 0);
139 CFX_WideString wsNSPrefix;
140 if (iFind < 0) {
141 if (wsLocalAttributeName != wsAttrName)
142 continue;
143 } else {
144 if (wsLocalAttributeName !=
145 wsAttrName.Right(wsAttrName.GetLength() - iFind - 1)) {
146 continue;
147 }
148 wsNSPrefix = wsAttrName.Left(iFind);
149 }
150 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
151 pElement, wsNSPrefix.AsStringC(), wsAttrNS)) {
152 continue;
153 }
154 if (bMatchNSAsPrefix) {
155 if (wsAttrNS.Left(wsNamespaceURIPrefix.GetLength()) !=
156 wsNamespaceURIPrefix) {
157 continue;
158 }
159 } else {
160 if (wsAttrNS != wsNamespaceURIPrefix)
161 continue;
162 }
163 wsValue = wsAttrValue;
164 return TRUE;
165 }
166 return FALSE;
167 }
168
169 CFDE_XMLNode* GetDataSetsFromXDP(CFDE_XMLNode* pXMLDocumentNode) {
170 if (MatchNodeName(pXMLDocumentNode,
171 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName,
172 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI,
173 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
174 return pXMLDocumentNode;
175 }
176 if (!MatchNodeName(pXMLDocumentNode,
177 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName,
178 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI,
179 XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) {
180 return nullptr;
181 }
182 for (CFDE_XMLNode* pDatasetsNode =
183 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild);
184 pDatasetsNode;
185 pDatasetsNode = pDatasetsNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
186 if (!MatchNodeName(pDatasetsNode,
187 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName,
188 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI,
189 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
190 continue;
191 }
192 return pDatasetsNode;
193 }
194 return nullptr;
195 }
196
197 FX_BOOL IsStringAllWhitespace(CFX_WideString wsText) {
198 wsText.TrimRight(L"\x20\x9\xD\xA");
199 return wsText.IsEmpty();
200 }
201
202 void ConvertXMLToPlainText(CFDE_XMLElement* pRootXMLNode,
203 CFX_WideString& wsOutput) {
204 for (CFDE_XMLNode* pXMLChild =
205 pRootXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
206 pXMLChild;
207 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
208 switch (pXMLChild->GetType()) {
209 case FDE_XMLNODE_Element: {
210 CFX_WideString wsTextData;
211 static_cast<CFDE_XMLElement*>(pXMLChild)->GetTextData(wsTextData);
212 wsTextData += FX_WSTRC(L"\n");
213 wsOutput += wsTextData;
214 break;
215 }
216 case FDE_XMLNODE_Text: {
217 CFX_WideString wsText;
218 static_cast<CFDE_XMLText*>(pXMLChild)->GetText(wsText);
219 if (IsStringAllWhitespace(wsText))
220 continue;
221
222 wsOutput = wsText;
223 break;
224 }
225 case FDE_XMLNODE_CharData: {
226 CFX_WideString wsCharData;
227 static_cast<CFDE_XMLCharData*>(pXMLChild)->GetCharData(wsCharData);
228 if (IsStringAllWhitespace(wsCharData))
229 continue;
230
231 wsOutput = wsCharData;
232 break;
233 }
234 default:
235 ASSERT(FALSE);
236 break;
237 }
238 }
239 }
240
241 } // namespace
242
243 FX_BOOL XFA_RecognizeRichText(CFDE_XMLElement* pRichTextXMLNode) {
244 if (pRichTextXMLNode) {
245 CFX_WideString wsNamespaceURI;
246 GetElementTagNamespaceURI(pRichTextXMLNode, wsNamespaceURI);
247 if (wsNamespaceURI == FX_WSTRC(L"http://www.w3.org/1999/xhtml"))
248 return TRUE;
249 }
250 return FALSE;
251 }
252
15 CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory, 253 CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory,
16 bool bDocumentParser) 254 bool bDocumentParser)
17 : m_pXMLParser(nullptr), 255 : m_pXMLParser(nullptr),
18 m_pXMLDoc(nullptr), 256 m_pXMLDoc(nullptr),
19 m_pStream(nullptr), 257 m_pStream(nullptr),
20 m_pFileRead(nullptr), 258 m_pFileRead(nullptr),
21 m_pFactory(pFactory), 259 m_pFactory(pFactory),
22 m_pRootNode(nullptr), 260 m_pRootNode(nullptr),
23 m_ePacketID(XFA_XDPPACKET_UNKNOWN), 261 m_ePacketID(XFA_XDPPACKET_UNKNOWN),
24 m_bDocumentParser(bDocumentParser) {} 262 m_bDocumentParser(bDocumentParser) {}
25 263
26 CXFA_SimpleParser::~CXFA_SimpleParser() { 264 CXFA_SimpleParser::~CXFA_SimpleParser() {}
27 }
28 265
29 void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) { 266 void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) {
30 m_pFactory = pFactory; 267 m_pFactory = pFactory;
31 } 268 }
32 269
33 static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode(
34 CFDE_XMLDoc* pXMLDoc,
35 FX_BOOL bVerifyWellFormness = FALSE) {
36 if (!pXMLDoc) {
37 return nullptr;
38 }
39 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot();
40 for (CFDE_XMLNode* pXMLNode =
41 pXMLFakeRoot->GetNodeItem(CFDE_XMLNode::FirstChild);
42 pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
43 if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
44 if (bVerifyWellFormness) {
45 for (CFDE_XMLNode* pNextNode =
46 pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling);
47 pNextNode;
48 pNextNode = pNextNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
49 if (pNextNode->GetType() == FDE_XMLNODE_Element) {
50 return FALSE;
51 }
52 }
53 }
54 return pXMLNode;
55 }
56 }
57 return nullptr;
58 }
59
60 int32_t CXFA_SimpleParser::StartParse(IFX_FileRead* pStream, 270 int32_t CXFA_SimpleParser::StartParse(IFX_FileRead* pStream,
61 XFA_XDPPACKET ePacketID) { 271 XFA_XDPPACKET ePacketID) {
62 CloseParser(); 272 CloseParser();
63 m_pFileRead = pStream; 273 m_pFileRead = pStream;
64 m_pStream.reset(IFX_Stream::CreateStream( 274 m_pStream.reset(IFX_Stream::CreateStream(
65 pStream, FX_STREAMACCESS_Read | FX_STREAMACCESS_Text)); 275 pStream, FX_STREAMACCESS_Read | FX_STREAMACCESS_Text));
66 if (!m_pStream) 276 if (!m_pStream)
67 return XFA_PARSESTATUS_StreamErr; 277 return XFA_PARSESTATUS_StreamErr;
68 278
69 uint16_t wCodePage = m_pStream->GetCodePage(); 279 uint16_t wCodePage = m_pStream->GetCodePage();
(...skipping 13 matching lines...) Expand all
83 int32_t CXFA_SimpleParser::DoParse(IFX_Pause* pPause) { 293 int32_t CXFA_SimpleParser::DoParse(IFX_Pause* pPause) {
84 if (!m_pXMLDoc || m_ePacketID == XFA_XDPPACKET_UNKNOWN) 294 if (!m_pXMLDoc || m_ePacketID == XFA_XDPPACKET_UNKNOWN)
85 return XFA_PARSESTATUS_StatusErr; 295 return XFA_PARSESTATUS_StatusErr;
86 296
87 int32_t iRet = m_pXMLDoc->DoLoad(pPause); 297 int32_t iRet = m_pXMLDoc->DoLoad(pPause);
88 if (iRet < 0) 298 if (iRet < 0)
89 return XFA_PARSESTATUS_SyntaxErr; 299 return XFA_PARSESTATUS_SyntaxErr;
90 if (iRet < 100) 300 if (iRet < 100)
91 return iRet / 2; 301 return iRet / 2;
92 302
93 m_pRootNode = ParseAsXDPPacket( 303 m_pRootNode = ParseAsXDPPacket(GetDocumentNode(m_pXMLDoc.get()), m_ePacketID);
94 XFA_FDEExtension_GetDocumentNode(m_pXMLDoc.get()), m_ePacketID);
95 m_pXMLDoc->CloseXML(); 304 m_pXMLDoc->CloseXML();
96 m_pStream.reset(); 305 m_pStream.reset();
97 306
98 if (!m_pRootNode) 307 if (!m_pRootNode)
99 return XFA_PARSESTATUS_StatusErr; 308 return XFA_PARSESTATUS_StatusErr;
100 return XFA_PARSESTATUS_Done; 309 return XFA_PARSESTATUS_Done;
101 } 310 }
102 311
103 int32_t CXFA_SimpleParser::ParseXMLData(const CFX_WideString& wsXML, 312 int32_t CXFA_SimpleParser::ParseXMLData(const CFX_WideString& wsXML,
104 CFDE_XMLNode*& pXMLNode, 313 CFDE_XMLNode*& pXMLNode,
(...skipping 13 matching lines...) Expand all
118 return XFA_PARSESTATUS_StatusErr; 327 return XFA_PARSESTATUS_StatusErr;
119 328
120 int32_t iRet = m_pXMLDoc->DoLoad(pPause); 329 int32_t iRet = m_pXMLDoc->DoLoad(pPause);
121 if (iRet < 0 || iRet >= 100) 330 if (iRet < 0 || iRet >= 100)
122 m_pXMLDoc->CloseXML(); 331 m_pXMLDoc->CloseXML();
123 if (iRet < 0) 332 if (iRet < 0)
124 return XFA_PARSESTATUS_SyntaxErr; 333 return XFA_PARSESTATUS_SyntaxErr;
125 if (iRet < 100) 334 if (iRet < 100)
126 return iRet / 2; 335 return iRet / 2;
127 336
128 pXMLNode = XFA_FDEExtension_GetDocumentNode(m_pXMLDoc.get()); 337 pXMLNode = GetDocumentNode(m_pXMLDoc.get());
129 return XFA_PARSESTATUS_Done; 338 return XFA_PARSESTATUS_Done;
130 } 339 }
131 340
132 void CXFA_SimpleParser::ConstructXFANode(CXFA_Node* pXFANode, 341 void CXFA_SimpleParser::ConstructXFANode(CXFA_Node* pXFANode,
133 CFDE_XMLNode* pXMLNode) { 342 CFDE_XMLNode* pXMLNode) {
134 XFA_XDPPACKET ePacketID = (XFA_XDPPACKET)pXFANode->GetPacketID(); 343 XFA_XDPPACKET ePacketID = (XFA_XDPPACKET)pXFANode->GetPacketID();
135 if (ePacketID == XFA_XDPPACKET_Datasets) { 344 if (ePacketID == XFA_XDPPACKET_Datasets) {
136 if (pXFANode->GetElementType() == XFA_Element::DataValue) { 345 if (pXFANode->GetElementType() == XFA_Element::DataValue) {
137 for (CFDE_XMLNode* pXMLChild = 346 for (CFDE_XMLNode* pXMLChild =
138 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild); 347 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 } 389 }
181 390
182 CFDE_XMLDoc* CXFA_SimpleParser::GetXMLDoc() const { 391 CFDE_XMLDoc* CXFA_SimpleParser::GetXMLDoc() const {
183 return m_pXMLDoc.get(); 392 return m_pXMLDoc.get();
184 } 393 }
185 394
186 FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier( 395 FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
187 CFDE_XMLElement* pNode, 396 CFDE_XMLElement* pNode,
188 const CFX_WideStringC& wsQualifier, 397 const CFX_WideStringC& wsQualifier,
189 CFX_WideString& wsNamespaceURI) { 398 CFX_WideString& wsNamespaceURI) {
190 if (!pNode) { 399 if (!pNode)
191 return FALSE; 400 return FALSE;
192 } 401
193 CFDE_XMLNode* pFakeRoot = pNode->GetNodeItem(CFDE_XMLNode::Root); 402 CFDE_XMLNode* pFakeRoot = pNode->GetNodeItem(CFDE_XMLNode::Root);
194 CFX_WideString wsNSAttribute; 403 CFX_WideString wsNSAttribute;
195 FX_BOOL bRet = FALSE; 404 FX_BOOL bRet = FALSE;
196 if (wsQualifier.IsEmpty()) { 405 if (wsQualifier.IsEmpty()) {
197 wsNSAttribute = FX_WSTRC(L"xmlns"); 406 wsNSAttribute = FX_WSTRC(L"xmlns");
198 bRet = TRUE; 407 bRet = TRUE;
199 } else { 408 } else {
200 wsNSAttribute = FX_WSTRC(L"xmlns:") + wsQualifier; 409 wsNSAttribute = FX_WSTRC(L"xmlns:") + wsQualifier;
201 } 410 }
202 for (; pNode != pFakeRoot; pNode = static_cast<CFDE_XMLElement*>( 411 for (; pNode != pFakeRoot; pNode = static_cast<CFDE_XMLElement*>(
203 pNode->GetNodeItem(CFDE_XMLNode::Parent))) { 412 pNode->GetNodeItem(CFDE_XMLNode::Parent))) {
204 if (pNode->GetType() != FDE_XMLNODE_Element) { 413 if (pNode->GetType() != FDE_XMLNODE_Element)
205 continue; 414 continue;
206 } 415
207 if (pNode->HasAttribute(wsNSAttribute.c_str())) { 416 if (pNode->HasAttribute(wsNSAttribute.c_str())) {
208 pNode->GetString(wsNSAttribute.c_str(), wsNamespaceURI); 417 pNode->GetString(wsNSAttribute.c_str(), wsNamespaceURI);
209 return TRUE; 418 return TRUE;
210 } 419 }
211 } 420 }
212 wsNamespaceURI.clear(); 421 wsNamespaceURI.clear();
213 return bRet; 422 return bRet;
214 } 423 }
215 424
216 static inline void XFA_FDEExtension_GetElementTagNamespaceURI(
217 CFDE_XMLElement* pElement,
218 CFX_WideString& wsNamespaceURI) {
219 CFX_WideString wsNodeStr;
220 pElement->GetNamespacePrefix(wsNodeStr);
221 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
222 pElement, wsNodeStr.AsStringC(), wsNamespaceURI)) {
223 wsNamespaceURI.clear();
224 }
225 }
226
227 static FX_BOOL XFA_FDEExtension_MatchNodeName(
228 CFDE_XMLNode* pNode,
229 const CFX_WideStringC& wsLocalTagName,
230 const CFX_WideStringC& wsNamespaceURIPrefix,
231 uint32_t eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) {
232 if (!pNode || pNode->GetType() != FDE_XMLNODE_Element) {
233 return FALSE;
234 }
235 CFDE_XMLElement* pElement = reinterpret_cast<CFDE_XMLElement*>(pNode);
236 CFX_WideString wsNodeStr;
237 pElement->GetLocalTagName(wsNodeStr);
238 if (wsNodeStr != wsLocalTagName) {
239 return FALSE;
240 }
241 XFA_FDEExtension_GetElementTagNamespaceURI(pElement, wsNodeStr);
242 if (eMatchFlags & XFA_XDPPACKET_FLAGS_NOMATCH) {
243 return TRUE;
244 }
245 if (eMatchFlags & XFA_XDPPACKET_FLAGS_PREFIXMATCH) {
246 return wsNodeStr.Left(wsNamespaceURIPrefix.GetLength()) ==
247 wsNamespaceURIPrefix;
248 }
249 return wsNodeStr == wsNamespaceURIPrefix;
250 }
251
252 static FX_BOOL XFA_FDEExtension_GetAttributeLocalName(
253 const CFX_WideStringC& wsAttributeName,
254 CFX_WideString& wsLocalAttrName) {
255 CFX_WideString wsAttrName(wsAttributeName);
256 FX_STRSIZE iFind = wsAttrName.Find(L':', 0);
257 if (iFind < 0) {
258 wsLocalAttrName = wsAttrName;
259 return FALSE;
260 } else {
261 wsLocalAttrName = wsAttrName.Right(wsAttrName.GetLength() - iFind - 1);
262 return TRUE;
263 }
264 }
265
266 static FX_BOOL XFA_FDEExtension_ResolveAttribute(
267 CFDE_XMLElement* pElement,
268 const CFX_WideStringC& wsAttributeName,
269 CFX_WideString& wsLocalAttrName,
270 CFX_WideString& wsNamespaceURI) {
271 CFX_WideString wsAttrName(wsAttributeName);
272 CFX_WideString wsNSPrefix;
273 if (XFA_FDEExtension_GetAttributeLocalName(wsAttributeName,
274 wsLocalAttrName)) {
275 wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() -
276 wsLocalAttrName.GetLength() - 1);
277 }
278 if (wsLocalAttrName == FX_WSTRC(L"xmlns") ||
279 wsNSPrefix == FX_WSTRC(L"xmlns") || wsNSPrefix == FX_WSTRC(L"xml")) {
280 return FALSE;
281 }
282 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
283 pElement, wsNSPrefix.AsStringC(), wsNamespaceURI)) {
284 wsNamespaceURI.clear();
285 return FALSE;
286 }
287 return TRUE;
288 }
289
290 static FX_BOOL XFA_FDEExtension_FindAttributeWithNS(
291 CFDE_XMLElement* pElement,
292 const CFX_WideStringC& wsLocalAttributeName,
293 const CFX_WideStringC& wsNamespaceURIPrefix,
294 CFX_WideString& wsValue,
295 FX_BOOL bMatchNSAsPrefix = FALSE) {
296 if (!pElement) {
297 return FALSE;
298 }
299 CFX_WideString wsAttrName;
300 CFX_WideString wsAttrValue;
301 CFX_WideString wsAttrNS;
302 for (int32_t iAttrCount = pElement->CountAttributes(), i = 0; i < iAttrCount;
303 i++) {
304 pElement->GetAttribute(i, wsAttrName, wsAttrValue);
305 FX_STRSIZE iFind = wsAttrName.Find(L':', 0);
306 CFX_WideString wsNSPrefix;
307 if (iFind < 0) {
308 if (wsLocalAttributeName != wsAttrName) {
309 continue;
310 }
311 } else {
312 if (wsLocalAttributeName !=
313 wsAttrName.Right(wsAttrName.GetLength() - iFind - 1)) {
314 continue;
315 }
316 wsNSPrefix = wsAttrName.Left(iFind);
317 }
318 if (!XFA_FDEExtension_ResolveNamespaceQualifier(
319 pElement, wsNSPrefix.AsStringC(), wsAttrNS)) {
320 continue;
321 }
322 if (bMatchNSAsPrefix) {
323 if (wsAttrNS.Left(wsNamespaceURIPrefix.GetLength()) !=
324 wsNamespaceURIPrefix) {
325 continue;
326 }
327 } else {
328 if (wsAttrNS != wsNamespaceURIPrefix) {
329 continue;
330 }
331 }
332 wsValue = wsAttrValue;
333 return TRUE;
334 }
335 return FALSE;
336 }
337
338 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(CFDE_XMLNode* pXMLDocumentNode, 425 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(CFDE_XMLNode* pXMLDocumentNode,
339 XFA_XDPPACKET ePacketID) { 426 XFA_XDPPACKET ePacketID) {
340 switch (ePacketID) { 427 switch (ePacketID) {
341 case XFA_XDPPACKET_UNKNOWN: 428 case XFA_XDPPACKET_UNKNOWN:
342 return nullptr; 429 return nullptr;
343 case XFA_XDPPACKET_XDP: 430 case XFA_XDPPACKET_XDP:
344 return ParseAsXDPPacket_XDP(pXMLDocumentNode, ePacketID); 431 return ParseAsXDPPacket_XDP(pXMLDocumentNode, ePacketID);
345 case XFA_XDPPACKET_Config: 432 case XFA_XDPPACKET_Config:
346 return ParseAsXDPPacket_Config(pXMLDocumentNode, ePacketID); 433 return ParseAsXDPPacket_Config(pXMLDocumentNode, ePacketID);
347 case XFA_XDPPACKET_Template: 434 case XFA_XDPPACKET_Template:
348 case XFA_XDPPACKET_Form: 435 case XFA_XDPPACKET_Form:
349 return ParseAsXDPPacket_TemplateForm(pXMLDocumentNode, ePacketID); 436 return ParseAsXDPPacket_TemplateForm(pXMLDocumentNode, ePacketID);
350 case XFA_XDPPACKET_Datasets: 437 case XFA_XDPPACKET_Datasets:
351 return ParseAsXDPPacket_Data(pXMLDocumentNode, ePacketID); 438 return ParseAsXDPPacket_Data(pXMLDocumentNode, ePacketID);
352 case XFA_XDPPACKET_Xdc: 439 case XFA_XDPPACKET_Xdc:
353 return ParseAsXDPPacket_Xdc(pXMLDocumentNode, ePacketID); 440 return ParseAsXDPPacket_Xdc(pXMLDocumentNode, ePacketID);
354 case XFA_XDPPACKET_LocaleSet: 441 case XFA_XDPPACKET_LocaleSet:
355 case XFA_XDPPACKET_ConnectionSet: 442 case XFA_XDPPACKET_ConnectionSet:
356 case XFA_XDPPACKET_SourceSet: 443 case XFA_XDPPACKET_SourceSet:
357 return ParseAsXDPPacket_LocaleConnectionSourceSet(pXMLDocumentNode, 444 return ParseAsXDPPacket_LocaleConnectionSourceSet(pXMLDocumentNode,
358 ePacketID); 445 ePacketID);
359 default: 446 default:
360 return ParseAsXDPPacket_User(pXMLDocumentNode, ePacketID); 447 return ParseAsXDPPacket_User(pXMLDocumentNode, ePacketID);
361 } 448 }
362 } 449 }
363 450
364 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( 451 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
365 CFDE_XMLNode* pXMLDocumentNode, 452 CFDE_XMLNode* pXMLDocumentNode,
366 XFA_XDPPACKET ePacketID) { 453 XFA_XDPPACKET ePacketID) {
367 if (!XFA_FDEExtension_MatchNodeName( 454 if (!MatchNodeName(pXMLDocumentNode,
368 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName, 455 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName,
369 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI, 456 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI,
370 XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) { 457 XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) {
371 return nullptr; 458 return nullptr;
372 } 459 }
373 CXFA_Node* pXFARootNode = 460 CXFA_Node* pXFARootNode =
374 m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_Element::Xfa); 461 m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_Element::Xfa);
375 if (!pXFARootNode) { 462 if (!pXFARootNode)
376 return nullptr; 463 return nullptr;
377 } 464
378 m_pRootNode = pXFARootNode; 465 m_pRootNode = pXFARootNode;
379 pXFARootNode->SetCData(XFA_ATTRIBUTE_Name, L"xfa"); 466 pXFARootNode->SetCData(XFA_ATTRIBUTE_Name, L"xfa");
380 { 467 {
381 CFDE_XMLElement* pElement = static_cast<CFDE_XMLElement*>(pXMLDocumentNode); 468 CFDE_XMLElement* pElement = static_cast<CFDE_XMLElement*>(pXMLDocumentNode);
382 int32_t iAttributeCount = pElement->CountAttributes(); 469 int32_t iAttributeCount = pElement->CountAttributes();
383 for (int32_t i = 0; i < iAttributeCount; i++) { 470 for (int32_t i = 0; i < iAttributeCount; i++) {
384 CFX_WideString wsAttriName, wsAttriValue; 471 CFX_WideString wsAttriName, wsAttriValue;
385 pElement->GetAttribute(i, wsAttriName, wsAttriValue); 472 pElement->GetAttribute(i, wsAttriName, wsAttriValue);
386 if (wsAttriName == FX_WSTRC(L"uuid")) { 473 if (wsAttriName == FX_WSTRC(L"uuid"))
387 pXFARootNode->SetCData(XFA_ATTRIBUTE_Uuid, wsAttriValue); 474 pXFARootNode->SetCData(XFA_ATTRIBUTE_Uuid, wsAttriValue);
388 } else if (wsAttriName == FX_WSTRC(L"timeStamp")) { 475 else if (wsAttriName == FX_WSTRC(L"timeStamp"))
389 pXFARootNode->SetCData(XFA_ATTRIBUTE_TimeStamp, wsAttriValue); 476 pXFARootNode->SetCData(XFA_ATTRIBUTE_TimeStamp, wsAttriValue);
390 }
391 } 477 }
392 } 478 }
479
393 CFDE_XMLNode* pXMLConfigDOMRoot = nullptr; 480 CFDE_XMLNode* pXMLConfigDOMRoot = nullptr;
394 CXFA_Node* pXFAConfigDOMRoot = nullptr; 481 CXFA_Node* pXFAConfigDOMRoot = nullptr;
395 { 482 {
396 for (CFDE_XMLNode* pChildItem = 483 for (CFDE_XMLNode* pChildItem =
397 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild); 484 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild);
398 pChildItem; 485 pChildItem;
399 pChildItem = pChildItem->GetNodeItem(CFDE_XMLNode::NextSibling)) { 486 pChildItem = pChildItem->GetNodeItem(CFDE_XMLNode::NextSibling)) {
400 const XFA_PACKETINFO* pPacketInfo = 487 const XFA_PACKETINFO* pPacketInfo =
401 XFA_GetPacketByIndex(XFA_PACKET_Config); 488 XFA_GetPacketByIndex(XFA_PACKET_Config);
402 if (!XFA_FDEExtension_MatchNodeName(pChildItem, pPacketInfo->pName, 489 if (!MatchNodeName(pChildItem, pPacketInfo->pName, pPacketInfo->pURI,
403 pPacketInfo->pURI, 490 pPacketInfo->eFlags)) {
404 pPacketInfo->eFlags)) {
405 continue; 491 continue;
406 } 492 }
407 if (pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) { 493 if (pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) {
408 return nullptr; 494 return nullptr;
409 } 495 }
410 pXMLConfigDOMRoot = pChildItem; 496 pXMLConfigDOMRoot = pChildItem;
411 pXFAConfigDOMRoot = 497 pXFAConfigDOMRoot =
412 ParseAsXDPPacket_Config(pXMLConfigDOMRoot, XFA_XDPPACKET_Config); 498 ParseAsXDPPacket_Config(pXMLConfigDOMRoot, XFA_XDPPACKET_Config);
413 pXFARootNode->InsertChild(pXFAConfigDOMRoot, nullptr); 499 pXFARootNode->InsertChild(pXFAConfigDOMRoot, nullptr);
414 } 500 }
415 } 501 }
502
416 CFDE_XMLNode* pXMLDatasetsDOMRoot = nullptr; 503 CFDE_XMLNode* pXMLDatasetsDOMRoot = nullptr;
417 CFDE_XMLNode* pXMLFormDOMRoot = nullptr; 504 CFDE_XMLNode* pXMLFormDOMRoot = nullptr;
418 CFDE_XMLNode* pXMLTemplateDOMRoot = nullptr; 505 CFDE_XMLNode* pXMLTemplateDOMRoot = nullptr;
419 { 506 {
420 for (CFDE_XMLNode* pChildItem = 507 for (CFDE_XMLNode* pChildItem =
421 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild); 508 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild);
422 pChildItem; 509 pChildItem;
423 pChildItem = pChildItem->GetNodeItem(CFDE_XMLNode::NextSibling)) { 510 pChildItem = pChildItem->GetNodeItem(CFDE_XMLNode::NextSibling)) {
424 if (!pChildItem || pChildItem->GetType() != FDE_XMLNODE_Element) { 511 if (!pChildItem || pChildItem->GetType() != FDE_XMLNODE_Element)
425 continue; 512 continue;
426 } 513 if (pChildItem == pXMLConfigDOMRoot)
427 if (pChildItem == pXMLConfigDOMRoot) {
428 continue; 514 continue;
429 } 515
430 CFDE_XMLElement* pElement = 516 CFDE_XMLElement* pElement =
431 reinterpret_cast<CFDE_XMLElement*>(pChildItem); 517 reinterpret_cast<CFDE_XMLElement*>(pChildItem);
432 CFX_WideString wsPacketName; 518 CFX_WideString wsPacketName;
433 pElement->GetLocalTagName(wsPacketName); 519 pElement->GetLocalTagName(wsPacketName);
434 const XFA_PACKETINFO* pPacketInfo = 520 const XFA_PACKETINFO* pPacketInfo =
435 XFA_GetPacketByName(wsPacketName.AsStringC()); 521 XFA_GetPacketByName(wsPacketName.AsStringC());
436 if (pPacketInfo && pPacketInfo->pURI) { 522 if (pPacketInfo && pPacketInfo->pURI) {
437 if (!XFA_FDEExtension_MatchNodeName(pElement, pPacketInfo->pName, 523 if (!MatchNodeName(pElement, pPacketInfo->pName, pPacketInfo->pURI,
438 pPacketInfo->pURI, 524 pPacketInfo->eFlags)) {
439 pPacketInfo->eFlags)) {
440 pPacketInfo = nullptr; 525 pPacketInfo = nullptr;
441 } 526 }
442 } 527 }
443 XFA_XDPPACKET ePacket = 528 XFA_XDPPACKET ePacket =
444 pPacketInfo ? pPacketInfo->eName : XFA_XDPPACKET_USER; 529 pPacketInfo ? pPacketInfo->eName : XFA_XDPPACKET_USER;
445 if (ePacket == XFA_XDPPACKET_XDP) { 530 if (ePacket == XFA_XDPPACKET_XDP)
446 continue; 531 continue;
447 }
448 if (ePacket == XFA_XDPPACKET_Datasets) { 532 if (ePacket == XFA_XDPPACKET_Datasets) {
449 if (pXMLDatasetsDOMRoot) { 533 if (pXMLDatasetsDOMRoot)
450 return nullptr; 534 return nullptr;
451 } 535
452 pXMLDatasetsDOMRoot = pElement; 536 pXMLDatasetsDOMRoot = pElement;
453 } else if (ePacket == XFA_XDPPACKET_Form) { 537 } else if (ePacket == XFA_XDPPACKET_Form) {
454 if (pXMLFormDOMRoot) { 538 if (pXMLFormDOMRoot)
455 return nullptr; 539 return nullptr;
456 } 540
457 pXMLFormDOMRoot = pElement; 541 pXMLFormDOMRoot = pElement;
458 } else if (ePacket == XFA_XDPPACKET_Template) { 542 } else if (ePacket == XFA_XDPPACKET_Template) {
459 if (pXMLTemplateDOMRoot) { 543 if (pXMLTemplateDOMRoot) {
460 // Found a duplicate template packet. 544 // Found a duplicate template packet.
461 return nullptr; 545 return nullptr;
462 } 546 }
463 CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); 547 CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket);
464 if (pPacketNode) { 548 if (pPacketNode) {
465 pXMLTemplateDOMRoot = pElement; 549 pXMLTemplateDOMRoot = pElement;
466 pXFARootNode->InsertChild(pPacketNode); 550 pXFARootNode->InsertChild(pPacketNode);
467 } 551 }
468 } else { 552 } else {
469 CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); 553 CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket);
470 if (pPacketNode) { 554 if (pPacketNode) {
471 if (pPacketInfo && 555 if (pPacketInfo &&
472 (pPacketInfo->eFlags & XFA_XDPPACKET_FLAGS_SUPPORTONE) && 556 (pPacketInfo->eFlags & XFA_XDPPACKET_FLAGS_SUPPORTONE) &&
473 pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) { 557 pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) {
474 return nullptr; 558 return nullptr;
475 } 559 }
476 pXFARootNode->InsertChild(pPacketNode); 560 pXFARootNode->InsertChild(pPacketNode);
477 } 561 }
478 } 562 }
479 } 563 }
480 } 564 }
565
481 if (!pXMLTemplateDOMRoot) { 566 if (!pXMLTemplateDOMRoot) {
482 // No template is found. 567 // No template is found.
483 return nullptr; 568 return nullptr;
484 } 569 }
485 if (pXMLDatasetsDOMRoot) { 570 if (pXMLDatasetsDOMRoot) {
486 CXFA_Node* pPacketNode = 571 CXFA_Node* pPacketNode =
487 ParseAsXDPPacket(pXMLDatasetsDOMRoot, XFA_XDPPACKET_Datasets); 572 ParseAsXDPPacket(pXMLDatasetsDOMRoot, XFA_XDPPACKET_Datasets);
488 if (pPacketNode) { 573 if (pPacketNode)
489 pXFARootNode->InsertChild(pPacketNode); 574 pXFARootNode->InsertChild(pPacketNode);
490 }
491 } 575 }
492 if (pXMLFormDOMRoot) { 576 if (pXMLFormDOMRoot) {
493 CXFA_Node* pPacketNode = 577 CXFA_Node* pPacketNode =
494 ParseAsXDPPacket(pXMLFormDOMRoot, XFA_XDPPACKET_Form); 578 ParseAsXDPPacket(pXMLFormDOMRoot, XFA_XDPPACKET_Form);
495 if (pPacketNode) { 579 if (pPacketNode)
496 pXFARootNode->InsertChild(pPacketNode); 580 pXFARootNode->InsertChild(pPacketNode);
497 }
498 } 581 }
499 pXFARootNode->SetXMLMappingNode(pXMLDocumentNode); 582 pXFARootNode->SetXMLMappingNode(pXMLDocumentNode);
500 return pXFARootNode; 583 return pXFARootNode;
501 } 584 }
502 585
503 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config( 586 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config(
504 CFDE_XMLNode* pXMLDocumentNode, 587 CFDE_XMLNode* pXMLDocumentNode,
505 XFA_XDPPACKET ePacketID) { 588 XFA_XDPPACKET ePacketID) {
506 if (!XFA_FDEExtension_MatchNodeName( 589 if (!MatchNodeName(pXMLDocumentNode,
507 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Config)->pName, 590 XFA_GetPacketByIndex(XFA_PACKET_Config)->pName,
508 XFA_GetPacketByIndex(XFA_PACKET_Config)->pURI, 591 XFA_GetPacketByIndex(XFA_PACKET_Config)->pURI,
509 XFA_GetPacketByIndex(XFA_PACKET_Config)->eFlags)) { 592 XFA_GetPacketByIndex(XFA_PACKET_Config)->eFlags)) {
510 return nullptr; 593 return nullptr;
511 } 594 }
512 CXFA_Node* pNode = 595 CXFA_Node* pNode =
513 m_pFactory->CreateNode(XFA_XDPPACKET_Config, XFA_Element::Config); 596 m_pFactory->CreateNode(XFA_XDPPACKET_Config, XFA_Element::Config);
514 if (!pNode) { 597 if (!pNode)
515 return nullptr; 598 return nullptr;
516 } 599
517 pNode->SetCData(XFA_ATTRIBUTE_Name, 600 pNode->SetCData(XFA_ATTRIBUTE_Name,
518 XFA_GetPacketByIndex(XFA_PACKET_Config)->pName); 601 XFA_GetPacketByIndex(XFA_PACKET_Config)->pName);
519 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { 602 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID))
520 return nullptr; 603 return nullptr;
521 } 604
522 pNode->SetXMLMappingNode(pXMLDocumentNode); 605 pNode->SetXMLMappingNode(pXMLDocumentNode);
523 return pNode; 606 return pNode;
524 } 607 }
525 608
526 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( 609 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm(
527 CFDE_XMLNode* pXMLDocumentNode, 610 CFDE_XMLNode* pXMLDocumentNode,
528 XFA_XDPPACKET ePacketID) { 611 XFA_XDPPACKET ePacketID) {
529 CXFA_Node* pNode = nullptr; 612 CXFA_Node* pNode = nullptr;
530 if (ePacketID == XFA_XDPPACKET_Template) { 613 if (ePacketID == XFA_XDPPACKET_Template) {
531 if (XFA_FDEExtension_MatchNodeName( 614 if (MatchNodeName(pXMLDocumentNode,
532 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Template)->pName, 615 XFA_GetPacketByIndex(XFA_PACKET_Template)->pName,
533 XFA_GetPacketByIndex(XFA_PACKET_Template)->pURI, 616 XFA_GetPacketByIndex(XFA_PACKET_Template)->pURI,
534 XFA_GetPacketByIndex(XFA_PACKET_Template)->eFlags)) { 617 XFA_GetPacketByIndex(XFA_PACKET_Template)->eFlags)) {
535 pNode = 618 pNode =
536 m_pFactory->CreateNode(XFA_XDPPACKET_Template, XFA_Element::Template); 619 m_pFactory->CreateNode(XFA_XDPPACKET_Template, XFA_Element::Template);
537 if (!pNode) { 620 if (!pNode)
538 return nullptr; 621 return nullptr;
539 } 622
540 pNode->SetCData(XFA_ATTRIBUTE_Name, 623 pNode->SetCData(XFA_ATTRIBUTE_Name,
541 XFA_GetPacketByIndex(XFA_PACKET_Template)->pName); 624 XFA_GetPacketByIndex(XFA_PACKET_Template)->pName);
542 if (m_bDocumentParser) { 625 if (m_bDocumentParser) {
543 CFX_WideString wsNamespaceURI; 626 CFX_WideString wsNamespaceURI;
544 CFDE_XMLElement* pXMLDocumentElement = 627 CFDE_XMLElement* pXMLDocumentElement =
545 static_cast<CFDE_XMLElement*>(pXMLDocumentNode); 628 static_cast<CFDE_XMLElement*>(pXMLDocumentNode);
546 pXMLDocumentElement->GetNamespaceURI(wsNamespaceURI); 629 pXMLDocumentElement->GetNamespaceURI(wsNamespaceURI);
547 if (wsNamespaceURI.IsEmpty()) { 630 if (wsNamespaceURI.IsEmpty())
548 pXMLDocumentElement->GetString(L"xmlns:xfa", wsNamespaceURI); 631 pXMLDocumentElement->GetString(L"xmlns:xfa", wsNamespaceURI);
549 } 632
550 pNode->GetDocument()->RecognizeXFAVersionNumber(wsNamespaceURI); 633 pNode->GetDocument()->RecognizeXFAVersionNumber(wsNamespaceURI);
551 } 634 }
552 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { 635 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID))
553 return nullptr; 636 return nullptr;
554 }
555 } 637 }
556 } else if (ePacketID == XFA_XDPPACKET_Form) { 638 } else if (ePacketID == XFA_XDPPACKET_Form) {
557 if (XFA_FDEExtension_MatchNodeName( 639 if (MatchNodeName(pXMLDocumentNode,
558 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Form)->pName, 640 XFA_GetPacketByIndex(XFA_PACKET_Form)->pName,
559 XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI, 641 XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI,
560 XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) { 642 XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) {
561 CFDE_XMLElement* pXMLDocumentElement = 643 CFDE_XMLElement* pXMLDocumentElement =
562 static_cast<CFDE_XMLElement*>(pXMLDocumentNode); 644 static_cast<CFDE_XMLElement*>(pXMLDocumentNode);
563 CFX_WideString wsChecksum; 645 CFX_WideString wsChecksum;
564 pXMLDocumentElement->GetString(L"checksum", wsChecksum); 646 pXMLDocumentElement->GetString(L"checksum", wsChecksum);
565 if (wsChecksum.GetLength() != 28 || 647 if (wsChecksum.GetLength() != 28 ||
566 m_pXMLParser->m_dwCheckStatus != 0x03) { 648 m_pXMLParser->m_dwCheckStatus != 0x03) {
567 return nullptr; 649 return nullptr;
568 } 650 }
569 std::unique_ptr<CXFA_ChecksumContext> pChecksum(new CXFA_ChecksumContext); 651 std::unique_ptr<CXFA_ChecksumContext> pChecksum(new CXFA_ChecksumContext);
570 pChecksum->StartChecksum(); 652 pChecksum->StartChecksum();
(...skipping 18 matching lines...) Expand all
589 CXFA_Node* pTemplateChosen = 671 CXFA_Node* pTemplateChosen =
590 pTemplateRoot 672 pTemplateRoot
591 ? pTemplateRoot->GetFirstChildByClass(XFA_Element::Subform) 673 ? pTemplateRoot->GetFirstChildByClass(XFA_Element::Subform)
592 : nullptr; 674 : nullptr;
593 FX_BOOL bUseAttribute = TRUE; 675 FX_BOOL bUseAttribute = TRUE;
594 if (pTemplateChosen && 676 if (pTemplateChosen &&
595 pTemplateChosen->GetEnum(XFA_ATTRIBUTE_RestoreState) != 677 pTemplateChosen->GetEnum(XFA_ATTRIBUTE_RestoreState) !=
596 XFA_ATTRIBUTEENUM_Auto) { 678 XFA_ATTRIBUTEENUM_Auto) {
597 bUseAttribute = FALSE; 679 bUseAttribute = FALSE;
598 } 680 }
599 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, bUseAttribute)) { 681 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, bUseAttribute))
600 return nullptr; 682 return nullptr;
601 }
602 } 683 }
603 } 684 }
604 if (pNode) { 685 if (pNode)
605 pNode->SetXMLMappingNode(pXMLDocumentNode); 686 pNode->SetXMLMappingNode(pXMLDocumentNode);
606 } 687
607 return pNode; 688 return pNode;
608 } 689 }
609 690
610 static CFDE_XMLNode* XFA_GetDataSetsFromXDP(CFDE_XMLNode* pXMLDocumentNode) {
611 if (XFA_FDEExtension_MatchNodeName(
612 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName,
613 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI,
614 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
615 return pXMLDocumentNode;
616 }
617 if (!XFA_FDEExtension_MatchNodeName(
618 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName,
619 XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI,
620 XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) {
621 return nullptr;
622 }
623 for (CFDE_XMLNode* pDatasetsNode =
624 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::FirstChild);
625 pDatasetsNode;
626 pDatasetsNode = pDatasetsNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
627 if (!XFA_FDEExtension_MatchNodeName(
628 pDatasetsNode, XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName,
629 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI,
630 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
631 continue;
632 }
633 return pDatasetsNode;
634 }
635 return nullptr;
636 }
637
638 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data( 691 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data(
639 CFDE_XMLNode* pXMLDocumentNode, 692 CFDE_XMLNode* pXMLDocumentNode,
640 XFA_XDPPACKET ePacketID) { 693 XFA_XDPPACKET ePacketID) {
641 CFDE_XMLNode* pDatasetsXMLNode = XFA_GetDataSetsFromXDP(pXMLDocumentNode); 694 CFDE_XMLNode* pDatasetsXMLNode = GetDataSetsFromXDP(pXMLDocumentNode);
642 if (pDatasetsXMLNode) { 695 if (pDatasetsXMLNode) {
643 CXFA_Node* pNode = 696 CXFA_Node* pNode =
644 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataModel); 697 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataModel);
645 if (!pNode) { 698 if (!pNode)
646 return nullptr; 699 return nullptr;
647 } 700
648 pNode->SetCData(XFA_ATTRIBUTE_Name, 701 pNode->SetCData(XFA_ATTRIBUTE_Name,
649 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName); 702 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName);
650 if (!DataLoader(pNode, pDatasetsXMLNode, FALSE)) { 703 if (!DataLoader(pNode, pDatasetsXMLNode, FALSE))
651 return nullptr; 704 return nullptr;
652 } 705
653 pNode->SetXMLMappingNode(pDatasetsXMLNode); 706 pNode->SetXMLMappingNode(pDatasetsXMLNode);
654 return pNode; 707 return pNode;
655 } 708 }
709
656 CFDE_XMLNode* pDataXMLNode = nullptr; 710 CFDE_XMLNode* pDataXMLNode = nullptr;
657 if (XFA_FDEExtension_MatchNodeName( 711 if (MatchNodeName(pXMLDocumentNode, FX_WSTRC(L"data"),
658 pXMLDocumentNode, FX_WSTRC(L"data"), 712 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI,
659 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI, 713 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
660 XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) {
661 static_cast<CFDE_XMLElement*>(pXMLDocumentNode) 714 static_cast<CFDE_XMLElement*>(pXMLDocumentNode)
662 ->RemoveAttribute(L"xmlns:xfa"); 715 ->RemoveAttribute(L"xmlns:xfa");
663 pDataXMLNode = pXMLDocumentNode; 716 pDataXMLNode = pXMLDocumentNode;
664 } else { 717 } else {
665 CFDE_XMLElement* pDataElement = new CFDE_XMLElement(L"xfa:data"); 718 CFDE_XMLElement* pDataElement = new CFDE_XMLElement(L"xfa:data");
666 CFDE_XMLNode* pParentXMLNode = 719 CFDE_XMLNode* pParentXMLNode =
667 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::Parent); 720 pXMLDocumentNode->GetNodeItem(CFDE_XMLNode::Parent);
668 if (pParentXMLNode) { 721 if (pParentXMLNode)
669 pParentXMLNode->RemoveChildNode(pXMLDocumentNode); 722 pParentXMLNode->RemoveChildNode(pXMLDocumentNode);
670 } 723
671 ASSERT(pXMLDocumentNode->GetType() == FDE_XMLNODE_Element); 724 ASSERT(pXMLDocumentNode->GetType() == FDE_XMLNODE_Element);
672 if (pXMLDocumentNode->GetType() == FDE_XMLNODE_Element) { 725 if (pXMLDocumentNode->GetType() == FDE_XMLNODE_Element) {
673 static_cast<CFDE_XMLElement*>(pXMLDocumentNode) 726 static_cast<CFDE_XMLElement*>(pXMLDocumentNode)
674 ->RemoveAttribute(L"xmlns:xfa"); 727 ->RemoveAttribute(L"xmlns:xfa");
675 } 728 }
676 pDataElement->InsertChildNode(pXMLDocumentNode); 729 pDataElement->InsertChildNode(pXMLDocumentNode);
677 pDataXMLNode = pDataElement; 730 pDataXMLNode = pDataElement;
678 } 731 }
732
679 if (pDataXMLNode) { 733 if (pDataXMLNode) {
680 CXFA_Node* pNode = 734 CXFA_Node* pNode =
681 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataGroup); 735 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataGroup);
682 if (!pNode) { 736 if (!pNode) {
683 if (pDataXMLNode != pXMLDocumentNode) { 737 if (pDataXMLNode != pXMLDocumentNode)
684 pDataXMLNode->Release(); 738 pDataXMLNode->Release();
685 }
686 return nullptr; 739 return nullptr;
687 } 740 }
688 CFX_WideString wsLocalName; 741 CFX_WideString wsLocalName;
689 static_cast<CFDE_XMLElement*>(pDataXMLNode)->GetLocalTagName(wsLocalName); 742 static_cast<CFDE_XMLElement*>(pDataXMLNode)->GetLocalTagName(wsLocalName);
690 pNode->SetCData(XFA_ATTRIBUTE_Name, wsLocalName); 743 pNode->SetCData(XFA_ATTRIBUTE_Name, wsLocalName);
691 if (!DataLoader(pNode, pDataXMLNode, TRUE)) { 744 if (!DataLoader(pNode, pDataXMLNode, TRUE))
692 return nullptr; 745 return nullptr;
693 } 746
694 pNode->SetXMLMappingNode(pDataXMLNode); 747 pNode->SetXMLMappingNode(pDataXMLNode);
695 if (pDataXMLNode != pXMLDocumentNode) { 748 if (pDataXMLNode != pXMLDocumentNode)
696 pNode->SetFlag(XFA_NodeFlag_OwnXMLNode, false); 749 pNode->SetFlag(XFA_NodeFlag_OwnXMLNode, false);
697 }
698 return pNode; 750 return pNode;
699 } 751 }
700 return nullptr; 752 return nullptr;
701 } 753 }
702 754
703 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet( 755 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet(
704 CFDE_XMLNode* pXMLDocumentNode, 756 CFDE_XMLNode* pXMLDocumentNode,
705 XFA_XDPPACKET ePacketID) { 757 XFA_XDPPACKET ePacketID) {
706 CXFA_Node* pNode = nullptr; 758 CXFA_Node* pNode = nullptr;
707 if (ePacketID == XFA_XDPPACKET_LocaleSet) { 759 if (ePacketID == XFA_XDPPACKET_LocaleSet) {
708 if (XFA_FDEExtension_MatchNodeName( 760 if (MatchNodeName(pXMLDocumentNode,
709 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName, 761 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName,
710 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pURI, 762 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pURI,
711 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->eFlags)) { 763 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->eFlags)) {
712 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_LocaleSet, 764 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_LocaleSet,
713 XFA_Element::LocaleSet); 765 XFA_Element::LocaleSet);
714 if (!pNode) { 766 if (!pNode)
715 return nullptr; 767 return nullptr;
716 } 768
717 pNode->SetCData(XFA_ATTRIBUTE_Name, 769 pNode->SetCData(XFA_ATTRIBUTE_Name,
718 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName); 770 XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName);
719 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { 771 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID))
720 return nullptr; 772 return nullptr;
721 }
722 } 773 }
723 } else if (ePacketID == XFA_XDPPACKET_ConnectionSet) { 774 } else if (ePacketID == XFA_XDPPACKET_ConnectionSet) {
724 if (XFA_FDEExtension_MatchNodeName( 775 if (MatchNodeName(pXMLDocumentNode,
725 pXMLDocumentNode, 776 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName,
726 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName, 777 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pURI,
727 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pURI, 778 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->eFlags)) {
728 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->eFlags)) {
729 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_ConnectionSet, 779 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_ConnectionSet,
730 XFA_Element::ConnectionSet); 780 XFA_Element::ConnectionSet);
731 if (!pNode) { 781 if (!pNode)
732 return nullptr; 782 return nullptr;
733 } 783
734 pNode->SetCData(XFA_ATTRIBUTE_Name, 784 pNode->SetCData(XFA_ATTRIBUTE_Name,
735 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName); 785 XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName);
736 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { 786 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID))
737 return nullptr; 787 return nullptr;
738 }
739 } 788 }
740 } else if (ePacketID == XFA_XDPPACKET_SourceSet) { 789 } else if (ePacketID == XFA_XDPPACKET_SourceSet) {
741 if (XFA_FDEExtension_MatchNodeName( 790 if (MatchNodeName(pXMLDocumentNode,
742 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName, 791 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName,
743 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pURI, 792 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pURI,
744 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->eFlags)) { 793 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->eFlags)) {
745 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_SourceSet, 794 pNode = m_pFactory->CreateNode(XFA_XDPPACKET_SourceSet,
746 XFA_Element::SourceSet); 795 XFA_Element::SourceSet);
747 if (!pNode) { 796 if (!pNode)
748 return nullptr; 797 return nullptr;
749 } 798
750 pNode->SetCData(XFA_ATTRIBUTE_Name, 799 pNode->SetCData(XFA_ATTRIBUTE_Name,
751 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName); 800 XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName);
752 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { 801 if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID))
753 return nullptr; 802 return nullptr;
754 }
755 } 803 }
756 } 804 }
757 if (pNode) { 805 if (pNode)
758 pNode->SetXMLMappingNode(pXMLDocumentNode); 806 pNode->SetXMLMappingNode(pXMLDocumentNode);
759 }
760 return pNode; 807 return pNode;
761 } 808 }
762 809
763 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc( 810 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc(
764 CFDE_XMLNode* pXMLDocumentNode, 811 CFDE_XMLNode* pXMLDocumentNode,
765 XFA_XDPPACKET ePacketID) { 812 XFA_XDPPACKET ePacketID) {
766 if (XFA_FDEExtension_MatchNodeName( 813 if (!MatchNodeName(pXMLDocumentNode,
767 pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName, 814 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName,
768 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pURI, 815 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pURI,
769 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->eFlags)) { 816 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->eFlags))
770 CXFA_Node* pNode = 817 return nullptr;
771 m_pFactory->CreateNode(XFA_XDPPACKET_Xdc, XFA_Element::Xdc); 818
772 if (!pNode) { 819 CXFA_Node* pNode =
773 return nullptr; 820 m_pFactory->CreateNode(XFA_XDPPACKET_Xdc, XFA_Element::Xdc);
774 } 821 if (!pNode)
775 pNode->SetCData(XFA_ATTRIBUTE_Name, 822 return nullptr;
776 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName); 823
777 pNode->SetXMLMappingNode(pXMLDocumentNode); 824 pNode->SetCData(XFA_ATTRIBUTE_Name,
778 return pNode; 825 XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName);
779 } 826 pNode->SetXMLMappingNode(pXMLDocumentNode);
780 return nullptr; 827 return pNode;
781 } 828 }
782 829
783 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_User( 830 CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_User(
784 CFDE_XMLNode* pXMLDocumentNode, 831 CFDE_XMLNode* pXMLDocumentNode,
785 XFA_XDPPACKET ePacketID) { 832 XFA_XDPPACKET ePacketID) {
786 CXFA_Node* pNode = 833 CXFA_Node* pNode =
787 m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_Element::Packet); 834 m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_Element::Packet);
788 if (!pNode) { 835 if (!pNode)
789 return nullptr; 836 return nullptr;
790 } 837
791 CFX_WideString wsName; 838 CFX_WideString wsName;
792 static_cast<CFDE_XMLElement*>(pXMLDocumentNode)->GetLocalTagName(wsName); 839 static_cast<CFDE_XMLElement*>(pXMLDocumentNode)->GetLocalTagName(wsName);
793 pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); 840 pNode->SetCData(XFA_ATTRIBUTE_Name, wsName);
794 if (!UserPacketLoader(pNode, pXMLDocumentNode)) { 841 if (!UserPacketLoader(pNode, pXMLDocumentNode))
795 return nullptr; 842 return nullptr;
796 } 843
797 pNode->SetXMLMappingNode(pXMLDocumentNode); 844 pNode->SetXMLMappingNode(pXMLDocumentNode);
798 return pNode; 845 return pNode;
799 } 846 }
800 847
801 CXFA_Node* CXFA_SimpleParser::UserPacketLoader(CXFA_Node* pXFANode, 848 CXFA_Node* CXFA_SimpleParser::UserPacketLoader(CXFA_Node* pXFANode,
802 CFDE_XMLNode* pXMLDoc) { 849 CFDE_XMLNode* pXMLDoc) {
803 return pXFANode; 850 return pXFANode;
804 } 851 }
805 852
806 static FX_BOOL XFA_FDEExtension_IsStringAllWhitespace(CFX_WideString wsText) {
807 wsText.TrimRight(L"\x20\x9\xD\xA");
808 return wsText.IsEmpty();
809 }
810
811 CXFA_Node* CXFA_SimpleParser::DataLoader(CXFA_Node* pXFANode, 853 CXFA_Node* CXFA_SimpleParser::DataLoader(CXFA_Node* pXFANode,
812 CFDE_XMLNode* pXMLDoc, 854 CFDE_XMLNode* pXMLDoc,
813 FX_BOOL bDoTransform) { 855 FX_BOOL bDoTransform) {
814 ParseDataGroup(pXFANode, pXMLDoc, XFA_XDPPACKET_Datasets); 856 ParseDataGroup(pXFANode, pXMLDoc, XFA_XDPPACKET_Datasets);
815 return pXFANode; 857 return pXFANode;
816 } 858 }
817 859
818 CXFA_Node* CXFA_SimpleParser::NormalLoader(CXFA_Node* pXFANode, 860 CXFA_Node* CXFA_SimpleParser::NormalLoader(CXFA_Node* pXFANode,
819 CFDE_XMLNode* pXMLDoc, 861 CFDE_XMLNode* pXMLDoc,
820 XFA_XDPPACKET ePacketID, 862 XFA_XDPPACKET ePacketID,
821 FX_BOOL bUseAttribute) { 863 FX_BOOL bUseAttribute) {
822 FX_BOOL bOneOfPropertyFound = FALSE; 864 FX_BOOL bOneOfPropertyFound = FALSE;
823 for (CFDE_XMLNode* pXMLChild = pXMLDoc->GetNodeItem(CFDE_XMLNode::FirstChild); 865 for (CFDE_XMLNode* pXMLChild = pXMLDoc->GetNodeItem(CFDE_XMLNode::FirstChild);
824 pXMLChild; 866 pXMLChild;
825 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) { 867 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
826 switch (pXMLChild->GetType()) { 868 switch (pXMLChild->GetType()) {
827 case FDE_XMLNODE_Element: { 869 case FDE_XMLNODE_Element: {
828 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLChild); 870 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLChild);
829 CFX_WideString wsTagName; 871 CFX_WideString wsTagName;
830 pXMLElement->GetLocalTagName(wsTagName); 872 pXMLElement->GetLocalTagName(wsTagName);
831 XFA_Element eType = XFA_GetElementTypeForName(wsTagName.AsStringC()); 873 XFA_Element eType = XFA_GetElementTypeForName(wsTagName.AsStringC());
832 if (eType == XFA_Element::Unknown) 874 if (eType == XFA_Element::Unknown)
833 continue; 875 continue;
834 876
835 const XFA_PROPERTY* pPropertyInfo = XFA_GetPropertyOfElement( 877 const XFA_PROPERTY* pPropertyInfo = XFA_GetPropertyOfElement(
836 pXFANode->GetElementType(), eType, ePacketID); 878 pXFANode->GetElementType(), eType, ePacketID);
837 if (pPropertyInfo && 879 if (pPropertyInfo &&
838 ((pPropertyInfo->uFlags & 880 ((pPropertyInfo->uFlags &
839 (XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf)) != 0)) { 881 (XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf)) != 0)) {
840 if (bOneOfPropertyFound) { 882 if (bOneOfPropertyFound)
841 break; 883 break;
842 } 884
843 bOneOfPropertyFound = TRUE; 885 bOneOfPropertyFound = TRUE;
844 } 886 }
845 CXFA_Node* pXFAChild = m_pFactory->CreateNode(ePacketID, eType); 887 CXFA_Node* pXFAChild = m_pFactory->CreateNode(ePacketID, eType);
846 if (!pXFAChild) 888 if (!pXFAChild)
847 return nullptr; 889 return nullptr;
848 if (ePacketID == XFA_XDPPACKET_Config) 890 if (ePacketID == XFA_XDPPACKET_Config)
849 pXFAChild->SetAttribute(XFA_ATTRIBUTE_Name, wsTagName.AsStringC()); 891 pXFAChild->SetAttribute(XFA_ATTRIBUTE_Name, wsTagName.AsStringC());
850 892
851 FX_BOOL IsNeedValue = TRUE; 893 FX_BOOL IsNeedValue = TRUE;
852 for (int32_t i = 0, count = pXMLElement->CountAttributes(); i < count; 894 for (int32_t i = 0, count = pXMLElement->CountAttributes(); i < count;
853 i++) { 895 i++) {
854 CFX_WideString wsAttrQualifiedName; 896 CFX_WideString wsAttrQualifiedName;
855 CFX_WideString wsAttrName; 897 CFX_WideString wsAttrName;
856 CFX_WideString wsAttrValue; 898 CFX_WideString wsAttrValue;
857 pXMLElement->GetAttribute(i, wsAttrQualifiedName, wsAttrValue); 899 pXMLElement->GetAttribute(i, wsAttrQualifiedName, wsAttrValue);
858 XFA_FDEExtension_GetAttributeLocalName( 900 GetAttributeLocalName(wsAttrQualifiedName.AsStringC(), wsAttrName);
859 wsAttrQualifiedName.AsStringC(), wsAttrName);
860 if (wsAttrName == FX_WSTRC(L"nil") && 901 if (wsAttrName == FX_WSTRC(L"nil") &&
861 wsAttrValue == FX_WSTRC(L"true")) { 902 wsAttrValue == FX_WSTRC(L"true")) {
862 IsNeedValue = FALSE; 903 IsNeedValue = FALSE;
863 } 904 }
864 const XFA_ATTRIBUTEINFO* lpAttrInfo = 905 const XFA_ATTRIBUTEINFO* lpAttrInfo =
865 XFA_GetAttributeByName(wsAttrName.AsStringC()); 906 XFA_GetAttributeByName(wsAttrName.AsStringC());
866 if (!lpAttrInfo) { 907 if (!lpAttrInfo)
867 continue; 908 continue;
868 } 909
869 if (!bUseAttribute && lpAttrInfo->eName != XFA_ATTRIBUTE_Name && 910 if (!bUseAttribute && lpAttrInfo->eName != XFA_ATTRIBUTE_Name &&
870 lpAttrInfo->eName != XFA_ATTRIBUTE_Save) { 911 lpAttrInfo->eName != XFA_ATTRIBUTE_Save) {
871 continue; 912 continue;
872 } 913 }
873 pXFAChild->SetAttribute(lpAttrInfo->eName, wsAttrValue.AsStringC()); 914 pXFAChild->SetAttribute(lpAttrInfo->eName, wsAttrValue.AsStringC());
874 } 915 }
875 pXFANode->InsertChild(pXFAChild); 916 pXFANode->InsertChild(pXFAChild);
876 if (eType == XFA_Element::Validate || eType == XFA_Element::Locale) { 917 if (eType == XFA_Element::Validate || eType == XFA_Element::Locale) {
877 if (ePacketID == XFA_XDPPACKET_Config) { 918 if (ePacketID == XFA_XDPPACKET_Config)
878 ParseContentNode(pXFAChild, pXMLElement, ePacketID); 919 ParseContentNode(pXFAChild, pXMLElement, ePacketID);
879 } else { 920 else
880 NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute); 921 NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute);
881 } 922
882 break; 923 break;
883 } 924 }
884 switch (pXFAChild->GetObjectType()) { 925 switch (pXFAChild->GetObjectType()) {
885 case XFA_ObjectType::ContentNode: 926 case XFA_ObjectType::ContentNode:
886 case XFA_ObjectType::TextNode: 927 case XFA_ObjectType::TextNode:
887 case XFA_ObjectType::NodeC: 928 case XFA_ObjectType::NodeC:
888 case XFA_ObjectType::NodeV: 929 case XFA_ObjectType::NodeV:
889 if (IsNeedValue) { 930 if (IsNeedValue)
890 ParseContentNode(pXFAChild, pXMLElement, ePacketID); 931 ParseContentNode(pXFAChild, pXMLElement, ePacketID);
891 }
892 break; 932 break;
893 default: 933 default:
894 NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute); 934 NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute);
895 break; 935 break;
896 } 936 }
897 } break; 937 } break;
898 case FDE_XMLNODE_Instruction: 938 case FDE_XMLNODE_Instruction:
899 ParseInstruction(pXFANode, static_cast<CFDE_XMLInstruction*>(pXMLChild), 939 ParseInstruction(pXFANode, static_cast<CFDE_XMLInstruction*>(pXMLChild),
900 ePacketID); 940 ePacketID);
901 break; 941 break;
902 default: 942 default:
903 break; 943 break;
904 } 944 }
905 } 945 }
906 return pXFANode; 946 return pXFANode;
907 } 947 }
908 948
909 FX_BOOL XFA_RecognizeRichText(CFDE_XMLElement* pRichTextXMLNode) {
910 if (pRichTextXMLNode) {
911 CFX_WideString wsNamespaceURI;
912 XFA_FDEExtension_GetElementTagNamespaceURI(pRichTextXMLNode,
913 wsNamespaceURI);
914 if (wsNamespaceURI == FX_WSTRC(L"http://www.w3.org/1999/xhtml")) {
915 return TRUE;
916 }
917 }
918 return FALSE;
919 }
920
921 class RichTextNodeVisitor {
922 public:
923 static inline CFDE_XMLNode* GetFirstChild(CFDE_XMLNode* pNode) {
924 return pNode->GetNodeItem(CFDE_XMLNode::FirstChild);
925 }
926 static inline CFDE_XMLNode* GetNextSibling(CFDE_XMLNode* pNode) {
927 return pNode->GetNodeItem(CFDE_XMLNode::NextSibling);
928 }
929 static inline CFDE_XMLNode* GetParent(CFDE_XMLNode* pNode) {
930 return pNode->GetNodeItem(CFDE_XMLNode::Parent);
931 }
932 };
933
934 void XFA_ConvertXMLToPlainText(CFDE_XMLElement* pRootXMLNode,
935 CFX_WideString& wsOutput) {
936 for (CFDE_XMLNode* pXMLChild =
937 pRootXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
938 pXMLChild;
939 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
940 switch (pXMLChild->GetType()) {
941 case FDE_XMLNODE_Element: {
942 CFX_WideString wsTextData;
943 static_cast<CFDE_XMLElement*>(pXMLChild)->GetTextData(wsTextData);
944 wsTextData += FX_WSTRC(L"\n");
945 wsOutput += wsTextData;
946 } break;
947 case FDE_XMLNODE_Text: {
948 CFX_WideString wsText;
949 static_cast<CFDE_XMLText*>(pXMLChild)->GetText(wsText);
950 if (XFA_FDEExtension_IsStringAllWhitespace(wsText)) {
951 continue;
952 } else {
953 wsOutput = wsText;
954 }
955 } break;
956 case FDE_XMLNODE_CharData: {
957 CFX_WideString wsCharData;
958 static_cast<CFDE_XMLCharData*>(pXMLChild)->GetCharData(wsCharData);
959 if (XFA_FDEExtension_IsStringAllWhitespace(wsCharData)) {
960 continue;
961 } else {
962 wsOutput = wsCharData;
963 }
964 } break;
965 default:
966 ASSERT(FALSE);
967 break;
968 }
969 }
970 }
971
972 void CXFA_SimpleParser::ParseContentNode(CXFA_Node* pXFANode, 949 void CXFA_SimpleParser::ParseContentNode(CXFA_Node* pXFANode,
973 CFDE_XMLNode* pXMLNode, 950 CFDE_XMLNode* pXMLNode,
974 XFA_XDPPACKET ePacketID) { 951 XFA_XDPPACKET ePacketID) {
975 XFA_Element element = XFA_Element::Sharptext; 952 XFA_Element element = XFA_Element::Sharptext;
976 if (pXFANode->GetElementType() == XFA_Element::ExData) { 953 if (pXFANode->GetElementType() == XFA_Element::ExData) {
977 CFX_WideStringC wsContentType = 954 CFX_WideStringC wsContentType =
978 pXFANode->GetCData(XFA_ATTRIBUTE_ContentType); 955 pXFANode->GetCData(XFA_ATTRIBUTE_ContentType);
979 if (wsContentType == FX_WSTRC(L"text/html")) 956 if (wsContentType == FX_WSTRC(L"text/html"))
980 element = XFA_Element::SharpxHTML; 957 element = XFA_Element::SharpxHTML;
981 else if (wsContentType == FX_WSTRC(L"text/xml")) 958 else if (wsContentType == FX_WSTRC(L"text/xml"))
(...skipping 14 matching lines...) Expand all
996 if (element == XFA_Element::SharpxHTML) { 973 if (element == XFA_Element::SharpxHTML) {
997 if (eNodeType != FDE_XMLNODE_Element) 974 if (eNodeType != FDE_XMLNODE_Element)
998 break; 975 break;
999 976
1000 if (XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLChild))) 977 if (XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLChild)))
1001 XFA_GetPlainTextFromRichText(static_cast<CFDE_XMLElement*>(pXMLChild), 978 XFA_GetPlainTextFromRichText(static_cast<CFDE_XMLElement*>(pXMLChild),
1002 wsValue); 979 wsValue);
1003 } else if (element == XFA_Element::Sharpxml) { 980 } else if (element == XFA_Element::Sharpxml) {
1004 if (eNodeType != FDE_XMLNODE_Element) 981 if (eNodeType != FDE_XMLNODE_Element)
1005 break; 982 break;
1006 XFA_ConvertXMLToPlainText(static_cast<CFDE_XMLElement*>(pXMLChild), 983
1007 wsValue); 984 ConvertXMLToPlainText(static_cast<CFDE_XMLElement*>(pXMLChild), wsValue);
1008 } else { 985 } else {
1009 if (eNodeType == FDE_XMLNODE_Element) 986 if (eNodeType == FDE_XMLNODE_Element)
1010 break; 987 break;
1011 if (eNodeType == FDE_XMLNODE_Text) 988 if (eNodeType == FDE_XMLNODE_Text)
1012 static_cast<CFDE_XMLText*>(pXMLChild)->GetText(wsValue); 989 static_cast<CFDE_XMLText*>(pXMLChild)->GetText(wsValue);
1013 else if (eNodeType == FDE_XMLNODE_CharData) 990 else if (eNodeType == FDE_XMLNODE_CharData)
1014 static_cast<CFDE_XMLCharData*>(pXMLChild)->GetCharData(wsValue); 991 static_cast<CFDE_XMLCharData*>(pXMLChild)->GetCharData(wsValue);
1015 } 992 }
1016 break; 993 break;
1017 } 994 }
(...skipping 15 matching lines...) Expand all
1033 XFA_XDPPACKET ePacketID) { 1010 XFA_XDPPACKET ePacketID) {
1034 for (CFDE_XMLNode* pXMLChild = 1011 for (CFDE_XMLNode* pXMLChild =
1035 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild); 1012 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
1036 pXMLChild; 1013 pXMLChild;
1037 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) { 1014 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
1038 switch (pXMLChild->GetType()) { 1015 switch (pXMLChild->GetType()) {
1039 case FDE_XMLNODE_Element: { 1016 case FDE_XMLNODE_Element: {
1040 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLChild); 1017 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLChild);
1041 { 1018 {
1042 CFX_WideString wsNamespaceURI; 1019 CFX_WideString wsNamespaceURI;
1043 XFA_FDEExtension_GetElementTagNamespaceURI(pXMLElement, 1020 GetElementTagNamespaceURI(pXMLElement, wsNamespaceURI);
1044 wsNamespaceURI);
1045 if (wsNamespaceURI == 1021 if (wsNamespaceURI ==
1046 FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") || 1022 FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") ||
1047 wsNamespaceURI == 1023 wsNamespaceURI ==
1048 FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") || 1024 FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") ||
1049 wsNamespaceURI == 1025 wsNamespaceURI ==
1050 FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance")) { 1026 FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance")) {
1051 continue; 1027 continue;
1052 } 1028 }
1053 } 1029 }
1030
1054 XFA_Element eNodeType = XFA_Element::DataModel; 1031 XFA_Element eNodeType = XFA_Element::DataModel;
1055 if (eNodeType == XFA_Element::DataModel) { 1032 if (eNodeType == XFA_Element::DataModel) {
1056 CFX_WideString wsDataNodeAttr; 1033 CFX_WideString wsDataNodeAttr;
1057 if (XFA_FDEExtension_FindAttributeWithNS( 1034 if (FindAttributeWithNS(
1058 pXMLElement, FX_WSTRC(L"dataNode"), 1035 pXMLElement, FX_WSTRC(L"dataNode"),
1059 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"), 1036 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"),
1060 wsDataNodeAttr)) { 1037 wsDataNodeAttr)) {
1061 if (wsDataNodeAttr == FX_WSTRC(L"dataGroup")) { 1038 if (wsDataNodeAttr == FX_WSTRC(L"dataGroup"))
1062 eNodeType = XFA_Element::DataGroup; 1039 eNodeType = XFA_Element::DataGroup;
1063 } else if (wsDataNodeAttr == FX_WSTRC(L"dataValue")) { 1040 else if (wsDataNodeAttr == FX_WSTRC(L"dataValue"))
1064 eNodeType = XFA_Element::DataValue; 1041 eNodeType = XFA_Element::DataValue;
1065 }
1066 } 1042 }
1067 } 1043 }
1068 CFX_WideString wsContentType; 1044 CFX_WideString wsContentType;
1069 if (eNodeType == XFA_Element::DataModel) { 1045 if (eNodeType == XFA_Element::DataModel) {
1070 if (XFA_FDEExtension_FindAttributeWithNS( 1046 if (FindAttributeWithNS(
1071 pXMLElement, FX_WSTRC(L"contentType"), 1047 pXMLElement, FX_WSTRC(L"contentType"),
1072 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"), 1048 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"),
1073 wsContentType)) { 1049 wsContentType)) {
1074 if (!wsContentType.IsEmpty()) { 1050 if (!wsContentType.IsEmpty())
1075 eNodeType = XFA_Element::DataValue; 1051 eNodeType = XFA_Element::DataValue;
1076 }
1077 } 1052 }
1078 } 1053 }
1079 if (eNodeType == XFA_Element::DataModel) { 1054 if (eNodeType == XFA_Element::DataModel) {
1080 for (CFDE_XMLNode* pXMLDataChild = 1055 for (CFDE_XMLNode* pXMLDataChild =
1081 pXMLElement->GetNodeItem(CFDE_XMLNode::FirstChild); 1056 pXMLElement->GetNodeItem(CFDE_XMLNode::FirstChild);
1082 pXMLDataChild; pXMLDataChild = pXMLDataChild->GetNodeItem( 1057 pXMLDataChild; pXMLDataChild = pXMLDataChild->GetNodeItem(
1083 CFDE_XMLNode::NextSibling)) { 1058 CFDE_XMLNode::NextSibling)) {
1084 if (pXMLDataChild->GetType() == FDE_XMLNODE_Element) { 1059 if (pXMLDataChild->GetType() == FDE_XMLNODE_Element) {
1085 if (!XFA_RecognizeRichText( 1060 if (!XFA_RecognizeRichText(
1086 static_cast<CFDE_XMLElement*>(pXMLDataChild))) { 1061 static_cast<CFDE_XMLElement*>(pXMLDataChild))) {
1087 eNodeType = XFA_Element::DataGroup; 1062 eNodeType = XFA_Element::DataGroup;
1088 break; 1063 break;
1089 } 1064 }
1090 } 1065 }
1091 } 1066 }
1092 } 1067 }
1093 if (eNodeType == XFA_Element::DataModel) { 1068 if (eNodeType == XFA_Element::DataModel)
1094 eNodeType = XFA_Element::DataValue; 1069 eNodeType = XFA_Element::DataValue;
1095 } 1070
1096 CXFA_Node* pXFAChild = 1071 CXFA_Node* pXFAChild =
1097 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, eNodeType); 1072 m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, eNodeType);
1098 if (!pXFAChild) { 1073 if (!pXFAChild)
1099 return; 1074 return;
1100 } 1075
1101 CFX_WideString wsNodeName; 1076 CFX_WideString wsNodeName;
1102 pXMLElement->GetLocalTagName(wsNodeName); 1077 pXMLElement->GetLocalTagName(wsNodeName);
1103 pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeName); 1078 pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeName);
1104 bool bNeedValue = true; 1079 bool bNeedValue = true;
1105 for (int32_t i = 0; i < pXMLElement->CountAttributes(); ++i) { 1080 for (int32_t i = 0; i < pXMLElement->CountAttributes(); ++i) {
1106 CFX_WideString wsQualifiedName; 1081 CFX_WideString wsQualifiedName;
1107 CFX_WideString wsValue; 1082 CFX_WideString wsValue;
1108 CFX_WideString wsName; 1083 CFX_WideString wsName;
1109 CFX_WideString wsNS; 1084 CFX_WideString wsNS;
1110 pXMLElement->GetAttribute(i, wsQualifiedName, wsValue); 1085 pXMLElement->GetAttribute(i, wsQualifiedName, wsValue);
1111 if (!XFA_FDEExtension_ResolveAttribute( 1086 if (!ResolveAttribute(pXMLElement, wsQualifiedName.AsStringC(),
1112 pXMLElement, wsQualifiedName.AsStringC(), wsName, wsNS)) { 1087 wsName, wsNS)) {
1113 continue; 1088 continue;
1114 } 1089 }
1115 if (wsName == FX_WSTRC(L"nil") && wsValue == FX_WSTRC(L"true")) { 1090 if (wsName == FX_WSTRC(L"nil") && wsValue == FX_WSTRC(L"true")) {
1116 bNeedValue = false; 1091 bNeedValue = false;
1117 continue; 1092 continue;
1118 } 1093 }
1119 if (wsNS == FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") || 1094 if (wsNS == FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") ||
1120 wsNS == FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") || 1095 wsNS == FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") ||
1121 wsNS == FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance") || 1096 wsNS == FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance") ||
1122 wsNS == FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")) { 1097 wsNS == FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")) {
1123 continue; 1098 continue;
1124 } 1099 }
1125 CXFA_Node* pXFAMetaData = m_pFactory->CreateNode( 1100 CXFA_Node* pXFAMetaData = m_pFactory->CreateNode(
1126 XFA_XDPPACKET_Datasets, XFA_Element::DataValue); 1101 XFA_XDPPACKET_Datasets, XFA_Element::DataValue);
1127 if (!pXFAMetaData) { 1102 if (!pXFAMetaData)
1128 return; 1103 return;
1129 } 1104
1130 pXFAMetaData->SetCData(XFA_ATTRIBUTE_Name, wsName); 1105 pXFAMetaData->SetCData(XFA_ATTRIBUTE_Name, wsName);
1131 pXFAMetaData->SetCData(XFA_ATTRIBUTE_QualifiedName, wsQualifiedName); 1106 pXFAMetaData->SetCData(XFA_ATTRIBUTE_QualifiedName, wsQualifiedName);
1132 pXFAMetaData->SetCData(XFA_ATTRIBUTE_Value, wsValue); 1107 pXFAMetaData->SetCData(XFA_ATTRIBUTE_Value, wsValue);
1133 pXFAMetaData->SetEnum(XFA_ATTRIBUTE_Contains, 1108 pXFAMetaData->SetEnum(XFA_ATTRIBUTE_Contains,
1134 XFA_ATTRIBUTEENUM_MetaData); 1109 XFA_ATTRIBUTEENUM_MetaData);
1135 pXFAChild->InsertChild(pXFAMetaData); 1110 pXFAChild->InsertChild(pXFAMetaData);
1136 pXFAMetaData->SetXMLMappingNode(pXMLElement); 1111 pXFAMetaData->SetXMLMappingNode(pXMLElement);
1137 pXFAMetaData->SetFlag(XFA_NodeFlag_Initialized, false); 1112 pXFAMetaData->SetFlag(XFA_NodeFlag_Initialized, false);
1138 } 1113 }
1114
1139 if (!bNeedValue) { 1115 if (!bNeedValue) {
1140 CFX_WideString wsNilName(L"xsi:nil"); 1116 CFX_WideString wsNilName(L"xsi:nil");
1141 pXMLElement->RemoveAttribute(wsNilName.c_str()); 1117 pXMLElement->RemoveAttribute(wsNilName.c_str());
1142 } 1118 }
1143 pXFANode->InsertChild(pXFAChild); 1119 pXFANode->InsertChild(pXFAChild);
1144 if (eNodeType == XFA_Element::DataGroup) { 1120 if (eNodeType == XFA_Element::DataGroup)
1145 ParseDataGroup(pXFAChild, pXMLElement, ePacketID); 1121 ParseDataGroup(pXFAChild, pXMLElement, ePacketID);
1146 } else if (bNeedValue) { 1122 else if (bNeedValue)
1147 ParseDataValue(pXFAChild, pXMLChild, XFA_XDPPACKET_Datasets); 1123 ParseDataValue(pXFAChild, pXMLChild, XFA_XDPPACKET_Datasets);
1148 } 1124
1149 pXFAChild->SetXMLMappingNode(pXMLElement); 1125 pXFAChild->SetXMLMappingNode(pXMLElement);
1150 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false); 1126 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
1151 continue; 1127 continue;
1152 } 1128 }
1153 case FDE_XMLNODE_CharData: { 1129 case FDE_XMLNODE_CharData: {
1154 CFDE_XMLCharData* pXMLCharData = 1130 CFDE_XMLCharData* pXMLCharData =
1155 static_cast<CFDE_XMLCharData*>(pXMLChild); 1131 static_cast<CFDE_XMLCharData*>(pXMLChild);
1156 CFX_WideString wsCharData; 1132 CFX_WideString wsCharData;
1157 pXMLCharData->GetCharData(wsCharData); 1133 pXMLCharData->GetCharData(wsCharData);
1158 if (XFA_FDEExtension_IsStringAllWhitespace(wsCharData)) { 1134 if (IsStringAllWhitespace(wsCharData))
1159 continue; 1135 continue;
1160 } 1136
1161 CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, 1137 CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets,
1162 XFA_Element::DataValue); 1138 XFA_Element::DataValue);
1163 if (!pXFAChild) { 1139 if (!pXFAChild)
1164 return; 1140 return;
1165 } 1141
1166 pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsCharData); 1142 pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsCharData);
1167 pXFANode->InsertChild(pXFAChild); 1143 pXFANode->InsertChild(pXFAChild);
1168 pXFAChild->SetXMLMappingNode(pXMLCharData); 1144 pXFAChild->SetXMLMappingNode(pXMLCharData);
1169 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false); 1145 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
1170 continue; 1146 continue;
1171 } 1147 }
1172 case FDE_XMLNODE_Text: { 1148 case FDE_XMLNODE_Text: {
1173 CFDE_XMLText* pXMLText = static_cast<CFDE_XMLText*>(pXMLChild); 1149 CFDE_XMLText* pXMLText = static_cast<CFDE_XMLText*>(pXMLChild);
1174 CFX_WideString wsText; 1150 CFX_WideString wsText;
1175 pXMLText->GetText(wsText); 1151 pXMLText->GetText(wsText);
1176 if (XFA_FDEExtension_IsStringAllWhitespace(wsText)) { 1152 if (IsStringAllWhitespace(wsText))
1177 continue; 1153 continue;
1178 } 1154
1179 CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, 1155 CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets,
1180 XFA_Element::DataValue); 1156 XFA_Element::DataValue);
1181 if (!pXFAChild) { 1157 if (!pXFAChild)
1182 return; 1158 return;
1183 } 1159
1184 pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsText); 1160 pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsText);
1185 pXFANode->InsertChild(pXFAChild); 1161 pXFANode->InsertChild(pXFAChild);
1186 pXFAChild->SetXMLMappingNode(pXMLText); 1162 pXFAChild->SetXMLMappingNode(pXMLText);
1187 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false); 1163 pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
1188 continue; 1164 continue;
1189 } 1165 }
1190 default: 1166 default:
1191 continue; 1167 continue;
1192 } 1168 }
1193 } 1169 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 } 1261 }
1286 pXMLCurValueNode = nullptr; 1262 pXMLCurValueNode = nullptr;
1287 } 1263 }
1288 CFX_WideString wsNodeValue = wsValueTextBuf.MakeString(); 1264 CFX_WideString wsNodeValue = wsValueTextBuf.MakeString();
1289 pXFANode->SetCData(XFA_ATTRIBUTE_Value, wsNodeValue); 1265 pXFANode->SetCData(XFA_ATTRIBUTE_Value, wsNodeValue);
1290 } 1266 }
1291 1267
1292 void CXFA_SimpleParser::ParseInstruction(CXFA_Node* pXFANode, 1268 void CXFA_SimpleParser::ParseInstruction(CXFA_Node* pXFANode,
1293 CFDE_XMLInstruction* pXMLInstruction, 1269 CFDE_XMLInstruction* pXMLInstruction,
1294 XFA_XDPPACKET ePacketID) { 1270 XFA_XDPPACKET ePacketID) {
1295 if (!m_bDocumentParser) { 1271 if (!m_bDocumentParser)
1296 return; 1272 return;
1297 } 1273
1298 CFX_WideString wsTargetName; 1274 CFX_WideString wsTargetName;
1299 pXMLInstruction->GetTargetName(wsTargetName); 1275 pXMLInstruction->GetTargetName(wsTargetName);
1300 if (wsTargetName == FX_WSTRC(L"originalXFAVersion")) { 1276 if (wsTargetName == FX_WSTRC(L"originalXFAVersion")) {
1301 CFX_WideString wsData; 1277 CFX_WideString wsData;
1302 if (pXMLInstruction->GetData(0, wsData) && 1278 if (pXMLInstruction->GetData(0, wsData) &&
1303 (pXFANode->GetDocument()->RecognizeXFAVersionNumber(wsData) != 1279 (pXFANode->GetDocument()->RecognizeXFAVersionNumber(wsData) !=
1304 XFA_VERSION_UNKNOWN)) { 1280 XFA_VERSION_UNKNOWN)) {
1305 wsData.clear(); 1281 wsData.clear();
1306 if (pXMLInstruction->GetData(1, wsData) && 1282 if (pXMLInstruction->GetData(1, wsData) &&
1307 wsData == FX_WSTRC(L"v2.7-scripting:1")) { 1283 wsData == FX_WSTRC(L"v2.7-scripting:1")) {
1308 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, TRUE); 1284 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, TRUE);
1309 } 1285 }
1310 } 1286 }
1311 } else if (wsTargetName == FX_WSTRC(L"acrobat")) { 1287 } else if (wsTargetName == FX_WSTRC(L"acrobat")) {
1312 CFX_WideString wsData; 1288 CFX_WideString wsData;
1313 if (pXMLInstruction->GetData(0, wsData) && 1289 if (pXMLInstruction->GetData(0, wsData) &&
1314 wsData == FX_WSTRC(L"JavaScript")) { 1290 wsData == FX_WSTRC(L"JavaScript")) {
1315 if (pXMLInstruction->GetData(1, wsData) && 1291 if (pXMLInstruction->GetData(1, wsData) &&
1316 wsData == FX_WSTRC(L"strictScoping")) { 1292 wsData == FX_WSTRC(L"strictScoping")) {
1317 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_StrictScoping, TRUE); 1293 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_StrictScoping, TRUE);
1318 } 1294 }
1319 } 1295 }
1320 } 1296 }
1321 } 1297 }
1322 1298
1323 void CXFA_SimpleParser::CloseParser() { 1299 void CXFA_SimpleParser::CloseParser() {
1324 m_pXMLDoc.reset(); 1300 m_pXMLDoc.reset();
1325 m_pStream.reset(); 1301 m_pStream.reset();
1326 } 1302 }
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