Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / include / fde_xml.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FDE_XML\r
8 #define _FDE_XML\r
9 class IFDE_XMLNode;\r
10 class IFDE_XMLInstruction;\r
11 class IFDE_XMLDeclaration;\r
12 class IFDE_XMLDeclComment;\r
13 class IFDE_XMLDeclCharData;\r
14 class IFDE_XMLDeclDocType;\r
15 class IFDE_XMLDeclElement;\r
16 class IFDE_XMLDeclAttriList;\r
17 class IFDE_XMLDeclNotition;\r
18 class IFDE_XMLDeclEntity;\r
19 class IFDE_XMLElement;\r
20 class IFDE_XMLText;\r
21 class IFDE_XMLDoc;\r
22 class IFDE_XMLParser;\r
23 class IFDE_XMLSyntaxParser;\r
24 #ifdef __cplusplus\r
25 extern "C" {\r
26 #endif\r
27 enum FDE_XMLNODETYPE {\r
28     FDE_XMLNODE_Unknown                 =  0,\r
29     FDE_XMLNODE_Instruction                     ,\r
30     FDE_XMLNODE_Element                         ,\r
31     FDE_XMLNODE_Text                            ,\r
32     FDE_XMLNODE_CharData                        ,\r
33 };\r
34 typedef struct _FDE_XMLNODE {\r
35     FX_INT32            iNodeNum;\r
36     FDE_XMLNODETYPE     eNodeType;\r
37 } FDE_XMLNODE, * FDE_LPXMLNODE;\r
38 typedef FDE_XMLNODE const * FDE_LPCXMLNODE;\r
39 typedef CFX_StackTemplate<FDE_XMLNODE> CFDE_XMLNodeStack;\r
40 FX_BOOL         FDE_IsXMLValidChar(FX_WCHAR ch);\r
41 FX_BOOL         FDE_IsXMLWhiteSpace(FX_WCHAR ch);\r
42 FX_BOOL         FDE_IsXMLNameChar(FX_WCHAR ch, FX_BOOL bFirstChar);\r
43 #ifdef __cplusplus\r
44 }\r
45 #endif\r
46 class IFDE_XMLNode\r
47 {\r
48 public:\r
49     virtual void                        Release() = 0;\r
50     virtual FDE_XMLNODETYPE     GetType() const = 0;\r
51     virtual FX_INT32            CountChildNodes() const = 0;\r
52     virtual IFDE_XMLNode*       GetChildNode(FX_INT32 index) const = 0;\r
53     virtual FX_INT32            GetChildNodeIndex(IFDE_XMLNode *pNode) const = 0;\r
54     virtual IFDE_XMLNode*       GetPath(FX_LPCWSTR pPath, FX_INT32 iLength = -1, FX_BOOL bQualifiedName = TRUE) const = 0;\r
55     virtual FX_INT32            InsertChildNode(IFDE_XMLNode *pNode, FX_INT32 index = -1) = 0;\r
56     virtual void                        RemoveChildNode(IFDE_XMLNode *pNode) = 0;\r
57     virtual void                        DeleteChildren() = 0;\r
58     enum NodeItem {Root = 0, Parent, FirstSibling, PriorSibling, NextSibling, LastSibling, FirstNeighbor, PriorNeighbor, NextNeighbor, LastNeighbor, FirstChild, LastChild};\r
59     virtual IFDE_XMLNode*       GetNodeItem(NodeItem eItem) const = 0;\r
60     virtual FX_INT32            GetNodeLevel() const = 0;\r
61     virtual FX_BOOL                     InsertNodeItem(IFDE_XMLNode::NodeItem eItem, IFDE_XMLNode *pNode) = 0;\r
62     virtual     IFDE_XMLNode*   RemoveNodeItem(IFDE_XMLNode::NodeItem eItem) = 0;\r
63     virtual IFDE_XMLNode*       Clone(FX_BOOL bRecursive) = 0;\r
64     virtual     void                    SaveXMLNode(IFX_Stream *pXMLStream) = 0;\r
65 };\r
66 class IFDE_XMLInstruction : public IFDE_XMLNode\r
67 {\r
68 public:\r
69     static IFDE_XMLInstruction* Create(const CFX_WideString &wsTarget);\r
70     virtual void                                GetTargetName(CFX_WideString &wsTarget) const = 0;\r
71     virtual FX_INT32            CountAttributes() const = 0;\r
72     virtual FX_BOOL                     GetAttribute(FX_INT32 index, CFX_WideString &wsAttriName, CFX_WideString &wsAttriValue) const = 0;\r
73     virtual FX_BOOL                     HasAttribute(FX_LPCWSTR pwsAttriName) const = 0;\r
74     virtual void                        GetString(FX_LPCWSTR pwsAttriName, CFX_WideString &wsAttriValue, FX_LPCWSTR pwsDefValue = NULL) const = 0;\r
75     virtual void                        SetString(const CFX_WideString &wsAttriName, const CFX_WideString &wsAttriValue) = 0;\r
76     virtual FX_INT32            GetInteger(FX_LPCWSTR pwsAttriName, FX_INT32 iDefValue = 0) const = 0;\r
77     virtual void                        SetInteger(FX_LPCWSTR pwsAttriName, FX_INT32 iAttriValue) = 0;\r
78     virtual FX_FLOAT            GetFloat(FX_LPCWSTR pwsAttriName, FX_FLOAT fDefValue = 0) const = 0;\r
79     virtual void                        SetFloat(FX_LPCWSTR pwsAttriName, FX_FLOAT fAttriValue) = 0;\r
80     virtual void                        RemoveAttribute(FX_LPCWSTR pwsAttriName) = 0;\r
81     virtual FX_INT32            CountData() const = 0;\r
82     virtual FX_BOOL                     GetData(FX_INT32 index, CFX_WideString &wsData) const = 0;\r
83     virtual void                        AppendData(const CFX_WideString &wsData) = 0;\r
84     virtual void                        RemoveData(FX_INT32 index) = 0;\r
85 };\r
86 class IFDE_XMLElement : public IFDE_XMLNode\r
87 {\r
88 public:\r
89     static IFDE_XMLElement*     Create(const CFX_WideString &wsTag);\r
90     virtual void                        GetTagName(CFX_WideString &wsTag) const = 0;\r
91     virtual void                        GetLocalTagName(CFX_WideString &wsTag) const = 0;\r
92     virtual void                        GetNamespacePrefix(CFX_WideString &wsPrefix) const = 0;\r
93     virtual void                        GetNamespaceURI(CFX_WideString &wsNamespace) const = 0;\r
94     virtual FX_INT32            CountAttributes() const = 0;\r
95     virtual FX_BOOL                     GetAttribute(FX_INT32 index, CFX_WideString &wsAttriName, CFX_WideString &wsAttriValue) const = 0;\r
96     virtual FX_BOOL                     HasAttribute(FX_LPCWSTR pwsAttriName) const = 0;\r
97     virtual void                        GetString(FX_LPCWSTR pwsAttriName, CFX_WideString &wsAttriValue, FX_LPCWSTR pwsDefValue = NULL) const = 0;\r
98     virtual void                        SetString(const CFX_WideString &wsAttriName, const CFX_WideString &wsAttriValue) = 0;\r
99     virtual FX_INT32            GetInteger(FX_LPCWSTR pwsAttriName, FX_INT32 iDefValue = 0) const = 0;\r
100     virtual void                        SetInteger(FX_LPCWSTR pwsAttriName, FX_INT32 iAttriValue) = 0;\r
101     virtual FX_FLOAT            GetFloat(FX_LPCWSTR pwsAttriName, FX_FLOAT fDefValue = 0) const = 0;\r
102     virtual void                        SetFloat(FX_LPCWSTR pwsAttriName, FX_FLOAT fAttriValue) = 0;\r
103     virtual void                        RemoveAttribute(FX_LPCWSTR pwsAttriName) = 0;\r
104     virtual void                        GetTextData(CFX_WideString &wsText) const = 0;\r
105     virtual void                        SetTextData(const CFX_WideString &wsText) = 0;\r
106 };\r
107 class IFDE_XMLText : public IFDE_XMLNode\r
108 {\r
109 public:\r
110     static IFDE_XMLText*        Create(const CFX_WideString &wsText);\r
111     virtual void                        GetText(CFX_WideString &wsText) const = 0;\r
112     virtual void                        SetText(const CFX_WideString &wsText) = 0;\r
113 };\r
114 class IFDE_XMLDeclaration : public IFDE_XMLNode\r
115 {\r
116 public:\r
117 };\r
118 class IFDE_XMLCharData : public IFDE_XMLDeclaration\r
119 {\r
120 public:\r
121     static IFDE_XMLCharData*    Create(const CFX_WideString &wsCData);\r
122 \r
123     virtual void                                GetCharData(CFX_WideString &wsCData) const = 0;\r
124     virtual void                                SetCharData(const CFX_WideString &wsCData) = 0;\r
125 };\r
126 typedef struct _FDE_XMLREADERHANDLER {\r
127     FX_LPVOID pData;\r
128 \r
129     void        (*OnTagEnter)(_FDE_XMLREADERHANDLER *pThis, FDE_XMLNODETYPE eType, const CFX_WideString &wsTagName);\r
130     void        (*OnTagBreak)(_FDE_XMLREADERHANDLER *pThis, const CFX_WideString &wsTagName);\r
131     void        (*OnTagClose)(_FDE_XMLREADERHANDLER *pThis, const CFX_WideString &wsTagName);\r
132     void        (*OnAttribute)(_FDE_XMLREADERHANDLER *pThis, const CFX_WideString &wsName, const CFX_WideString &wsValue);\r
133     void        (*OnData)(_FDE_XMLREADERHANDLER *pThis, FDE_XMLNODETYPE eType, const CFX_WideString &wsValue);\r
134 } FDE_XMLREADERHANDLER, * FDE_LPXMLREADERHANDLER;\r
135 class IFDE_XMLDoc\r
136 {\r
137 public:\r
138     static IFDE_XMLDoc*         Create();\r
139     virtual void                        Release() = 0;\r
140     virtual FX_BOOL                     LoadXML(IFX_Stream *pXMLStream, FX_INT32 iXMLPlaneSize = 8192, FX_INT32 iTextDataSize = 256, FDE_LPXMLREADERHANDLER pHandler = NULL) = 0;\r
141     virtual FX_BOOL                     LoadXML(IFDE_XMLParser *pXMLParser) = 0;\r
142     virtual FX_INT32            DoLoad(IFX_Pause *pPause = NULL) = 0;\r
143     virtual void                        CloseXML() = 0;\r
144     virtual IFDE_XMLNode*       GetRoot() const = 0;\r
145     virtual void                        SaveXML(IFX_Stream *pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE) = 0;\r
146     virtual void                        SaveXMLNode(IFX_Stream *pXMLStream, IFDE_XMLNode *pNode) = 0;\r
147 };\r
148 class IFDE_XMLParser\r
149 {\r
150 public:\r
151     virtual     void                            Release() = 0;\r
152     virtual FX_INT32                    DoParser(IFX_Pause *pPause) = 0;\r
153 };\r
154 #define FDE_XMLSYNTAXSTATUS_None                                0x00\r
155 #define FDE_XMLSYNTAXSTATUS_InstructionOpen             0x01\r
156 #define FDE_XMLSYNTAXSTATUS_InstructionClose    0x02\r
157 #define FDE_XMLSYNTAXSTATUS_ElementOpen                 0x03\r
158 #define FDE_XMLSYNTAXSTATUS_ElementBreak                0x04\r
159 #define FDE_XMLSYNTAXSTATUS_ElementClose                0x05\r
160 #define FDE_XMLSYNTAXSTATUS_TargetName                  0x06\r
161 #define FDE_XMLSYNTAXSTATUS_TagName                             0x07\r
162 #define FDE_XMLSYNTAXSTATUS_AttriName                   0x08\r
163 #define FDE_XMLSYNTAXSTATUS_AttriValue                  0x09\r
164 #define FDE_XMLSYNTAXSTATUS_Text                                0x0A\r
165 #define FDE_XMLSYNTAXSTATUS_CData                               0x0B\r
166 #define FDE_XMLSYNTAXSTATUS_TargetData                  0x0C\r
167 #define FDE_XMLSYNTAXSTATUS_Error                               0xFE\r
168 #define FDE_XMLSYNTAXSTATUS_EOS                                 0xFF\r
169 class IFDE_XMLSyntaxParser\r
170 {\r
171 public:\r
172     static IFDE_XMLSyntaxParser*        Create();\r
173     virtual void                        Release() = 0;\r
174     virtual void                        Init(IFX_Stream *pStream, FX_INT32 iXMLPlaneSize, FX_INT32 iTextDataSize = 256) = 0;\r
175     virtual FX_DWORD            DoSyntaxParse() = 0;\r
176     virtual FX_INT32            GetStatus() const = 0;\r
177     virtual FX_INT32            GetCurrentPos() const = 0;\r
178     virtual FX_FILESIZE         GetCurrentBinaryPos() const = 0;\r
179     virtual FX_INT32            GetCurrentNodeNumber() const = 0;\r
180     virtual FX_INT32            GetLastNodeNumber() const = 0;\r
181     virtual void                        GetTargetName(CFX_WideString &wsTarget) const = 0;\r
182     virtual void                        GetTagName(CFX_WideString &wsTag) const = 0;\r
183     virtual void                        GetAttributeName(CFX_WideString &wsAttriName) const = 0;\r
184     virtual void                        GetAttributeValue(CFX_WideString &wsAttriValue) const = 0;\r
185     virtual void                        GetTextData(CFX_WideString &wsText) const = 0;\r
186     virtual void                        GetTargetData(CFX_WideString &wsData) const = 0;\r
187 };\r
188 #endif\r