| // 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_FXFA_PARSER_XFA_PARSER_IMP_H_ |
| #define XFA_FXFA_PARSER_XFA_PARSER_IMP_H_ |
| |
| #include "xfa/fxfa/parser/xfa_parser.h" |
| |
| 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); |
| 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); |
| |
| FX_FILESIZE m_nStart[2]; |
| size_t m_nSize[2]; |
| FX_FILESIZE m_nElementStart; |
| FX_WORD m_dwCheckStatus; |
| FX_WORD m_dwCurrentCheckStatus; |
| |
| 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; |
| }; |
| |
| #endif // XFA_FXFA_PARSER_XFA_PARSER_IMP_H_ |