Index: xfa/src/fdp/src/xml/fde_xml_imp.h |
diff --git a/xfa/src/fdp/src/xml/fde_xml_imp.h b/xfa/src/fdp/src/xml/fde_xml_imp.h |
index 1a8097008e3eb8f5c5e0a152ecf0e379a5849b59..cc83aa594ed1d434229d024fe60790b8f26e4930 100644 |
--- a/xfa/src/fdp/src/xml/fde_xml_imp.h |
+++ b/xfa/src/fdp/src/xml/fde_xml_imp.h |
@@ -1,375 +1,375 @@ |
-// 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 FDE_XML_IMP_H_ |
-#define FDE_XML_IMP_H_ |
- |
-#define _FDE_BLOCK_BUFFER |
-#ifdef _FDE_BLOCK_BUFFER |
-class CFDE_BlockBuffer; |
-#endif |
-class CFDE_XMLNode; |
-class CFDE_XMLInstruction; |
-class CFDE_XMLElement; |
-class CFDE_XMLText; |
-class CFDE_XMLDoc; |
-class IFDE_XMLParser; |
-class CFDE_XMLDOMParser; |
-class CFDE_XMLSAXParser; |
-class CFDE_XMLSyntaxParser; |
-class CFDE_XMLNode : public CFX_Target { |
- public: |
- CFDE_XMLNode(); |
- virtual void Release() { delete this; } |
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; } |
- virtual int32_t CountChildNodes() const; |
- virtual CFDE_XMLNode* GetChildNode(int32_t index) const; |
- virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; |
- virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, |
- int32_t iLength = -1, |
- FX_BOOL bQualifiedName = TRUE) const; |
- virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); |
- virtual void RemoveChildNode(CFDE_XMLNode* pNode); |
- virtual void DeleteChildren(); |
- virtual CFDE_XMLNode* GetNodeItem(IFDE_XMLNode::NodeItem eItem) const; |
- virtual int32_t GetNodeLevel() const; |
- virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem, |
- CFDE_XMLNode* pNode); |
- virtual CFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem); |
- virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void SaveXMLNode(IFX_Stream* pXMLStream); |
- |
- public: |
- ~CFDE_XMLNode(); |
- void CloneChildren(CFDE_XMLNode* pClone); |
- CFDE_XMLNode* m_pParent; |
- CFDE_XMLNode* m_pChild; |
- CFDE_XMLNode* m_pPrior; |
- CFDE_XMLNode* m_pNext; |
-}; |
-class CFDE_XMLInstruction : public CFDE_XMLNode { |
- public: |
- CFDE_XMLInstruction(const CFX_WideString& wsTarget); |
- virtual void Release() { delete this; } |
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Instruction; } |
- virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void GetTargetName(CFX_WideString& wsTarget) const { |
- wsTarget = m_wsTarget; |
- } |
- virtual int32_t CountAttributes() const; |
- virtual FX_BOOL GetAttribute(int32_t index, |
- CFX_WideString& wsAttriName, |
- CFX_WideString& wsAttriValue) const; |
- virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
- virtual void GetString(const FX_WCHAR* pwsAttriName, |
- CFX_WideString& wsAttriValue, |
- const FX_WCHAR* pwsDefValue = NULL) const; |
- virtual void SetString(const CFX_WideString& wsAttriName, |
- const CFX_WideString& wsAttriValue); |
- virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, |
- int32_t iDefValue = 0) const; |
- virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
- virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, |
- FX_FLOAT fDefValue = 0) const; |
- virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
- virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
- virtual int32_t CountData() const; |
- virtual FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const; |
- virtual void AppendData(const CFX_WideString& wsData); |
- virtual void RemoveData(int32_t index); |
- |
- public: |
- ~CFDE_XMLInstruction() {} |
- CFX_WideString m_wsTarget; |
- CFX_WideStringArray m_Attributes; |
- CFX_WideStringArray m_TargetData; |
-}; |
-class CFDE_XMLElement : public CFDE_XMLNode { |
- public: |
- CFDE_XMLElement(const CFX_WideString& wsTag); |
- virtual void Release() { delete this; } |
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Element; } |
- virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void GetTagName(CFX_WideString& wsTag) const; |
- virtual void GetLocalTagName(CFX_WideString& wsTag) const; |
- virtual void GetNamespacePrefix(CFX_WideString& wsPrefix) const; |
- virtual void GetNamespaceURI(CFX_WideString& wsNamespace) const; |
- virtual int32_t CountAttributes() const; |
- virtual FX_BOOL GetAttribute(int32_t index, |
- CFX_WideString& wsAttriName, |
- CFX_WideString& wsAttriValue) const; |
- virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
- virtual void GetString(const FX_WCHAR* pwsAttriName, |
- CFX_WideString& wsAttriValue, |
- const FX_WCHAR* pwsDefValue = NULL) const; |
- virtual void SetString(const CFX_WideString& wsAttriName, |
- const CFX_WideString& wsAttriValue); |
- virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, |
- int32_t iDefValue = 0) const; |
- virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
- virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, |
- FX_FLOAT fDefValue = 0) const; |
- virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
- virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
- virtual void GetTextData(CFX_WideString& wsText) const; |
- virtual void SetTextData(const CFX_WideString& wsText); |
- |
- public: |
- ~CFDE_XMLElement(); |
- CFX_WideString m_wsTag; |
- CFX_WideStringArray m_Attributes; |
-}; |
-class CFDE_XMLText : public CFDE_XMLNode { |
- public: |
- CFDE_XMLText(const CFX_WideString& wsText); |
- virtual void Release() { delete this; } |
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Text; } |
- virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void GetText(CFX_WideString& wsText) const { wsText = m_wsText; } |
- virtual void SetText(const CFX_WideString& wsText) { m_wsText = wsText; } |
- |
- public: |
- ~CFDE_XMLText() {} |
- CFX_WideString m_wsText; |
-}; |
-class CFDE_XMLDeclaration : public CFDE_XMLNode { |
- public: |
- CFDE_XMLDeclaration() : CFDE_XMLNode() {} |
-}; |
-class CFDE_XMLCharData : public CFDE_XMLDeclaration { |
- public: |
- CFDE_XMLCharData(const CFX_WideString& wsCData); |
- |
- virtual void Release() { delete this; } |
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_CharData; } |
- virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void GetCharData(CFX_WideString& wsCharData) const { |
- wsCharData = m_wsCharData; |
- } |
- virtual void SetCharData(const CFX_WideString& wsCData) { |
- m_wsCharData = wsCData; |
- } |
- |
- public: |
- ~CFDE_XMLCharData() {} |
- |
- CFX_WideString m_wsCharData; |
-}; |
-class CFDE_XMLDoc : public CFX_Target { |
- public: |
- CFDE_XMLDoc(); |
- ~CFDE_XMLDoc(); |
- virtual void Release() { delete this; } |
- virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, |
- int32_t iXMLPlaneSize = 8192, |
- int32_t iTextDataSize = 256, |
- FDE_LPXMLREADERHANDLER pHandler = NULL); |
- virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser); |
- virtual int32_t DoLoad(IFX_Pause* pPause = NULL); |
- virtual void CloseXML(); |
- virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } |
- virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE); |
- virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode); |
- |
- protected: |
- IFX_Stream* m_pStream; |
- int32_t m_iStatus; |
- CFDE_XMLNode* m_pRoot; |
- IFDE_XMLSyntaxParser* m_pSyntaxParser; |
- IFDE_XMLParser* m_pXMLParser; |
- void Reset(FX_BOOL bInitRoot); |
- void ReleaseParser(); |
-}; |
-typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack; |
-class CFDE_XMLDOMParser : public IFDE_XMLParser, public CFX_Target { |
- public: |
- CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, IFDE_XMLSyntaxParser* pParser); |
- ~CFDE_XMLDOMParser(); |
- |
- virtual void Release() { delete this; } |
- virtual int32_t DoParser(IFX_Pause* pPause); |
- |
- private: |
- IFDE_XMLSyntaxParser* m_pParser; |
- CFDE_XMLNode* m_pParent; |
- CFDE_XMLNode* m_pChild; |
- CFDE_XMLDOMNodeStack m_NodeStack; |
- CFX_WideString m_ws1; |
- CFX_WideString m_ws2; |
-}; |
-class CFDE_XMLTAG : public CFX_Target { |
- public: |
- CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {} |
- CFDE_XMLTAG(const CFDE_XMLTAG& src) |
- : wsTagName(src.wsTagName), eType(src.eType) {} |
- CFX_WideString wsTagName; |
- FDE_XMLNODETYPE eType; |
-}; |
-typedef CFX_ObjectStackTemplate<CFDE_XMLTAG> CFDE_XMLTagStack; |
-class CFDE_XMLSAXParser : public IFDE_XMLParser, public CFX_Target { |
- public: |
- CFDE_XMLSAXParser(FDE_LPXMLREADERHANDLER pHandler, |
- IFDE_XMLSyntaxParser* pParser); |
- ~CFDE_XMLSAXParser(); |
- |
- virtual void Release() { delete this; } |
- virtual int32_t DoParser(IFX_Pause* pPause); |
- |
- private: |
- void Push(const CFDE_XMLTAG& xmlTag); |
- void Pop(); |
- FDE_LPXMLREADERHANDLER m_pHandler; |
- IFDE_XMLSyntaxParser* m_pParser; |
- CFDE_XMLTagStack m_TagStack; |
- CFDE_XMLTAG* m_pTagTop; |
- CFX_WideString m_ws1; |
- CFX_WideString m_ws2; |
-}; |
-#ifdef _FDE_BLOCK_BUFFER |
-class CFDE_BlockBuffer : public CFX_Target { |
- public: |
- CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); |
- ~CFDE_BlockBuffer(); |
- |
- FX_BOOL InitBuffer(int32_t iBufferSize = 1024 * 1024); |
- FX_BOOL IsInitialized() { return m_iBufferSize / m_iAllocStep >= 1; } |
- void ReleaseBuffer() { delete this; } |
- FX_WCHAR* GetAvailableBlock(int32_t& iIndexInBlock); |
- inline int32_t GetAllocStep() const { return m_iAllocStep; } |
- inline int32_t& GetDataLengthRef() { return m_iDataLength; } |
- inline void Reset(FX_BOOL bReserveData = TRUE) { |
- if (!bReserveData) { |
- m_iStartPosition = 0; |
- } |
- m_iDataLength = 0; |
- } |
- void SetTextChar(int32_t iIndex, FX_WCHAR ch); |
- int32_t DeleteTextChars(int32_t iCount, FX_BOOL bDirection = TRUE); |
- void GetTextData(CFX_WideString& wsTextData, |
- int32_t iStart = 0, |
- int32_t iLength = -1) const; |
- |
- protected: |
- inline void TextDataIndex2BufIndex(const int32_t iIndex, |
- int32_t& iBlockIndex, |
- int32_t& iInnerIndex) const; |
- void ClearBuffer(); |
- CFX_PtrArray m_BlockArray; |
- int32_t m_iDataLength; |
- int32_t m_iBufferSize; |
- int32_t m_iAllocStep; |
- int32_t m_iStartPosition; |
-}; |
-#endif |
-#define FDE_XMLSYNTAXMODE_Text 0 |
-#define FDE_XMLSYNTAXMODE_Node 1 |
-#define FDE_XMLSYNTAXMODE_Target 2 |
-#define FDE_XMLSYNTAXMODE_Tag 3 |
-#define FDE_XMLSYNTAXMODE_AttriName 4 |
-#define FDE_XMLSYNTAXMODE_AttriEqualSign 5 |
-#define FDE_XMLSYNTAXMODE_AttriQuotation 6 |
-#define FDE_XMLSYNTAXMODE_AttriValue 7 |
-#define FDE_XMLSYNTAXMODE_Entity 8 |
-#define FDE_XMLSYNTAXMODE_EntityDecimal 9 |
-#define FDE_XMLSYNTAXMODE_EntityHex 10 |
-#define FDE_XMLSYNTAXMODE_CloseInstruction 11 |
-#define FDE_XMLSYNTAXMODE_BreakElement 12 |
-#define FDE_XMLSYNTAXMODE_CloseElement 13 |
-#define FDE_XMLSYNTAXMODE_SkipDeclNode 14 |
-#define FDE_XMLSYNTAXMODE_DeclCharData 15 |
-#define FDE_XMLSYNTAXMODE_SkipComment 16 |
-#define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17 |
-#define FDE_XMLSYNTAXMODE_TargetData 18 |
-class CFDE_XMLSyntaxParser : public IFDE_XMLSyntaxParser, public CFX_Target { |
- public: |
- CFDE_XMLSyntaxParser(); |
- ~CFDE_XMLSyntaxParser(); |
- virtual void Release() { delete this; } |
- virtual void Init(IFX_Stream* pStream, |
- int32_t iXMLPlaneSize, |
- int32_t iTextDataSize = 256); |
- virtual FX_DWORD DoSyntaxParse(); |
- virtual int32_t GetStatus() const; |
- virtual int32_t GetCurrentPos() const { |
- return m_iParsedChars + (m_pStart - m_pBuffer); |
- } |
- virtual FX_FILESIZE GetCurrentBinaryPos() const; |
- virtual int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; } |
- virtual int32_t GetLastNodeNumber() const { return m_iLastNodeNum; } |
-#ifdef _FDE_BLOCK_BUFFER |
- virtual void GetTargetName(CFX_WideString& wsTarget) const { |
- m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength); |
- } |
- virtual void GetTagName(CFX_WideString& wsTag) const { |
- m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength); |
- } |
- virtual void GetAttributeName(CFX_WideString& wsAttriName) const { |
- m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength); |
- } |
- virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { |
- m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength); |
- } |
- virtual void GetTextData(CFX_WideString& wsText) const { |
- m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength); |
- } |
- virtual void GetTargetData(CFX_WideString& wsData) const { |
- m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength); |
- } |
-#else |
- virtual void GetTargetName(CFX_WideString& wsTarget) const { |
- GetData(wsTarget); |
- } |
- virtual void GetTagName(CFX_WideString& wsTag) const { GetData(wsTag); } |
- virtual void GetAttributeName(CFX_WideString& wsAttriName) const { |
- GetData(wsAttriName); |
- } |
- virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { |
- GetData(wsAttriValue); |
- } |
- virtual void GetTextData(CFX_WideString& wsText) const { GetData(wsText); } |
- virtual void GetTargetData(CFX_WideString& wsData) const { GetData(wsData); } |
-#endif |
- protected: |
- IFX_Stream* m_pStream; |
- int32_t m_iXMLPlaneSize; |
- int32_t m_iCurrentPos; |
- int32_t m_iCurrentNodeNum; |
- int32_t m_iLastNodeNum; |
- int32_t m_iParsedChars; |
- int32_t m_iParsedBytes; |
- FX_WCHAR* m_pBuffer; |
- int32_t m_iBufferChars; |
- FX_BOOL m_bEOS; |
- FX_WCHAR* m_pStart; |
- FX_WCHAR* m_pEnd; |
- FDE_XMLNODE m_CurNode; |
- CFDE_XMLNodeStack m_XMLNodeStack; |
-#ifdef _FDE_BLOCK_BUFFER |
- CFDE_BlockBuffer m_BlockBuffer; |
- int32_t m_iAllocStep; |
- int32_t& m_iDataLength; |
- FX_WCHAR* m_pCurrentBlock; |
- int32_t m_iIndexInBlock; |
-#else |
- int32_t m_iTextDataSize; |
- FX_WCHAR* m_pwsTextData; |
- int32_t m_iDataPos; |
-#endif |
- int32_t m_iTextDataLength; |
- FX_DWORD m_dwStatus; |
- FX_DWORD m_dwMode; |
- FX_WCHAR m_wQuotationMark; |
- int32_t m_iEntityStart; |
- CFX_DWordStack m_SkipStack; |
- FX_WCHAR m_SkipChar; |
- inline void ParseTextChar(FX_WCHAR ch); |
-#ifndef _FDE_BLOCK_BUFFER |
- void ReallocTextDataBuffer(); |
- void GetData(CFX_WideString& wsData) const; |
-#endif |
-}; |
- |
-#endif // FDE_XML_IMP_H_ |
+// 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 FDE_XML_IMP_H_ |
+#define FDE_XML_IMP_H_ |
+ |
+#define _FDE_BLOCK_BUFFER |
+#ifdef _FDE_BLOCK_BUFFER |
+class CFDE_BlockBuffer; |
+#endif |
+class CFDE_XMLNode; |
+class CFDE_XMLInstruction; |
+class CFDE_XMLElement; |
+class CFDE_XMLText; |
+class CFDE_XMLDoc; |
+class IFDE_XMLParser; |
+class CFDE_XMLDOMParser; |
+class CFDE_XMLSAXParser; |
+class CFDE_XMLSyntaxParser; |
+class CFDE_XMLNode : public CFX_Target { |
+ public: |
+ CFDE_XMLNode(); |
+ virtual void Release() { delete this; } |
+ virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; } |
+ virtual int32_t CountChildNodes() const; |
+ virtual CFDE_XMLNode* GetChildNode(int32_t index) const; |
+ virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; |
+ virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, |
+ int32_t iLength = -1, |
+ FX_BOOL bQualifiedName = TRUE) const; |
+ virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); |
+ virtual void RemoveChildNode(CFDE_XMLNode* pNode); |
+ virtual void DeleteChildren(); |
+ virtual CFDE_XMLNode* GetNodeItem(IFDE_XMLNode::NodeItem eItem) const; |
+ virtual int32_t GetNodeLevel() const; |
+ virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem, |
+ CFDE_XMLNode* pNode); |
+ virtual CFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem); |
+ virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
+ virtual void SaveXMLNode(IFX_Stream* pXMLStream); |
+ |
+ public: |
+ ~CFDE_XMLNode(); |
+ void CloneChildren(CFDE_XMLNode* pClone); |
+ CFDE_XMLNode* m_pParent; |
+ CFDE_XMLNode* m_pChild; |
+ CFDE_XMLNode* m_pPrior; |
+ CFDE_XMLNode* m_pNext; |
+}; |
+class CFDE_XMLInstruction : public CFDE_XMLNode { |
+ public: |
+ CFDE_XMLInstruction(const CFX_WideString& wsTarget); |
+ virtual void Release() { delete this; } |
+ virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Instruction; } |
+ virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
+ virtual void GetTargetName(CFX_WideString& wsTarget) const { |
+ wsTarget = m_wsTarget; |
+ } |
+ virtual int32_t CountAttributes() const; |
+ virtual FX_BOOL GetAttribute(int32_t index, |
+ CFX_WideString& wsAttriName, |
+ CFX_WideString& wsAttriValue) const; |
+ virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
+ virtual void GetString(const FX_WCHAR* pwsAttriName, |
+ CFX_WideString& wsAttriValue, |
+ const FX_WCHAR* pwsDefValue = NULL) const; |
+ virtual void SetString(const CFX_WideString& wsAttriName, |
+ const CFX_WideString& wsAttriValue); |
+ virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, |
+ int32_t iDefValue = 0) const; |
+ virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
+ virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, |
+ FX_FLOAT fDefValue = 0) const; |
+ virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
+ virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
+ virtual int32_t CountData() const; |
+ virtual FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const; |
+ virtual void AppendData(const CFX_WideString& wsData); |
+ virtual void RemoveData(int32_t index); |
+ |
+ public: |
+ ~CFDE_XMLInstruction() {} |
+ CFX_WideString m_wsTarget; |
+ CFX_WideStringArray m_Attributes; |
+ CFX_WideStringArray m_TargetData; |
+}; |
+class CFDE_XMLElement : public CFDE_XMLNode { |
+ public: |
+ CFDE_XMLElement(const CFX_WideString& wsTag); |
+ virtual void Release() { delete this; } |
+ virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Element; } |
+ virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
+ virtual void GetTagName(CFX_WideString& wsTag) const; |
+ virtual void GetLocalTagName(CFX_WideString& wsTag) const; |
+ virtual void GetNamespacePrefix(CFX_WideString& wsPrefix) const; |
+ virtual void GetNamespaceURI(CFX_WideString& wsNamespace) const; |
+ virtual int32_t CountAttributes() const; |
+ virtual FX_BOOL GetAttribute(int32_t index, |
+ CFX_WideString& wsAttriName, |
+ CFX_WideString& wsAttriValue) const; |
+ virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
+ virtual void GetString(const FX_WCHAR* pwsAttriName, |
+ CFX_WideString& wsAttriValue, |
+ const FX_WCHAR* pwsDefValue = NULL) const; |
+ virtual void SetString(const CFX_WideString& wsAttriName, |
+ const CFX_WideString& wsAttriValue); |
+ virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, |
+ int32_t iDefValue = 0) const; |
+ virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
+ virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, |
+ FX_FLOAT fDefValue = 0) const; |
+ virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
+ virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
+ virtual void GetTextData(CFX_WideString& wsText) const; |
+ virtual void SetTextData(const CFX_WideString& wsText); |
+ |
+ public: |
+ ~CFDE_XMLElement(); |
+ CFX_WideString m_wsTag; |
+ CFX_WideStringArray m_Attributes; |
+}; |
+class CFDE_XMLText : public CFDE_XMLNode { |
+ public: |
+ CFDE_XMLText(const CFX_WideString& wsText); |
+ virtual void Release() { delete this; } |
+ virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Text; } |
+ virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
+ virtual void GetText(CFX_WideString& wsText) const { wsText = m_wsText; } |
+ virtual void SetText(const CFX_WideString& wsText) { m_wsText = wsText; } |
+ |
+ public: |
+ ~CFDE_XMLText() {} |
+ CFX_WideString m_wsText; |
+}; |
+class CFDE_XMLDeclaration : public CFDE_XMLNode { |
+ public: |
+ CFDE_XMLDeclaration() : CFDE_XMLNode() {} |
+}; |
+class CFDE_XMLCharData : public CFDE_XMLDeclaration { |
+ public: |
+ CFDE_XMLCharData(const CFX_WideString& wsCData); |
+ |
+ virtual void Release() { delete this; } |
+ virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_CharData; } |
+ virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
+ virtual void GetCharData(CFX_WideString& wsCharData) const { |
+ wsCharData = m_wsCharData; |
+ } |
+ virtual void SetCharData(const CFX_WideString& wsCData) { |
+ m_wsCharData = wsCData; |
+ } |
+ |
+ public: |
+ ~CFDE_XMLCharData() {} |
+ |
+ CFX_WideString m_wsCharData; |
+}; |
+class CFDE_XMLDoc : public CFX_Target { |
+ public: |
+ CFDE_XMLDoc(); |
+ ~CFDE_XMLDoc(); |
+ virtual void Release() { delete this; } |
+ virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, |
+ int32_t iXMLPlaneSize = 8192, |
+ int32_t iTextDataSize = 256, |
+ FDE_LPXMLREADERHANDLER pHandler = NULL); |
+ virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser); |
+ virtual int32_t DoLoad(IFX_Pause* pPause = NULL); |
+ virtual void CloseXML(); |
+ virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } |
+ virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE); |
+ virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode); |
+ |
+ protected: |
+ IFX_Stream* m_pStream; |
+ int32_t m_iStatus; |
+ CFDE_XMLNode* m_pRoot; |
+ IFDE_XMLSyntaxParser* m_pSyntaxParser; |
+ IFDE_XMLParser* m_pXMLParser; |
+ void Reset(FX_BOOL bInitRoot); |
+ void ReleaseParser(); |
+}; |
+typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack; |
+class CFDE_XMLDOMParser : public IFDE_XMLParser, public CFX_Target { |
+ public: |
+ CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, IFDE_XMLSyntaxParser* pParser); |
+ ~CFDE_XMLDOMParser(); |
+ |
+ virtual void Release() { delete this; } |
+ virtual int32_t DoParser(IFX_Pause* pPause); |
+ |
+ private: |
+ IFDE_XMLSyntaxParser* m_pParser; |
+ CFDE_XMLNode* m_pParent; |
+ CFDE_XMLNode* m_pChild; |
+ CFDE_XMLDOMNodeStack m_NodeStack; |
+ CFX_WideString m_ws1; |
+ CFX_WideString m_ws2; |
+}; |
+class CFDE_XMLTAG : public CFX_Target { |
+ public: |
+ CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {} |
+ CFDE_XMLTAG(const CFDE_XMLTAG& src) |
+ : wsTagName(src.wsTagName), eType(src.eType) {} |
+ CFX_WideString wsTagName; |
+ FDE_XMLNODETYPE eType; |
+}; |
+typedef CFX_ObjectStackTemplate<CFDE_XMLTAG> CFDE_XMLTagStack; |
+class CFDE_XMLSAXParser : public IFDE_XMLParser, public CFX_Target { |
+ public: |
+ CFDE_XMLSAXParser(FDE_LPXMLREADERHANDLER pHandler, |
+ IFDE_XMLSyntaxParser* pParser); |
+ ~CFDE_XMLSAXParser(); |
+ |
+ virtual void Release() { delete this; } |
+ virtual int32_t DoParser(IFX_Pause* pPause); |
+ |
+ private: |
+ void Push(const CFDE_XMLTAG& xmlTag); |
+ void Pop(); |
+ FDE_LPXMLREADERHANDLER m_pHandler; |
+ IFDE_XMLSyntaxParser* m_pParser; |
+ CFDE_XMLTagStack m_TagStack; |
+ CFDE_XMLTAG* m_pTagTop; |
+ CFX_WideString m_ws1; |
+ CFX_WideString m_ws2; |
+}; |
+#ifdef _FDE_BLOCK_BUFFER |
+class CFDE_BlockBuffer : public CFX_Target { |
+ public: |
+ CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); |
+ ~CFDE_BlockBuffer(); |
+ |
+ FX_BOOL InitBuffer(int32_t iBufferSize = 1024 * 1024); |
+ FX_BOOL IsInitialized() { return m_iBufferSize / m_iAllocStep >= 1; } |
+ void ReleaseBuffer() { delete this; } |
+ FX_WCHAR* GetAvailableBlock(int32_t& iIndexInBlock); |
+ inline int32_t GetAllocStep() const { return m_iAllocStep; } |
+ inline int32_t& GetDataLengthRef() { return m_iDataLength; } |
+ inline void Reset(FX_BOOL bReserveData = TRUE) { |
+ if (!bReserveData) { |
+ m_iStartPosition = 0; |
+ } |
+ m_iDataLength = 0; |
+ } |
+ void SetTextChar(int32_t iIndex, FX_WCHAR ch); |
+ int32_t DeleteTextChars(int32_t iCount, FX_BOOL bDirection = TRUE); |
+ void GetTextData(CFX_WideString& wsTextData, |
+ int32_t iStart = 0, |
+ int32_t iLength = -1) const; |
+ |
+ protected: |
+ inline void TextDataIndex2BufIndex(const int32_t iIndex, |
+ int32_t& iBlockIndex, |
+ int32_t& iInnerIndex) const; |
+ void ClearBuffer(); |
+ CFX_PtrArray m_BlockArray; |
+ int32_t m_iDataLength; |
+ int32_t m_iBufferSize; |
+ int32_t m_iAllocStep; |
+ int32_t m_iStartPosition; |
+}; |
+#endif |
+#define FDE_XMLSYNTAXMODE_Text 0 |
+#define FDE_XMLSYNTAXMODE_Node 1 |
+#define FDE_XMLSYNTAXMODE_Target 2 |
+#define FDE_XMLSYNTAXMODE_Tag 3 |
+#define FDE_XMLSYNTAXMODE_AttriName 4 |
+#define FDE_XMLSYNTAXMODE_AttriEqualSign 5 |
+#define FDE_XMLSYNTAXMODE_AttriQuotation 6 |
+#define FDE_XMLSYNTAXMODE_AttriValue 7 |
+#define FDE_XMLSYNTAXMODE_Entity 8 |
+#define FDE_XMLSYNTAXMODE_EntityDecimal 9 |
+#define FDE_XMLSYNTAXMODE_EntityHex 10 |
+#define FDE_XMLSYNTAXMODE_CloseInstruction 11 |
+#define FDE_XMLSYNTAXMODE_BreakElement 12 |
+#define FDE_XMLSYNTAXMODE_CloseElement 13 |
+#define FDE_XMLSYNTAXMODE_SkipDeclNode 14 |
+#define FDE_XMLSYNTAXMODE_DeclCharData 15 |
+#define FDE_XMLSYNTAXMODE_SkipComment 16 |
+#define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17 |
+#define FDE_XMLSYNTAXMODE_TargetData 18 |
+class CFDE_XMLSyntaxParser : public IFDE_XMLSyntaxParser, public CFX_Target { |
+ public: |
+ CFDE_XMLSyntaxParser(); |
+ ~CFDE_XMLSyntaxParser(); |
+ virtual void Release() { delete this; } |
+ virtual void Init(IFX_Stream* pStream, |
+ int32_t iXMLPlaneSize, |
+ int32_t iTextDataSize = 256); |
+ virtual FX_DWORD DoSyntaxParse(); |
+ virtual int32_t GetStatus() const; |
+ virtual int32_t GetCurrentPos() const { |
+ return m_iParsedChars + (m_pStart - m_pBuffer); |
+ } |
+ virtual FX_FILESIZE GetCurrentBinaryPos() const; |
+ virtual int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; } |
+ virtual int32_t GetLastNodeNumber() const { return m_iLastNodeNum; } |
+#ifdef _FDE_BLOCK_BUFFER |
+ virtual void GetTargetName(CFX_WideString& wsTarget) const { |
+ m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength); |
+ } |
+ virtual void GetTagName(CFX_WideString& wsTag) const { |
+ m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength); |
+ } |
+ virtual void GetAttributeName(CFX_WideString& wsAttriName) const { |
+ m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength); |
+ } |
+ virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { |
+ m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength); |
+ } |
+ virtual void GetTextData(CFX_WideString& wsText) const { |
+ m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength); |
+ } |
+ virtual void GetTargetData(CFX_WideString& wsData) const { |
+ m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength); |
+ } |
+#else |
+ virtual void GetTargetName(CFX_WideString& wsTarget) const { |
+ GetData(wsTarget); |
+ } |
+ virtual void GetTagName(CFX_WideString& wsTag) const { GetData(wsTag); } |
+ virtual void GetAttributeName(CFX_WideString& wsAttriName) const { |
+ GetData(wsAttriName); |
+ } |
+ virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { |
+ GetData(wsAttriValue); |
+ } |
+ virtual void GetTextData(CFX_WideString& wsText) const { GetData(wsText); } |
+ virtual void GetTargetData(CFX_WideString& wsData) const { GetData(wsData); } |
+#endif |
+ protected: |
+ IFX_Stream* m_pStream; |
+ int32_t m_iXMLPlaneSize; |
+ int32_t m_iCurrentPos; |
+ int32_t m_iCurrentNodeNum; |
+ int32_t m_iLastNodeNum; |
+ int32_t m_iParsedChars; |
+ int32_t m_iParsedBytes; |
+ FX_WCHAR* m_pBuffer; |
+ int32_t m_iBufferChars; |
+ FX_BOOL m_bEOS; |
+ FX_WCHAR* m_pStart; |
+ FX_WCHAR* m_pEnd; |
+ FDE_XMLNODE m_CurNode; |
+ CFDE_XMLNodeStack m_XMLNodeStack; |
+#ifdef _FDE_BLOCK_BUFFER |
+ CFDE_BlockBuffer m_BlockBuffer; |
+ int32_t m_iAllocStep; |
+ int32_t& m_iDataLength; |
+ FX_WCHAR* m_pCurrentBlock; |
+ int32_t m_iIndexInBlock; |
+#else |
+ int32_t m_iTextDataSize; |
+ FX_WCHAR* m_pwsTextData; |
+ int32_t m_iDataPos; |
+#endif |
+ int32_t m_iTextDataLength; |
+ FX_DWORD m_dwStatus; |
+ FX_DWORD m_dwMode; |
+ FX_WCHAR m_wQuotationMark; |
+ int32_t m_iEntityStart; |
+ CFX_DWordStack m_SkipStack; |
+ FX_WCHAR m_SkipChar; |
+ inline void ParseTextChar(FX_WCHAR ch); |
+#ifndef _FDE_BLOCK_BUFFER |
+ void ReallocTextDataBuffer(); |
+ void GetData(CFX_WideString& wsData) const; |
+#endif |
+}; |
+ |
+#endif // FDE_XML_IMP_H_ |