diff options
Diffstat (limited to 'xfa/src/fdp/src/xml/fde_xml_imp.h')
-rw-r--r-- | xfa/src/fdp/src/xml/fde_xml_imp.h | 750 |
1 files changed, 375 insertions, 375 deletions
diff --git a/xfa/src/fdp/src/xml/fde_xml_imp.h b/xfa/src/fdp/src/xml/fde_xml_imp.h index 1a8097008e..cc83aa594e 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_ |