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

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

Issue 2123133004: Remove IXFA_Parser, cleanup XFA parser code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/parser/xfa_parser_imp.h ('k') | xfa/fxfa/parser/xfa_script_datawindow.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fxfa/parser/xfa_parser_imp.h" 7 #include "xfa/fxfa/parser/xfa_parser_imp.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "xfa/fde/xml/fde_xml_imp.h" 11 #include "xfa/fde/xml/fde_xml_imp.h"
12 #include "xfa/fgas/crt/fgas_codepage.h" 12 #include "xfa/fgas/crt/fgas_codepage.h"
13 #include "xfa/fxfa/include/xfa_checksum.h" 13 #include "xfa/fxfa/include/xfa_checksum.h"
14 #include "xfa/fxfa/parser/xfa_basic_imp.h" 14 #include "xfa/fxfa/parser/xfa_basic_imp.h"
15 #include "xfa/fxfa/parser/xfa_doclayout.h" 15 #include "xfa/fxfa/parser/xfa_doclayout.h"
16 #include "xfa/fxfa/parser/xfa_document.h" 16 #include "xfa/fxfa/parser/xfa_document.h"
17 #include "xfa/fxfa/parser/xfa_localemgr.h" 17 #include "xfa/fxfa/parser/xfa_localemgr.h"
18 #include "xfa/fxfa/parser/xfa_object.h" 18 #include "xfa/fxfa/parser/xfa_object.h"
19 #include "xfa/fxfa/parser/xfa_parser.h"
20 #include "xfa/fxfa/parser/xfa_script.h" 19 #include "xfa/fxfa/parser/xfa_script.h"
21 #include "xfa/fxfa/parser/xfa_utils.h" 20 #include "xfa/fxfa/parser/xfa_utils.h"
22 21
23 IXFA_Parser* IXFA_Parser::Create(CXFA_Document* pFactory,
24 FX_BOOL bDocumentParser) {
25 return new CXFA_SimpleParser(pFactory, bDocumentParser);
26 }
27 CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory, 22 CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory,
28 FX_BOOL bDocumentParser) 23 bool bDocumentParser)
29 : m_pXMLParser(nullptr), 24 : m_pXMLParser(nullptr),
30 m_pXMLDoc(nullptr), 25 m_pXMLDoc(nullptr),
31 m_pStream(nullptr), 26 m_pStream(nullptr),
32 m_pFileRead(nullptr), 27 m_pFileRead(nullptr),
33 m_pFactory(pFactory), 28 m_pFactory(pFactory),
34 m_pRootNode(nullptr), 29 m_pRootNode(nullptr),
35 m_ePacketID(XFA_XDPPACKET_UNKNOWN), 30 m_ePacketID(XFA_XDPPACKET_UNKNOWN),
36 m_bDocumentParser(bDocumentParser) {} 31 m_bDocumentParser(bDocumentParser) {}
32
37 CXFA_SimpleParser::~CXFA_SimpleParser() { 33 CXFA_SimpleParser::~CXFA_SimpleParser() {
38 CloseParser(); 34 CloseParser();
39 } 35 }
40 void CXFA_SimpleParser::Release() { 36
41 delete this;
42 }
43 void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) { 37 void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) {
44 m_pFactory = pFactory; 38 m_pFactory = pFactory;
45 } 39 }
40
46 static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode( 41 static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode(
47 CFDE_XMLDoc* pXMLDoc, 42 CFDE_XMLDoc* pXMLDoc,
48 FX_BOOL bVerifyWellFormness = FALSE) { 43 FX_BOOL bVerifyWellFormness = FALSE) {
49 if (!pXMLDoc) { 44 if (!pXMLDoc) {
50 return nullptr; 45 return nullptr;
51 } 46 }
52 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot(); 47 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot();
53 for (CFDE_XMLNode* pXMLNode = 48 for (CFDE_XMLNode* pXMLNode =
54 pXMLFakeRoot->GetNodeItem(CFDE_XMLNode::FirstChild); 49 pXMLFakeRoot->GetNodeItem(CFDE_XMLNode::FirstChild);
55 pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) { 50 pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 m_pRootNode = DataLoader(pXFANode, pXMLNode, TRUE); 182 m_pRootNode = DataLoader(pXFANode, pXMLNode, TRUE);
188 } 183 }
189 } else if (pXFANode->IsContentNode()) { 184 } else if (pXFANode->IsContentNode()) {
190 ParseContentNode(pXFANode, pXMLNode, ePacketID); 185 ParseContentNode(pXFANode, pXMLNode, ePacketID);
191 m_pRootNode = pXFANode; 186 m_pRootNode = pXFANode;
192 } else { 187 } else {
193 m_pRootNode = NormalLoader(pXFANode, pXMLNode, ePacketID); 188 m_pRootNode = NormalLoader(pXFANode, pXMLNode, ePacketID);
194 } 189 }
195 } 190 }
196 191
197 CXFA_Document* CXFA_SimpleParser::GetFactory() const {
198 return m_pFactory;
199 }
200
201 CXFA_Node* CXFA_SimpleParser::GetRootNode() const { 192 CXFA_Node* CXFA_SimpleParser::GetRootNode() const {
202 return m_pRootNode; 193 return m_pRootNode;
203 } 194 }
204 195
205 CFDE_XMLDoc* CXFA_SimpleParser::GetXMLDoc() const { 196 CFDE_XMLDoc* CXFA_SimpleParser::GetXMLDoc() const {
206 return m_pXMLDoc; 197 return m_pXMLDoc;
207 } 198 }
208 199
209 FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier( 200 FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier(
210 CFDE_XMLElement* pNode, 201 CFDE_XMLElement* pNode,
(...skipping 1117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 m_pXMLDoc = nullptr; 1319 m_pXMLDoc = nullptr;
1329 } 1320 }
1330 if (m_pStream) { 1321 if (m_pStream) {
1331 m_pStream->Release(); 1322 m_pStream->Release();
1332 m_pStream = nullptr; 1323 m_pStream = nullptr;
1333 } 1324 }
1334 } 1325 }
1335 1326
1336 CXFA_DocumentParser::CXFA_DocumentParser(CXFA_FFNotify* pNotify) 1327 CXFA_DocumentParser::CXFA_DocumentParser(CXFA_FFNotify* pNotify)
1337 : m_nodeParser(nullptr, TRUE), m_pNotify(pNotify), m_pDocument(nullptr) {} 1328 : m_nodeParser(nullptr, TRUE), m_pNotify(pNotify), m_pDocument(nullptr) {}
1329
1338 CXFA_DocumentParser::~CXFA_DocumentParser() { 1330 CXFA_DocumentParser::~CXFA_DocumentParser() {
1339 CloseParser(); 1331 CloseParser();
1340 } 1332 }
1341 1333
1342 void CXFA_DocumentParser::Release() {
1343 delete this;
1344 }
1345 int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream, 1334 int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream,
1346 XFA_XDPPACKET ePacketID) { 1335 XFA_XDPPACKET ePacketID) {
1347 CloseParser(); 1336 CloseParser();
1348 int32_t nRetStatus = m_nodeParser.StartParse(pStream, ePacketID); 1337 int32_t nRetStatus = m_nodeParser.StartParse(pStream, ePacketID);
1349 if (nRetStatus == XFA_PARSESTATUS_Ready) { 1338 if (nRetStatus == XFA_PARSESTATUS_Ready) {
1350 m_pDocument = new CXFA_Document(this); 1339 m_pDocument.reset(new CXFA_Document(this));
1351 m_nodeParser.SetFactory(m_pDocument); 1340 m_nodeParser.SetFactory(m_pDocument.get());
1352 } 1341 }
1353 return nRetStatus; 1342 return nRetStatus;
1354 } 1343 }
1344
1355 int32_t CXFA_DocumentParser::DoParse(IFX_Pause* pPause) { 1345 int32_t CXFA_DocumentParser::DoParse(IFX_Pause* pPause) {
1356 int32_t nRetStatus = m_nodeParser.DoParse(pPause); 1346 int32_t nRetStatus = m_nodeParser.DoParse(pPause);
1357 if (nRetStatus >= XFA_PARSESTATUS_Done) { 1347 if (nRetStatus >= XFA_PARSESTATUS_Done) {
1358 ASSERT(m_pDocument); 1348 ASSERT(m_pDocument);
1359 m_pDocument->SetRoot(m_nodeParser.GetRootNode()); 1349 m_pDocument->SetRoot(m_nodeParser.GetRootNode());
1360 } 1350 }
1361 return nRetStatus; 1351 return nRetStatus;
1362 } 1352 }
1363 int32_t CXFA_DocumentParser::ParseXMLData(const CFX_WideString& wsXML,
1364 CFDE_XMLNode*& pXMLNode,
1365 IFX_Pause* pPause) {
1366 CloseParser();
1367 int32_t nRetStatus = m_nodeParser.ParseXMLData(wsXML, pXMLNode, nullptr);
1368 if (nRetStatus == XFA_PARSESTATUS_Done && pXMLNode) {
1369 m_pDocument = new CXFA_Document(this);
1370 m_nodeParser.SetFactory(m_pDocument);
1371 }
1372 return nRetStatus;
1373 }
1374 void CXFA_DocumentParser::ConstructXFANode(CXFA_Node* pXFANode,
1375 CFDE_XMLNode* pXMLNode) {
1376 if (!pXFANode || !pXMLNode) {
1377 return;
1378 }
1379 m_nodeParser.ConstructXFANode(pXFANode, pXMLNode);
1380 CXFA_Node* pRootNode = m_nodeParser.GetRootNode();
1381 if (m_pDocument && pRootNode) {
1382 m_pDocument->SetRoot(pRootNode);
1383 }
1384 }
1385
1386 CXFA_Document* CXFA_DocumentParser::GetFactory() const {
1387 return m_nodeParser.GetFactory();
1388 }
1389
1390 CXFA_Node* CXFA_DocumentParser::GetRootNode() const {
1391 return m_nodeParser.GetRootNode();
1392 }
1393 1353
1394 CFDE_XMLDoc* CXFA_DocumentParser::GetXMLDoc() const { 1354 CFDE_XMLDoc* CXFA_DocumentParser::GetXMLDoc() const {
1395 return m_nodeParser.GetXMLDoc(); 1355 return m_nodeParser.GetXMLDoc();
1396 } 1356 }
1397 1357
1398 CXFA_FFNotify* CXFA_DocumentParser::GetNotify() const { 1358 CXFA_FFNotify* CXFA_DocumentParser::GetNotify() const {
1399 return m_pNotify; 1359 return m_pNotify;
1400 } 1360 }
1401 1361
1402 CXFA_Document* CXFA_DocumentParser::GetDocument() const { 1362 CXFA_Document* CXFA_DocumentParser::GetDocument() const {
1403 return m_pDocument; 1363 return m_pDocument.get();
1404 } 1364 }
1405 1365
1406 void CXFA_DocumentParser::CloseParser() { 1366 void CXFA_DocumentParser::CloseParser() {
1407 delete m_pDocument; 1367 m_pDocument.reset();
1408 m_pDocument = nullptr;
1409 m_nodeParser.CloseParser(); 1368 m_nodeParser.CloseParser();
1410 } 1369 }
1411 1370
1412 CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pRoot, IFX_Stream* pStream) 1371 CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pRoot, IFX_Stream* pStream)
1413 : m_nElementStart(0), 1372 : m_nElementStart(0),
1414 m_dwCheckStatus(0), 1373 m_dwCheckStatus(0),
1415 m_dwCurrentCheckStatus(0), 1374 m_dwCurrentCheckStatus(0),
1416 m_pRoot(pRoot), 1375 m_pRoot(pRoot),
1417 m_pStream(pStream), 1376 m_pStream(pStream),
1418 m_pParser(nullptr), 1377 m_pParser(nullptr),
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1574 } 1533 }
1575 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { 1534 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) {
1576 break; 1535 break;
1577 } 1536 }
1578 } 1537 }
1579 return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || 1538 return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error ||
1580 m_NodeStack.GetSize() != 1) 1539 m_NodeStack.GetSize() != 1)
1581 ? -1 1540 ? -1
1582 : m_pParser->GetStatus(); 1541 : m_pParser->GetStatus();
1583 } 1542 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_parser_imp.h ('k') | xfa/fxfa/parser/xfa_script_datawindow.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698