Index: xfa/fgas/xml/fgas_sax.h |
diff --git a/xfa/fgas/xml/fgas_sax.h b/xfa/fgas/xml/fgas_sax.h |
index 501c358e0f5175a2e92b2f6d32e4332aea5384b3..57ff6b2470a65cbc9838d14f72fdef0f3c65d41b 100644 |
--- a/xfa/fgas/xml/fgas_sax.h |
+++ b/xfa/fgas/xml/fgas_sax.h |
@@ -27,42 +27,137 @@ enum FX_SAXNODE { |
FX_SAXNODE_CharData, |
}; |
-class IFX_SAXReaderHandler { |
+enum FX_SAXMODE { |
+ FX_SAXMODE_Text = 0, |
+ FX_SAXMODE_NodeStart, |
+ FX_SAXMODE_DeclOrComment, |
+ FX_SAXMODE_DeclNode, |
+ FX_SAXMODE_Comment, |
+ FX_SAXMODE_CommentContent, |
+ FX_SAXMODE_TagName, |
+ FX_SAXMODE_TagAttributeName, |
+ FX_SAXMODE_TagAttributeEqual, |
+ FX_SAXMODE_TagAttributeValue, |
+ FX_SAXMODE_TagMaybeClose, |
+ FX_SAXMODE_TagClose, |
+ FX_SAXMODE_TagEnd, |
+ FX_SAXMODE_TargetData, |
+ FX_SAXMODE_MAX, |
+}; |
+ |
+class CXFA_SAXReaderHandler; |
+ |
+class CFX_SAXFile { |
+ public: |
+ CFX_SAXFile(); |
+ FX_BOOL StartFile(IFX_FileRead* pFile, uint32_t dwStart, uint32_t dwLen); |
+ FX_BOOL ReadNextBlock(); |
+ void Reset(); |
+ IFX_FileRead* m_pFile; |
+ uint32_t m_dwStart; |
+ uint32_t m_dwEnd; |
+ uint32_t m_dwCur; |
+ uint8_t* m_pBuf; |
+ uint32_t m_dwBufSize; |
+ uint32_t m_dwBufIndex; |
+}; |
+ |
+class CFX_SAXItem { |
public: |
- virtual ~IFX_SAXReaderHandler() {} |
- virtual void* OnTagEnter(const CFX_ByteStringC& bsTagName, |
- FX_SAXNODE eType, |
- uint32_t dwStartPos) = 0; |
- virtual void OnTagAttribute(void* pTag, |
- const CFX_ByteStringC& bsAttri, |
- const CFX_ByteStringC& bsValue) = 0; |
- virtual void OnTagBreak(void* pTag) = 0; |
- virtual void OnTagData(void* pTag, |
- FX_SAXNODE eType, |
- const CFX_ByteStringC& bsData, |
- uint32_t dwStartPos) = 0; |
- virtual void OnTagClose(void* pTag, uint32_t dwEndPos) = 0; |
- virtual void OnTagEnd(void* pTag, |
- const CFX_ByteStringC& bsTagName, |
- uint32_t dwEndPos) = 0; |
- virtual void OnTargetData(void* pTag, |
- FX_SAXNODE eType, |
- const CFX_ByteStringC& bsData, |
- uint32_t dwStartPos) = 0; |
+ CFX_SAXItem() |
+ : m_pNode(NULL), |
+ m_eNode(FX_SAXNODE_Unknown), |
+ m_dwID(0), |
+ m_bSkip(FALSE), |
+ m_pPrev(NULL), |
+ m_pNext(NULL) {} |
+ void* m_pNode; |
+ FX_SAXNODE m_eNode; |
+ uint32_t m_dwID; |
+ FX_BOOL m_bSkip; |
+ CFX_SAXItem* m_pPrev; |
+ CFX_SAXItem* m_pNext; |
}; |
-class IFX_SAXReader { |
+class CFX_SAXCommentContext { |
public: |
- virtual ~IFX_SAXReader() {} |
- virtual void Release() = 0; |
- virtual int32_t StartParse(IFX_FileRead* pFile, |
- uint32_t dwStart = 0, |
- uint32_t dwLen = -1, |
- uint32_t dwParseMode = 0) = 0; |
- virtual int32_t ContinueParse(IFX_Pause* pPause = NULL) = 0; |
- virtual void SkipCurrentNode() = 0; |
- virtual void SetHandler(IFX_SAXReaderHandler* pHandler) = 0; |
+ CFX_SAXCommentContext() : m_iHeaderCount(0), m_iTailCount(0) {} |
+ int32_t m_iHeaderCount; |
+ int32_t m_iTailCount; |
+}; |
+ |
+class CFX_SAXReader { |
+ public: |
+ CFX_SAXReader(); |
+ ~CFX_SAXReader(); |
+ |
+ void Release() { delete this; } |
+ int32_t StartParse(IFX_FileRead* pFile, |
+ uint32_t dwStart = 0, |
+ uint32_t dwLen = -1, |
+ uint32_t dwParseMode = 0); |
+ int32_t ContinueParse(IFX_Pause* pPause = NULL); |
+ void SkipCurrentNode(); |
+ void SetHandler(CXFA_SAXReaderHandler* pHandler); |
+ void AppendData(uint8_t ch); |
+ void AppendName(uint8_t ch); |
+ void ParseText(); |
+ void ParseNodeStart(); |
+ void ParseInstruction(); |
+ void ParseDeclOrComment(); |
+ void ParseDeclNode(); |
+ void ParseComment(); |
+ void ParseCommentContent(); |
+ void ParseTagName(); |
+ void ParseTagAttributeName(); |
+ void ParseTagAttributeEqual(); |
+ void ParseTagAttributeValue(); |
+ void ParseMaybeClose(); |
+ void ParseTagClose(); |
+ void ParseTagEnd(); |
+ void ParseTargetData(); |
+ |
+ protected: |
+ void Reset(); |
+ void Push(); |
+ void Pop(); |
+ FX_BOOL SkipSpace(uint8_t ch); |
+ void SkipNode(); |
+ void NotifyData(); |
+ void NotifyEnter(); |
+ void NotifyAttribute(); |
+ void NotifyBreak(); |
+ void NotifyClose(); |
+ void NotifyEnd(); |
+ void NotifyTargetData(); |
+ void ReallocDataBuffer(); |
+ void ReallocNameBuffer(); |
+ void ParseChar(uint8_t ch); |
+ |
+ CFX_SAXFile m_File; |
+ CXFA_SAXReaderHandler* m_pHandler; |
+ int32_t m_iState; |
+ CFX_SAXItem* m_pRoot; |
+ CFX_SAXItem* m_pCurItem; |
+ uint32_t m_dwItemID; |
+ FX_SAXMODE m_eMode; |
+ FX_SAXMODE m_ePrevMode; |
+ FX_BOOL m_bCharData; |
+ uint8_t m_CurByte; |
+ uint32_t m_dwDataOffset; |
+ CFX_ByteArray m_SkipStack; |
+ uint8_t m_SkipChar; |
+ uint32_t m_dwNodePos; |
+ uint8_t* m_pszData; |
+ int32_t m_iDataSize; |
+ int32_t m_iDataLength; |
+ int32_t m_iEntityStart; |
+ int32_t m_iDataPos; |
+ uint8_t* m_pszName; |
+ int32_t m_iNameSize; |
+ int32_t m_iNameLength; |
+ uint32_t m_dwParseMode; |
+ CFX_SAXCommentContext* m_pCommentContext; |
}; |
-IFX_SAXReader* FX_SAXReader_Create(); |
#endif // XFA_FGAS_XML_FGAS_SAX_H_ |