1 // Copyright 2014 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FXFA_PARSER_CXFA_DOCUMENT_BUILDER_H_ 8 #define XFA_FXFA_PARSER_CXFA_DOCUMENT_BUILDER_H_ 9 10 #include "core/fxcrt/unowned_ptr.h" 11 #include "v8/include/cppgc/macros.h" 12 #include "xfa/fxfa/fxfa_basic.h" 13 14 class CFX_XMLDocument; 15 class CFX_XMLNode; 16 class CXFA_Document; 17 class CXFA_Node; 18 class CFX_XMLInstruction; 19 20 class CXFA_DocumentBuilder { 21 CPPGC_STACK_ALLOCATED(); // Allow Raw/Unowned pointers. 22 23 public: 24 explicit CXFA_DocumentBuilder(CXFA_Document* pNodeFactory); 25 ~CXFA_DocumentBuilder(); 26 27 CFX_XMLNode* Build(CFX_XMLDocument* pXML); 28 bool BuildDocument(CFX_XMLDocument* pXML, XFA_PacketType ePacketID); 29 void ConstructXFANode(CXFA_Node* pXFANode, CFX_XMLNode* pXMLNode); 30 CXFA_Node* GetRootNode() const; 31 32 private: 33 CXFA_Node* ParseAsXDPPacket(CFX_XMLNode* pXMLDocumentNode, 34 XFA_PacketType ePacketID); 35 CXFA_Node* ParseAsXDPPacket_XDP(CFX_XMLNode* pXMLDocumentNode); 36 CXFA_Node* ParseAsXDPPacket_Config(CFX_XMLNode* pXMLDocumentNode); 37 CXFA_Node* ParseAsXDPPacket_Template(CFX_XMLNode* pXMLDocumentNode); 38 CXFA_Node* ParseAsXDPPacket_Form(CFX_XMLNode* pXMLDocumentNode); 39 CXFA_Node* ParseAsXDPPacket_Data(CFX_XMLNode* pXMLDocumentNode); 40 CXFA_Node* ParseAsXDPPacket_LocaleConnectionSourceSet( 41 CFX_XMLNode* pXMLDocumentNode, 42 XFA_PacketType packet_type, 43 XFA_Element element); 44 CXFA_Node* ParseAsXDPPacket_Xdc(CFX_XMLNode* pXMLDocumentNode); 45 CXFA_Node* ParseAsXDPPacket_User(CFX_XMLNode* pXMLDocumentNode); 46 CXFA_Node* DataLoader(CXFA_Node* pXFANode, CFX_XMLNode* pXMLDoc); 47 CXFA_Node* NormalLoader(CXFA_Node* pXFANode, 48 CFX_XMLNode* pXMLDoc, 49 XFA_PacketType ePacketID, 50 bool bUseAttribute); 51 void ParseContentNode(CXFA_Node* pXFANode, 52 CFX_XMLNode* pXMLNode, 53 XFA_PacketType ePacketID); 54 void ParseDataValue(CXFA_Node* pXFANode, 55 CFX_XMLNode* pXMLNode, 56 XFA_PacketType ePacketID); 57 void ParseDataGroup(CXFA_Node* pXFANode, 58 CFX_XMLNode* pXMLNode, 59 XFA_PacketType ePacketID); 60 void ParseInstruction(CXFA_Node* pXFANode, 61 CFX_XMLInstruction* pXMLInstruction, 62 XFA_PacketType ePacketID); 63 64 UnownedPtr<CXFA_Document> node_factory_; // OK, stack-only. 65 UnownedPtr<CXFA_Node> root_node_; // OK, stack-only. 66 UnownedPtr<CFX_XMLDocument> xml_doc_; 67 size_t execute_recursion_depth_ = 0; 68 }; 69 70 #endif // XFA_FXFA_PARSER_CXFA_DOCUMENT_BUILDER_H_ 71