summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/parser/xfa_parser_imp.h
blob: cdfbe70917be4a10db337c9815a72cbf1bccacaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _XFA_PARSER_IMP
#define _XFA_PARSER_IMP
#define _XFA_VERIFY_Checksum_
class CXFA_XMLParser;
class CXFA_SimpleParser : public IXFA_Parser
{
public:
    CXFA_SimpleParser(IXFA_ObjFactory *pFactory, FX_BOOL bDocumentParser = FALSE);
    ~CXFA_SimpleParser();
    virtual void				Release()
    {
        delete this;
    }

    virtual int32_t			StartParse(IFX_FileRead *pStream, XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP);
    virtual int32_t			DoParse(IFX_Pause *pPause = NULL);
    virtual int32_t			ParseXMLData(const CFX_WideString &wsXML, IFDE_XMLNode* &pXMLNode, IFX_Pause *pPause = NULL);
    virtual void				ConstructXFANode(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode);
    virtual IXFA_ObjFactory*	GetFactory() const
    {
        return m_pFactory;
    }
    virtual CXFA_Node*			GetRootNode() const
    {
        return m_pRootNode;
    }
    virtual IFDE_XMLDoc*		GetXMLDoc() const
    {
        return m_pXMLDoc;
    }
    virtual void				CloseParser();
protected:
    CXFA_Node*				ParseAsXDPPacket							(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_XDP						(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_Config						(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_TemplateForm				(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_Data						(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_LocaleConnectionSourceSet	(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_Xdc						(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				ParseAsXDPPacket_User						(IFDE_XMLNode* pXMLDocumentNode, XFA_XDPPACKET ePacketID);
    CXFA_Node*				NormalLoader								(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLDoc, XFA_XDPPACKET ePacketID, FX_BOOL bUseAttribute = TRUE);
    CXFA_Node*				DataLoader									(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLDoc, FX_BOOL bDoTransform);
    CXFA_Node*				UserPacketLoader							(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLDoc);
    void					ParseContentNode							(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode, XFA_XDPPACKET ePacketID);
    void					ParseDataValue								(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode, XFA_XDPPACKET ePacketID);
    void					ParseDataGroup								(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode, XFA_XDPPACKET ePacketID);
    void					ParseInstruction							(CXFA_Node *pXFANode, IFDE_XMLInstruction *pXMLInstruction, XFA_XDPPACKET ePacketID);
protected:
    void					SetFactory									(IXFA_ObjFactory* pFactory);
    CXFA_XMLParser*				m_pXMLParser;
    IFDE_XMLDoc*				m_pXMLDoc;
    IFX_Stream*					m_pStream;
    IFX_FileRead*				m_pFileRead;
    IXFA_ObjFactory*			m_pFactory;
    CXFA_Node*					m_pRootNode;
    XFA_XDPPACKET				m_ePacketID;
    FX_BOOL						m_bDocumentParser;
    friend class CXFA_DocumentParser;
};
class CXFA_DocumentParser : public IXFA_DocParser
{
public:
    CXFA_DocumentParser(IXFA_Notify *pNotify);
    ~CXFA_DocumentParser();
    virtual void				Release()
    {
        delete this;
    }
    virtual int32_t			StartParse(IFX_FileRead *pStream, XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP);
    virtual int32_t			DoParse(IFX_Pause *pPause = NULL);
    virtual int32_t			ParseXMLData(const CFX_WideString &wsXML, IFDE_XMLNode* &pXMLNode, IFX_Pause *pPause = NULL);
    virtual void				ConstructXFANode(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode);
    virtual IXFA_ObjFactory*	GetFactory() const
    {
        return m_nodeParser.GetFactory();
    }
    virtual CXFA_Node*			GetRootNode() const
    {
        return m_nodeParser.GetRootNode();
    }
    virtual IFDE_XMLDoc*		GetXMLDoc() const
    {
        return m_nodeParser.GetXMLDoc();
    }
    virtual IXFA_Notify*		GetNotify() const
    {
        return m_pNotify;
    }
    virtual CXFA_Document*		GetDocument() const
    {
        return m_pDocument;
    }
    virtual void				CloseParser();
protected:
    CXFA_SimpleParser			m_nodeParser;
    IXFA_Notify*				m_pNotify;
    CXFA_Document*				m_pDocument;
};
typedef CFX_StackTemplate<IFDE_XMLNode*> CXFA_XMLNodeStack;
class CXFA_XMLParser : public IFDE_XMLParser
{
public:
    CXFA_XMLParser(IFDE_XMLNode *pRoot, IFX_Stream *pStream);
    ~CXFA_XMLParser();

    virtual void			Release()
    {
        delete this;
    }
    virtual int32_t		DoParser(IFX_Pause *pPause);
protected:
    IFDE_XMLNode			*m_pRoot;
    IFX_Stream				*m_pStream;
    IFDE_XMLSyntaxParser	*m_pParser;

    IFDE_XMLNode			*m_pParent;
    IFDE_XMLNode			*m_pChild;
    CXFA_XMLNodeStack		m_NodeStack;
    CFX_WideString			m_ws1;
    CFX_WideString			m_ws2;
    FX_DWORD				m_dwStatus;
#ifdef _XFA_VERIFY_Checksum_
public:
    FX_FILESIZE				m_nStart[2];
    size_t					m_nSize[2];
    FX_FILESIZE				m_nElementStart;
    FX_WORD					m_dwCheckStatus;
    FX_WORD					m_dwCurrentCheckStatus;
#endif
};
#endif