Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Side by Side Diff: xfa/src/fde/xml/fde_xml_imp.h

Issue 1803723002: Move xfa/src up to xfa/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/src/fde/xml/fde_xml.h ('k') | xfa/src/fde/xml/fde_xml_imp.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
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_SRC_FDE_XML_FDE_XML_IMP_H_
8 #define XFA_SRC_FDE_XML_FDE_XML_IMP_H_
9
10 #include "core/include/fxcrt/fx_system.h"
11 #include "xfa/src/fde/xml/fde_xml.h"
12 #include "xfa/src/fgas/crt/fgas_memory.h"
13 #include "xfa/src/fgas/crt/fgas_stream.h"
14
15 class CFDE_BlockBuffer;
16 class CFDE_XMLInstruction;
17 class CFDE_XMLElement;
18 class CFDE_XMLText;
19 class CFDE_XMLDoc;
20 class IFDE_XMLParser;
21 class CFDE_XMLDOMParser;
22 class CFDE_XMLSAXParser;
23 class CFDE_XMLSyntaxParser;
24
25 class CFDE_XMLNode : public CFX_Target {
26 public:
27 CFDE_XMLNode();
28 virtual void Release() { delete this; }
29 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; }
30 virtual int32_t CountChildNodes() const;
31 virtual CFDE_XMLNode* GetChildNode(int32_t index) const;
32 virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const;
33 virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath,
34 int32_t iLength = -1,
35 FX_BOOL bQualifiedName = TRUE) const;
36 virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1);
37 virtual void RemoveChildNode(CFDE_XMLNode* pNode);
38 virtual void DeleteChildren();
39 virtual CFDE_XMLNode* GetNodeItem(IFDE_XMLNode::NodeItem eItem) const;
40 virtual int32_t GetNodeLevel() const;
41 virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem,
42 CFDE_XMLNode* pNode);
43 virtual CFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem);
44 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
45 virtual void SaveXMLNode(IFX_Stream* pXMLStream);
46
47 public:
48 ~CFDE_XMLNode();
49 void CloneChildren(CFDE_XMLNode* pClone);
50 CFDE_XMLNode* m_pParent;
51 CFDE_XMLNode* m_pChild;
52 CFDE_XMLNode* m_pPrior;
53 CFDE_XMLNode* m_pNext;
54 };
55 class CFDE_XMLInstruction : public CFDE_XMLNode {
56 public:
57 CFDE_XMLInstruction(const CFX_WideString& wsTarget);
58 virtual void Release() { delete this; }
59 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Instruction; }
60 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
61 virtual void GetTargetName(CFX_WideString& wsTarget) const {
62 wsTarget = m_wsTarget;
63 }
64 virtual int32_t CountAttributes() const;
65 virtual FX_BOOL GetAttribute(int32_t index,
66 CFX_WideString& wsAttriName,
67 CFX_WideString& wsAttriValue) const;
68 virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const;
69 virtual void GetString(const FX_WCHAR* pwsAttriName,
70 CFX_WideString& wsAttriValue,
71 const FX_WCHAR* pwsDefValue = NULL) const;
72 virtual void SetString(const CFX_WideString& wsAttriName,
73 const CFX_WideString& wsAttriValue);
74 virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName,
75 int32_t iDefValue = 0) const;
76 virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue);
77 virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName,
78 FX_FLOAT fDefValue = 0) const;
79 virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue);
80 virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName);
81 virtual int32_t CountData() const;
82 virtual FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const;
83 virtual void AppendData(const CFX_WideString& wsData);
84 virtual void RemoveData(int32_t index);
85
86 public:
87 ~CFDE_XMLInstruction() {}
88 CFX_WideString m_wsTarget;
89 CFX_WideStringArray m_Attributes;
90 CFX_WideStringArray m_TargetData;
91 };
92 class CFDE_XMLElement : public CFDE_XMLNode {
93 public:
94 CFDE_XMLElement(const CFX_WideString& wsTag);
95 virtual void Release() { delete this; }
96 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Element; }
97 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
98 virtual void GetTagName(CFX_WideString& wsTag) const;
99 virtual void GetLocalTagName(CFX_WideString& wsTag) const;
100 virtual void GetNamespacePrefix(CFX_WideString& wsPrefix) const;
101 virtual void GetNamespaceURI(CFX_WideString& wsNamespace) const;
102 virtual int32_t CountAttributes() const;
103 virtual FX_BOOL GetAttribute(int32_t index,
104 CFX_WideString& wsAttriName,
105 CFX_WideString& wsAttriValue) const;
106 virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const;
107 virtual void GetString(const FX_WCHAR* pwsAttriName,
108 CFX_WideString& wsAttriValue,
109 const FX_WCHAR* pwsDefValue = NULL) const;
110 virtual void SetString(const CFX_WideString& wsAttriName,
111 const CFX_WideString& wsAttriValue);
112 virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName,
113 int32_t iDefValue = 0) const;
114 virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue);
115 virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName,
116 FX_FLOAT fDefValue = 0) const;
117 virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue);
118 virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName);
119 virtual void GetTextData(CFX_WideString& wsText) const;
120 virtual void SetTextData(const CFX_WideString& wsText);
121
122 public:
123 ~CFDE_XMLElement();
124 CFX_WideString m_wsTag;
125 CFX_WideStringArray m_Attributes;
126 };
127 class CFDE_XMLText : public CFDE_XMLNode {
128 public:
129 CFDE_XMLText(const CFX_WideString& wsText);
130 virtual void Release() { delete this; }
131 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Text; }
132 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
133 virtual void GetText(CFX_WideString& wsText) const { wsText = m_wsText; }
134 virtual void SetText(const CFX_WideString& wsText) { m_wsText = wsText; }
135
136 public:
137 ~CFDE_XMLText() {}
138 CFX_WideString m_wsText;
139 };
140 class CFDE_XMLDeclaration : public CFDE_XMLNode {
141 public:
142 CFDE_XMLDeclaration() : CFDE_XMLNode() {}
143 };
144 class CFDE_XMLCharData : public CFDE_XMLDeclaration {
145 public:
146 CFDE_XMLCharData(const CFX_WideString& wsCData);
147
148 virtual void Release() { delete this; }
149 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_CharData; }
150 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
151 virtual void GetCharData(CFX_WideString& wsCharData) const {
152 wsCharData = m_wsCharData;
153 }
154 virtual void SetCharData(const CFX_WideString& wsCData) {
155 m_wsCharData = wsCData;
156 }
157
158 public:
159 ~CFDE_XMLCharData() {}
160
161 CFX_WideString m_wsCharData;
162 };
163 class CFDE_XMLDoc : public CFX_Target {
164 public:
165 CFDE_XMLDoc();
166 ~CFDE_XMLDoc();
167 virtual void Release() { delete this; }
168 virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream,
169 int32_t iXMLPlaneSize = 8192,
170 int32_t iTextDataSize = 256,
171 FDE_XMLREADERHANDLER* pHandler = NULL);
172 virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser);
173 virtual int32_t DoLoad(IFX_Pause* pPause = NULL);
174 virtual void CloseXML();
175 virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; }
176 virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE);
177 virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode);
178
179 protected:
180 IFX_Stream* m_pStream;
181 int32_t m_iStatus;
182 CFDE_XMLNode* m_pRoot;
183 IFDE_XMLSyntaxParser* m_pSyntaxParser;
184 IFDE_XMLParser* m_pXMLParser;
185 void Reset(FX_BOOL bInitRoot);
186 void ReleaseParser();
187 };
188 typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack;
189 class CFDE_XMLDOMParser : public IFDE_XMLParser, public CFX_Target {
190 public:
191 CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, IFDE_XMLSyntaxParser* pParser);
192 ~CFDE_XMLDOMParser();
193
194 virtual void Release() { delete this; }
195 virtual int32_t DoParser(IFX_Pause* pPause);
196
197 private:
198 IFDE_XMLSyntaxParser* m_pParser;
199 CFDE_XMLNode* m_pParent;
200 CFDE_XMLNode* m_pChild;
201 CFDE_XMLDOMNodeStack m_NodeStack;
202 CFX_WideString m_ws1;
203 CFX_WideString m_ws2;
204 };
205 class CFDE_XMLTAG : public CFX_Target {
206 public:
207 CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {}
208 CFDE_XMLTAG(const CFDE_XMLTAG& src)
209 : wsTagName(src.wsTagName), eType(src.eType) {}
210 CFX_WideString wsTagName;
211 FDE_XMLNODETYPE eType;
212 };
213 typedef CFX_ObjectStackTemplate<CFDE_XMLTAG> CFDE_XMLTagStack;
214 class CFDE_XMLSAXParser : public IFDE_XMLParser, public CFX_Target {
215 public:
216 CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler,
217 IFDE_XMLSyntaxParser* pParser);
218 ~CFDE_XMLSAXParser();
219
220 virtual void Release() { delete this; }
221 virtual int32_t DoParser(IFX_Pause* pPause);
222
223 private:
224 void Push(const CFDE_XMLTAG& xmlTag);
225 void Pop();
226 FDE_XMLREADERHANDLER* m_pHandler;
227 IFDE_XMLSyntaxParser* m_pParser;
228 CFDE_XMLTagStack m_TagStack;
229 CFDE_XMLTAG* m_pTagTop;
230 CFX_WideString m_ws1;
231 CFX_WideString m_ws2;
232 };
233
234 class CFDE_BlockBuffer : public CFX_Target {
235 public:
236 CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024);
237 ~CFDE_BlockBuffer();
238
239 FX_BOOL InitBuffer(int32_t iBufferSize = 1024 * 1024);
240 FX_BOOL IsInitialized() { return m_iBufferSize / m_iAllocStep >= 1; }
241 void ReleaseBuffer() { delete this; }
242 FX_WCHAR* GetAvailableBlock(int32_t& iIndexInBlock);
243 inline int32_t GetAllocStep() const { return m_iAllocStep; }
244 inline int32_t& GetDataLengthRef() { return m_iDataLength; }
245 inline void Reset(FX_BOOL bReserveData = TRUE) {
246 if (!bReserveData) {
247 m_iStartPosition = 0;
248 }
249 m_iDataLength = 0;
250 }
251 void SetTextChar(int32_t iIndex, FX_WCHAR ch);
252 int32_t DeleteTextChars(int32_t iCount, FX_BOOL bDirection = TRUE);
253 void GetTextData(CFX_WideString& wsTextData,
254 int32_t iStart = 0,
255 int32_t iLength = -1) const;
256
257 protected:
258 inline void TextDataIndex2BufIndex(const int32_t iIndex,
259 int32_t& iBlockIndex,
260 int32_t& iInnerIndex) const;
261 void ClearBuffer();
262 CFX_PtrArray m_BlockArray;
263 int32_t m_iDataLength;
264 int32_t m_iBufferSize;
265 int32_t m_iAllocStep;
266 int32_t m_iStartPosition;
267 };
268
269 #define FDE_XMLSYNTAXMODE_Text 0
270 #define FDE_XMLSYNTAXMODE_Node 1
271 #define FDE_XMLSYNTAXMODE_Target 2
272 #define FDE_XMLSYNTAXMODE_Tag 3
273 #define FDE_XMLSYNTAXMODE_AttriName 4
274 #define FDE_XMLSYNTAXMODE_AttriEqualSign 5
275 #define FDE_XMLSYNTAXMODE_AttriQuotation 6
276 #define FDE_XMLSYNTAXMODE_AttriValue 7
277 #define FDE_XMLSYNTAXMODE_Entity 8
278 #define FDE_XMLSYNTAXMODE_EntityDecimal 9
279 #define FDE_XMLSYNTAXMODE_EntityHex 10
280 #define FDE_XMLSYNTAXMODE_CloseInstruction 11
281 #define FDE_XMLSYNTAXMODE_BreakElement 12
282 #define FDE_XMLSYNTAXMODE_CloseElement 13
283 #define FDE_XMLSYNTAXMODE_SkipDeclNode 14
284 #define FDE_XMLSYNTAXMODE_DeclCharData 15
285 #define FDE_XMLSYNTAXMODE_SkipComment 16
286 #define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17
287 #define FDE_XMLSYNTAXMODE_TargetData 18
288 class CFDE_XMLSyntaxParser : public IFDE_XMLSyntaxParser, public CFX_Target {
289 public:
290 CFDE_XMLSyntaxParser();
291 ~CFDE_XMLSyntaxParser();
292 virtual void Release() { delete this; }
293 virtual void Init(IFX_Stream* pStream,
294 int32_t iXMLPlaneSize,
295 int32_t iTextDataSize = 256);
296 virtual FX_DWORD DoSyntaxParse();
297 virtual int32_t GetStatus() const;
298 virtual int32_t GetCurrentPos() const {
299 return m_iParsedChars + (m_pStart - m_pBuffer);
300 }
301 virtual FX_FILESIZE GetCurrentBinaryPos() const;
302 virtual int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; }
303 virtual int32_t GetLastNodeNumber() const { return m_iLastNodeNum; }
304
305 virtual void GetTargetName(CFX_WideString& wsTarget) const {
306 m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength);
307 }
308 virtual void GetTagName(CFX_WideString& wsTag) const {
309 m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength);
310 }
311 virtual void GetAttributeName(CFX_WideString& wsAttriName) const {
312 m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength);
313 }
314 virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const {
315 m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength);
316 }
317 virtual void GetTextData(CFX_WideString& wsText) const {
318 m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength);
319 }
320 virtual void GetTargetData(CFX_WideString& wsData) const {
321 m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength);
322 }
323
324 protected:
325 IFX_Stream* m_pStream;
326 int32_t m_iXMLPlaneSize;
327 int32_t m_iCurrentPos;
328 int32_t m_iCurrentNodeNum;
329 int32_t m_iLastNodeNum;
330 int32_t m_iParsedChars;
331 int32_t m_iParsedBytes;
332 FX_WCHAR* m_pBuffer;
333 int32_t m_iBufferChars;
334 FX_BOOL m_bEOS;
335 FX_WCHAR* m_pStart;
336 FX_WCHAR* m_pEnd;
337 FDE_XMLNODE m_CurNode;
338 CFDE_XMLNodeStack m_XMLNodeStack;
339 CFDE_BlockBuffer m_BlockBuffer;
340 int32_t m_iAllocStep;
341 int32_t& m_iDataLength;
342 FX_WCHAR* m_pCurrentBlock;
343 int32_t m_iIndexInBlock;
344 int32_t m_iTextDataLength;
345 FX_DWORD m_dwStatus;
346 FX_DWORD m_dwMode;
347 FX_WCHAR m_wQuotationMark;
348 int32_t m_iEntityStart;
349 CFX_DWordStack m_SkipStack;
350 FX_WCHAR m_SkipChar;
351 inline void ParseTextChar(FX_WCHAR ch);
352 };
353
354 #endif // XFA_SRC_FDE_XML_FDE_XML_IMP_H_
OLDNEW
« no previous file with comments | « xfa/src/fde/xml/fde_xml.h ('k') | xfa/src/fde/xml/fde_xml_imp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698