Index: xfa/fde/xml/fde_xml_imp.h |
diff --git a/xfa/fde/xml/fde_xml_imp.h b/xfa/fde/xml/fde_xml_imp.h |
index 5a0931f482d8403cd006dd7af4a845b345bf096f..b977d693d8d3ce9db5c7cc6651c7f499eb8d9453 100644 |
--- a/xfa/fde/xml/fde_xml_imp.h |
+++ b/xfa/fde/xml/fde_xml_imp.h |
@@ -11,6 +11,7 @@ |
#include "xfa/fde/xml/fde_xml.h" |
#include "xfa/fgas/crt/fgas_memory.h" |
#include "xfa/fgas/crt/fgas_stream.h" |
+#include "xfa/fgas/crt/fgas_utils.h" |
class CFDE_BlockBuffer; |
class CFDE_XMLInstruction; |
@@ -19,7 +20,6 @@ class CFDE_XMLText; |
class CFDE_XMLDoc; |
class CFDE_XMLDOMParser; |
class CFDE_XMLParser; |
-class CFDE_XMLSAXParser; |
class CFDE_XMLSyntaxParser; |
class CFDE_XMLNode : public CFX_Target { |
@@ -40,169 +40,177 @@ class CFDE_XMLNode : public CFX_Target { |
}; |
CFDE_XMLNode(); |
+ virtual ~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(CFDE_XMLNode::NodeItem eItem) const; |
- virtual int32_t GetNodeLevel() const; |
- virtual FX_BOOL InsertNodeItem(CFDE_XMLNode::NodeItem eItem, |
- CFDE_XMLNode* pNode); |
- virtual CFDE_XMLNode* RemoveNodeItem(CFDE_XMLNode::NodeItem eItem); |
virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); |
- virtual void SaveXMLNode(IFX_Stream* pXMLStream); |
- public: |
- ~CFDE_XMLNode(); |
+ int32_t CountChildNodes() const; |
+ CFDE_XMLNode* GetChildNode(int32_t index) const; |
+ int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; |
+ int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); |
+ void RemoveChildNode(CFDE_XMLNode* pNode); |
+ void DeleteChildren(); |
void CloneChildren(CFDE_XMLNode* pClone); |
+ |
+ CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, |
+ int32_t iLength = -1, |
+ FX_BOOL bQualifiedName = TRUE) const; |
+ |
+ int32_t GetNodeLevel() const; |
+ CFDE_XMLNode* GetNodeItem(CFDE_XMLNode::NodeItem eItem) const; |
+ FX_BOOL InsertNodeItem(CFDE_XMLNode::NodeItem eItem, CFDE_XMLNode* pNode); |
+ CFDE_XMLNode* RemoveNodeItem(CFDE_XMLNode::NodeItem eItem); |
+ |
+ void SaveXMLNode(IFX_Stream* pXMLStream); |
+ |
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 = nullptr) 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); |
+ ~CFDE_XMLInstruction() override {} |
+ |
+ // CFDE_XMLNode |
+ void Release() override { delete this; } |
+ FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Instruction; } |
+ CFDE_XMLNode* Clone(FX_BOOL bRecursive) override; |
+ |
+ void GetTargetName(CFX_WideString& wsTarget) const { wsTarget = m_wsTarget; } |
+ int32_t CountAttributes() const; |
+ FX_BOOL GetAttribute(int32_t index, |
+ CFX_WideString& wsAttriName, |
+ CFX_WideString& wsAttriValue) const; |
+ FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
+ void GetString(const FX_WCHAR* pwsAttriName, |
+ CFX_WideString& wsAttriValue, |
+ const FX_WCHAR* pwsDefValue = nullptr) const; |
+ void SetString(const CFX_WideString& wsAttriName, |
+ const CFX_WideString& wsAttriValue); |
+ int32_t GetInteger(const FX_WCHAR* pwsAttriName, int32_t iDefValue = 0) const; |
+ void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
+ FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fDefValue = 0) const; |
+ void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
+ void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
+ int32_t CountData() const; |
+ FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const; |
+ void AppendData(const CFX_WideString& wsData); |
+ 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 = nullptr) 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); |
+ ~CFDE_XMLElement() override; |
+ |
+ // CFDE_XMLNode |
+ void Release() override { delete this; } |
+ FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Element; } |
+ CFDE_XMLNode* Clone(FX_BOOL bRecursive) override; |
+ |
+ void GetTagName(CFX_WideString& wsTag) const; |
+ void GetLocalTagName(CFX_WideString& wsTag) const; |
+ |
+ void GetNamespacePrefix(CFX_WideString& wsPrefix) const; |
+ void GetNamespaceURI(CFX_WideString& wsNamespace) const; |
+ |
+ int32_t CountAttributes() const; |
+ FX_BOOL GetAttribute(int32_t index, |
+ CFX_WideString& wsAttriName, |
+ CFX_WideString& wsAttriValue) const; |
+ FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; |
+ void RemoveAttribute(const FX_WCHAR* pwsAttriName); |
+ |
+ void GetString(const FX_WCHAR* pwsAttriName, |
+ CFX_WideString& wsAttriValue, |
+ const FX_WCHAR* pwsDefValue = nullptr) const; |
+ void SetString(const CFX_WideString& wsAttriName, |
+ const CFX_WideString& wsAttriValue); |
+ |
+ int32_t GetInteger(const FX_WCHAR* pwsAttriName, int32_t iDefValue = 0) const; |
+ void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); |
+ |
+ FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fDefValue = 0) const; |
+ void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); |
+ |
+ void GetTextData(CFX_WideString& wsText) const; |
+ 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; } |
+ ~CFDE_XMLText() override {} |
+ |
+ // CFDE_XMLNode |
+ void Release() override { delete this; } |
+ FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Text; } |
+ CFDE_XMLNode* Clone(FX_BOOL bRecursive) override; |
+ |
+ void GetText(CFX_WideString& wsText) const { wsText = m_wsText; } |
+ 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() {} |
+ ~CFDE_XMLDeclaration() override {} |
}; |
+ |
class CFDE_XMLCharData : public CFDE_XMLDeclaration { |
public: |
CFDE_XMLCharData(const CFX_WideString& wsCData); |
+ ~CFDE_XMLCharData() override {} |
- 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 { |
+ void Release() override { delete this; } |
+ FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_CharData; } |
+ CFDE_XMLNode* Clone(FX_BOOL bRecursive) override; |
+ |
+ void GetCharData(CFX_WideString& wsCharData) const { |
wsCharData = m_wsCharData; |
} |
- virtual void SetCharData(const CFX_WideString& wsCData) { |
- m_wsCharData = wsCData; |
- } |
- |
- public: |
- ~CFDE_XMLCharData() {} |
+ void SetCharData(const CFX_WideString& wsCData) { m_wsCharData = wsCData; } |
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_XMLREADERHANDLER* pHandler = nullptr); |
- virtual FX_BOOL LoadXML(CFDE_XMLParser* pXMLParser); |
- virtual int32_t DoLoad(IFX_Pause* pPause = nullptr); |
- virtual void CloseXML(); |
- virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } |
- virtual void SaveXML(IFX_Stream* pXMLStream = nullptr, |
- FX_BOOL bSaveBOM = TRUE); |
- virtual void SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pNode); |
+ ~CFDE_XMLDoc() override; |
+ |
+ void Release() { delete this; } |
+ FX_BOOL LoadXML(CFDE_XMLParser* pXMLParser); |
+ int32_t DoLoad(IFX_Pause* pPause = nullptr); |
+ void CloseXML(); |
+ CFDE_XMLNode* GetRoot() const { return m_pRoot; } |
+ void SaveXML(IFX_Stream* pXMLStream = nullptr, FX_BOOL bSaveBOM = TRUE); |
+ void SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pNode); |
protected: |
+ void Reset(FX_BOOL bInitRoot); |
+ void ReleaseParser(); |
+ |
IFX_Stream* m_pStream; |
int32_t m_iStatus; |
CFDE_XMLNode* m_pRoot; |
CFDE_XMLSyntaxParser* m_pSyntaxParser; |
CFDE_XMLParser* m_pXMLParser; |
- void Reset(FX_BOOL bInitRoot); |
- void ReleaseParser(); |
}; |
-typedef CFX_StackTemplate<CFDE_XMLNode*> CFDE_XMLDOMNodeStack; |
class CFDE_XMLParser { |
public: |
@@ -212,51 +220,6 @@ class CFDE_XMLParser { |
virtual int32_t DoParser(IFX_Pause* pPause) = 0; |
}; |
-class CFDE_XMLDOMParser : public CFDE_XMLParser, public CFX_Target { |
- public: |
- CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, CFDE_XMLSyntaxParser* pParser); |
- ~CFDE_XMLDOMParser(); |
- |
- virtual void Release() { delete this; } |
- virtual int32_t DoParser(IFX_Pause* pPause); |
- |
- private: |
- CFDE_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 CFDE_XMLParser, public CFX_Target { |
- public: |
- CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, |
- CFDE_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_XMLREADERHANDLER* m_pHandler; |
- CFDE_XMLSyntaxParser* m_pParser; |
- CFDE_XMLTagStack m_TagStack; |
- CFDE_XMLTAG* m_pTagTop; |
- CFX_WideString m_ws1; |
- CFX_WideString m_ws2; |
-}; |
- |
class CFDE_BlockBuffer : public CFX_Target { |
public: |
CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); |
@@ -285,6 +248,7 @@ class CFDE_BlockBuffer : public CFX_Target { |
int32_t& iBlockIndex, |
int32_t& iInnerIndex) const; |
void ClearBuffer(); |
+ |
CFX_ArrayTemplate<FX_WCHAR*> m_BlockArray; |
int32_t m_iDataLength; |
int32_t m_iBufferSize; |
@@ -296,11 +260,14 @@ class CFDE_XMLSyntaxParser : public CFX_Target { |
public: |
CFDE_XMLSyntaxParser(); |
~CFDE_XMLSyntaxParser(); |
+ |
void Release() { delete this; } |
void Init(IFX_Stream* pStream, |
int32_t iXMLPlaneSize, |
int32_t iTextDataSize = 256); |
+ |
FDE_XmlSyntaxResult DoSyntaxParse(); |
+ |
int32_t GetStatus() const; |
int32_t GetCurrentPos() const { |
return m_iParsedChars + (m_pStart - m_pBuffer); |
@@ -352,6 +319,8 @@ class CFDE_XMLSyntaxParser : public CFX_Target { |
TargetData |
}; |
+ void ParseTextChar(FX_WCHAR ch); |
+ |
IFX_Stream* m_pStream; |
int32_t m_iXMLPlaneSize; |
int32_t m_iCurrentPos; |
@@ -365,7 +334,7 @@ class CFDE_XMLSyntaxParser : public CFX_Target { |
FX_WCHAR* m_pStart; |
FX_WCHAR* m_pEnd; |
FDE_XMLNODE m_CurNode; |
- CFDE_XMLNodeStack m_XMLNodeStack; |
+ CFX_StackTemplate<FDE_XMLNODE> m_XMLNodeStack; |
CFDE_BlockBuffer m_BlockBuffer; |
int32_t m_iAllocStep; |
int32_t& m_iDataLength; |
@@ -378,7 +347,6 @@ class CFDE_XMLSyntaxParser : public CFX_Target { |
int32_t m_iEntityStart; |
CFX_DWordStack m_SkipStack; |
FX_WCHAR m_SkipChar; |
- inline void ParseTextChar(FX_WCHAR ch); |
}; |
#endif // XFA_FDE_XML_FDE_XML_IMP_H_ |