xref: /aosp_15_r20/external/pdfium/xfa/fxfa/parser/cxfa_document_builder.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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