| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef XFA_FDE_XML_FDE_XML_IMP_H_ | 7 #ifndef XFA_FDE_XML_FDE_XML_IMP_H_ |
| 8 #define XFA_FDE_XML_FDE_XML_IMP_H_ | 8 #define XFA_FDE_XML_FDE_XML_IMP_H_ |
| 9 | 9 |
| 10 #include "core/fxcrt/include/fx_system.h" | 10 #include "core/fxcrt/include/fx_system.h" |
| 11 #include "xfa/fde/xml/fde_xml.h" | 11 #include "xfa/fde/xml/fde_xml.h" |
| 12 #include "xfa/fgas/crt/fgas_memory.h" | 12 #include "xfa/fgas/crt/fgas_memory.h" |
| 13 #include "xfa/fgas/crt/fgas_stream.h" | 13 #include "xfa/fgas/crt/fgas_stream.h" |
| 14 | 14 |
| 15 class CFDE_BlockBuffer; | 15 class CFDE_BlockBuffer; |
| 16 class CFDE_XMLInstruction; | 16 class CFDE_XMLInstruction; |
| 17 class CFDE_XMLElement; | 17 class CFDE_XMLElement; |
| 18 class CFDE_XMLText; | 18 class CFDE_XMLText; |
| 19 class CFDE_XMLDoc; | 19 class CFDE_XMLDoc; |
| 20 class IFDE_XMLParser; | |
| 21 class CFDE_XMLDOMParser; | 20 class CFDE_XMLDOMParser; |
| 21 class CFDE_XMLParser; |
| 22 class CFDE_XMLSAXParser; | 22 class CFDE_XMLSAXParser; |
| 23 class CFDE_XMLSyntaxParser; | 23 class CFDE_XMLSyntaxParser; |
| 24 | 24 |
| 25 class CFDE_XMLNode : public CFX_Target { | 25 class CFDE_XMLNode : public CFX_Target { |
| 26 public: | 26 public: |
| 27 enum NodeItem { |
| 28 Root = 0, |
| 29 Parent, |
| 30 FirstSibling, |
| 31 PriorSibling, |
| 32 NextSibling, |
| 33 LastSibling, |
| 34 FirstNeighbor, |
| 35 PriorNeighbor, |
| 36 NextNeighbor, |
| 37 LastNeighbor, |
| 38 FirstChild, |
| 39 LastChild |
| 40 }; |
| 41 |
| 27 CFDE_XMLNode(); | 42 CFDE_XMLNode(); |
| 43 |
| 28 virtual void Release() { delete this; } | 44 virtual void Release() { delete this; } |
| 29 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; } | 45 virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; } |
| 30 virtual int32_t CountChildNodes() const; | 46 virtual int32_t CountChildNodes() const; |
| 31 virtual CFDE_XMLNode* GetChildNode(int32_t index) const; | 47 virtual CFDE_XMLNode* GetChildNode(int32_t index) const; |
| 32 virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; | 48 virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; |
| 33 virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, | 49 virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, |
| 34 int32_t iLength = -1, | 50 int32_t iLength = -1, |
| 35 FX_BOOL bQualifiedName = TRUE) const; | 51 FX_BOOL bQualifiedName = TRUE) const; |
| 36 virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); | 52 virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); |
| 37 virtual void RemoveChildNode(CFDE_XMLNode* pNode); | 53 virtual void RemoveChildNode(CFDE_XMLNode* pNode); |
| 38 virtual void DeleteChildren(); | 54 virtual void DeleteChildren(); |
| 39 virtual CFDE_XMLNode* GetNodeItem(IFDE_XMLNode::NodeItem eItem) const; | 55 virtual CFDE_XMLNode* GetNodeItem(CFDE_XMLNode::NodeItem eItem) const; |
| 40 virtual int32_t GetNodeLevel() const; | 56 virtual int32_t GetNodeLevel() const; |
| 41 virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem, | 57 virtual FX_BOOL InsertNodeItem(CFDE_XMLNode::NodeItem eItem, |
| 42 CFDE_XMLNode* pNode); | 58 CFDE_XMLNode* pNode); |
| 43 virtual CFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem); | 59 virtual CFDE_XMLNode* RemoveNodeItem(CFDE_XMLNode::NodeItem eItem); |
| 44 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); | 60 virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
| 45 virtual void SaveXMLNode(IFX_Stream* pXMLStream); | 61 virtual void SaveXMLNode(IFX_Stream* pXMLStream); |
| 46 | 62 |
| 47 public: | 63 public: |
| 48 ~CFDE_XMLNode(); | 64 ~CFDE_XMLNode(); |
| 49 void CloneChildren(CFDE_XMLNode* pClone); | 65 void CloneChildren(CFDE_XMLNode* pClone); |
| 50 CFDE_XMLNode* m_pParent; | 66 CFDE_XMLNode* m_pParent; |
| 51 CFDE_XMLNode* m_pChild; | 67 CFDE_XMLNode* m_pChild; |
| 52 CFDE_XMLNode* m_pPrior; | 68 CFDE_XMLNode* m_pPrior; |
| 53 CFDE_XMLNode* m_pNext; | 69 CFDE_XMLNode* m_pNext; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 }; | 178 }; |
| 163 class CFDE_XMLDoc : public CFX_Target { | 179 class CFDE_XMLDoc : public CFX_Target { |
| 164 public: | 180 public: |
| 165 CFDE_XMLDoc(); | 181 CFDE_XMLDoc(); |
| 166 ~CFDE_XMLDoc(); | 182 ~CFDE_XMLDoc(); |
| 167 virtual void Release() { delete this; } | 183 virtual void Release() { delete this; } |
| 168 virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, | 184 virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, |
| 169 int32_t iXMLPlaneSize = 8192, | 185 int32_t iXMLPlaneSize = 8192, |
| 170 int32_t iTextDataSize = 256, | 186 int32_t iTextDataSize = 256, |
| 171 FDE_XMLREADERHANDLER* pHandler = NULL); | 187 FDE_XMLREADERHANDLER* pHandler = NULL); |
| 172 virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser); | 188 virtual FX_BOOL LoadXML(CFDE_XMLParser* pXMLParser); |
| 173 virtual int32_t DoLoad(IFX_Pause* pPause = NULL); | 189 virtual int32_t DoLoad(IFX_Pause* pPause = NULL); |
| 174 virtual void CloseXML(); | 190 virtual void CloseXML(); |
| 175 virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } | 191 virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } |
| 176 virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE); | 192 virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE); |
| 177 virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode); | 193 virtual void SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pNode); |
| 178 | 194 |
| 179 protected: | 195 protected: |
| 180 IFX_Stream* m_pStream; | 196 IFX_Stream* m_pStream; |
| 181 int32_t m_iStatus; | 197 int32_t m_iStatus; |
| 182 CFDE_XMLNode* m_pRoot; | 198 CFDE_XMLNode* m_pRoot; |
| 183 IFDE_XMLSyntaxParser* m_pSyntaxParser; | 199 CFDE_XMLSyntaxParser* m_pSyntaxParser; |
| 184 IFDE_XMLParser* m_pXMLParser; | 200 CFDE_XMLParser* m_pXMLParser; |
| 185 void Reset(FX_BOOL bInitRoot); | 201 void Reset(FX_BOOL bInitRoot); |
| 186 void ReleaseParser(); | 202 void ReleaseParser(); |
| 187 }; | 203 }; |
| 188 typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack; | 204 typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack; |
| 189 class CFDE_XMLDOMParser : public IFDE_XMLParser, public CFX_Target { | 205 |
| 206 class CFDE_XMLParser { |
| 190 public: | 207 public: |
| 191 CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, IFDE_XMLSyntaxParser* pParser); | 208 virtual ~CFDE_XMLParser() {} |
| 209 |
| 210 virtual void Release() = 0; |
| 211 virtual int32_t DoParser(IFX_Pause* pPause) = 0; |
| 212 }; |
| 213 |
| 214 class CFDE_XMLDOMParser : public CFDE_XMLParser, public CFX_Target { |
| 215 public: |
| 216 CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, CFDE_XMLSyntaxParser* pParser); |
| 192 ~CFDE_XMLDOMParser(); | 217 ~CFDE_XMLDOMParser(); |
| 193 | 218 |
| 194 virtual void Release() { delete this; } | 219 virtual void Release() { delete this; } |
| 195 virtual int32_t DoParser(IFX_Pause* pPause); | 220 virtual int32_t DoParser(IFX_Pause* pPause); |
| 196 | 221 |
| 197 private: | 222 private: |
| 198 IFDE_XMLSyntaxParser* m_pParser; | 223 CFDE_XMLSyntaxParser* m_pParser; |
| 199 CFDE_XMLNode* m_pParent; | 224 CFDE_XMLNode* m_pParent; |
| 200 CFDE_XMLNode* m_pChild; | 225 CFDE_XMLNode* m_pChild; |
| 201 CFDE_XMLDOMNodeStack m_NodeStack; | 226 CFDE_XMLDOMNodeStack m_NodeStack; |
| 202 CFX_WideString m_ws1; | 227 CFX_WideString m_ws1; |
| 203 CFX_WideString m_ws2; | 228 CFX_WideString m_ws2; |
| 204 }; | 229 }; |
| 205 class CFDE_XMLTAG : public CFX_Target { | 230 class CFDE_XMLTAG : public CFX_Target { |
| 206 public: | 231 public: |
| 207 CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {} | 232 CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {} |
| 208 CFDE_XMLTAG(const CFDE_XMLTAG& src) | 233 CFDE_XMLTAG(const CFDE_XMLTAG& src) |
| 209 : wsTagName(src.wsTagName), eType(src.eType) {} | 234 : wsTagName(src.wsTagName), eType(src.eType) {} |
| 210 CFX_WideString wsTagName; | 235 CFX_WideString wsTagName; |
| 211 FDE_XMLNODETYPE eType; | 236 FDE_XMLNODETYPE eType; |
| 212 }; | 237 }; |
| 213 typedef CFX_ObjectStackTemplate<CFDE_XMLTAG> CFDE_XMLTagStack; | 238 typedef CFX_ObjectStackTemplate<CFDE_XMLTAG> CFDE_XMLTagStack; |
| 214 class CFDE_XMLSAXParser : public IFDE_XMLParser, public CFX_Target { | 239 class CFDE_XMLSAXParser : public CFDE_XMLParser, public CFX_Target { |
| 215 public: | 240 public: |
| 216 CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, | 241 CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, |
| 217 IFDE_XMLSyntaxParser* pParser); | 242 CFDE_XMLSyntaxParser* pParser); |
| 218 ~CFDE_XMLSAXParser(); | 243 ~CFDE_XMLSAXParser(); |
| 219 | 244 |
| 220 virtual void Release() { delete this; } | 245 virtual void Release() { delete this; } |
| 221 virtual int32_t DoParser(IFX_Pause* pPause); | 246 virtual int32_t DoParser(IFX_Pause* pPause); |
| 222 | 247 |
| 223 private: | 248 private: |
| 224 void Push(const CFDE_XMLTAG& xmlTag); | 249 void Push(const CFDE_XMLTAG& xmlTag); |
| 225 void Pop(); | 250 void Pop(); |
| 226 FDE_XMLREADERHANDLER* m_pHandler; | 251 FDE_XMLREADERHANDLER* m_pHandler; |
| 227 IFDE_XMLSyntaxParser* m_pParser; | 252 CFDE_XMLSyntaxParser* m_pParser; |
| 228 CFDE_XMLTagStack m_TagStack; | 253 CFDE_XMLTagStack m_TagStack; |
| 229 CFDE_XMLTAG* m_pTagTop; | 254 CFDE_XMLTAG* m_pTagTop; |
| 230 CFX_WideString m_ws1; | 255 CFX_WideString m_ws1; |
| 231 CFX_WideString m_ws2; | 256 CFX_WideString m_ws2; |
| 232 }; | 257 }; |
| 233 | 258 |
| 234 class CFDE_BlockBuffer : public CFX_Target { | 259 class CFDE_BlockBuffer : public CFX_Target { |
| 235 public: | 260 public: |
| 236 CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); | 261 CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); |
| 237 ~CFDE_BlockBuffer(); | 262 ~CFDE_BlockBuffer(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 #define FDE_XMLSYNTAXMODE_EntityDecimal 9 | 303 #define FDE_XMLSYNTAXMODE_EntityDecimal 9 |
| 279 #define FDE_XMLSYNTAXMODE_EntityHex 10 | 304 #define FDE_XMLSYNTAXMODE_EntityHex 10 |
| 280 #define FDE_XMLSYNTAXMODE_CloseInstruction 11 | 305 #define FDE_XMLSYNTAXMODE_CloseInstruction 11 |
| 281 #define FDE_XMLSYNTAXMODE_BreakElement 12 | 306 #define FDE_XMLSYNTAXMODE_BreakElement 12 |
| 282 #define FDE_XMLSYNTAXMODE_CloseElement 13 | 307 #define FDE_XMLSYNTAXMODE_CloseElement 13 |
| 283 #define FDE_XMLSYNTAXMODE_SkipDeclNode 14 | 308 #define FDE_XMLSYNTAXMODE_SkipDeclNode 14 |
| 284 #define FDE_XMLSYNTAXMODE_DeclCharData 15 | 309 #define FDE_XMLSYNTAXMODE_DeclCharData 15 |
| 285 #define FDE_XMLSYNTAXMODE_SkipComment 16 | 310 #define FDE_XMLSYNTAXMODE_SkipComment 16 |
| 286 #define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17 | 311 #define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17 |
| 287 #define FDE_XMLSYNTAXMODE_TargetData 18 | 312 #define FDE_XMLSYNTAXMODE_TargetData 18 |
| 288 class CFDE_XMLSyntaxParser : public IFDE_XMLSyntaxParser, public CFX_Target { | 313 class CFDE_XMLSyntaxParser : public CFX_Target { |
| 289 public: | 314 public: |
| 290 CFDE_XMLSyntaxParser(); | 315 CFDE_XMLSyntaxParser(); |
| 291 ~CFDE_XMLSyntaxParser(); | 316 ~CFDE_XMLSyntaxParser(); |
| 292 virtual void Release() { delete this; } | 317 void Release() { delete this; } |
| 293 virtual void Init(IFX_Stream* pStream, | 318 void Init(IFX_Stream* pStream, |
| 294 int32_t iXMLPlaneSize, | 319 int32_t iXMLPlaneSize, |
| 295 int32_t iTextDataSize = 256); | 320 int32_t iTextDataSize = 256); |
| 296 virtual uint32_t DoSyntaxParse(); | 321 uint32_t DoSyntaxParse(); |
| 297 virtual int32_t GetStatus() const; | 322 int32_t GetStatus() const; |
| 298 virtual int32_t GetCurrentPos() const { | 323 int32_t GetCurrentPos() const { |
| 299 return m_iParsedChars + (m_pStart - m_pBuffer); | 324 return m_iParsedChars + (m_pStart - m_pBuffer); |
| 300 } | 325 } |
| 301 virtual FX_FILESIZE GetCurrentBinaryPos() const; | 326 FX_FILESIZE GetCurrentBinaryPos() const; |
| 302 virtual int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; } | 327 int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; } |
| 303 virtual int32_t GetLastNodeNumber() const { return m_iLastNodeNum; } | 328 int32_t GetLastNodeNumber() const { return m_iLastNodeNum; } |
| 304 | 329 |
| 305 virtual void GetTargetName(CFX_WideString& wsTarget) const { | 330 void GetTargetName(CFX_WideString& wsTarget) const { |
| 306 m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength); | 331 m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength); |
| 307 } | 332 } |
| 308 virtual void GetTagName(CFX_WideString& wsTag) const { | 333 void GetTagName(CFX_WideString& wsTag) const { |
| 309 m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength); | 334 m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength); |
| 310 } | 335 } |
| 311 virtual void GetAttributeName(CFX_WideString& wsAttriName) const { | 336 void GetAttributeName(CFX_WideString& wsAttriName) const { |
| 312 m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength); | 337 m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength); |
| 313 } | 338 } |
| 314 virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { | 339 void GetAttributeValue(CFX_WideString& wsAttriValue) const { |
| 315 m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength); | 340 m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength); |
| 316 } | 341 } |
| 317 virtual void GetTextData(CFX_WideString& wsText) const { | 342 void GetTextData(CFX_WideString& wsText) const { |
| 318 m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength); | 343 m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength); |
| 319 } | 344 } |
| 320 virtual void GetTargetData(CFX_WideString& wsData) const { | 345 void GetTargetData(CFX_WideString& wsData) const { |
| 321 m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength); | 346 m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength); |
| 322 } | 347 } |
| 323 | 348 |
| 324 protected: | 349 protected: |
| 325 IFX_Stream* m_pStream; | 350 IFX_Stream* m_pStream; |
| 326 int32_t m_iXMLPlaneSize; | 351 int32_t m_iXMLPlaneSize; |
| 327 int32_t m_iCurrentPos; | 352 int32_t m_iCurrentPos; |
| 328 int32_t m_iCurrentNodeNum; | 353 int32_t m_iCurrentNodeNum; |
| 329 int32_t m_iLastNodeNum; | 354 int32_t m_iLastNodeNum; |
| 330 int32_t m_iParsedChars; | 355 int32_t m_iParsedChars; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 345 uint32_t m_dwStatus; | 370 uint32_t m_dwStatus; |
| 346 uint32_t m_dwMode; | 371 uint32_t m_dwMode; |
| 347 FX_WCHAR m_wQuotationMark; | 372 FX_WCHAR m_wQuotationMark; |
| 348 int32_t m_iEntityStart; | 373 int32_t m_iEntityStart; |
| 349 CFX_DWordStack m_SkipStack; | 374 CFX_DWordStack m_SkipStack; |
| 350 FX_WCHAR m_SkipChar; | 375 FX_WCHAR m_SkipChar; |
| 351 inline void ParseTextChar(FX_WCHAR ch); | 376 inline void ParseTextChar(FX_WCHAR ch); |
| 352 }; | 377 }; |
| 353 | 378 |
| 354 #endif // XFA_FDE_XML_FDE_XML_IMP_H_ | 379 #endif // XFA_FDE_XML_FDE_XML_IMP_H_ |
| OLD | NEW |