summaryrefslogtreecommitdiff
path: root/xfa/src/fgas/src/xml/fx_sax_imp.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fgas/src/xml/fx_sax_imp.h')
-rw-r--r--xfa/src/fgas/src/xml/fx_sax_imp.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/xfa/src/fgas/src/xml/fx_sax_imp.h b/xfa/src/fgas/src/xml/fx_sax_imp.h
new file mode 100644
index 0000000000..f18173183f
--- /dev/null
+++ b/xfa/src/fgas/src/xml/fx_sax_imp.h
@@ -0,0 +1,140 @@
+// 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 _FX_SAX_IMP_
+#define _FX_SAX_IMP_
+#define FX_SAXFILE_BUFSIZE 32768
+class CFX_SAXFile : public CFX_Object
+{
+public:
+ CFX_SAXFile();
+ FX_BOOL StartFile(IFX_FileRead *pFile, FX_DWORD dwStart, FX_DWORD dwLen);
+ FX_BOOL ReadNextBlock();
+ void Reset();
+ IFX_FileRead* m_pFile;
+ FX_DWORD m_dwStart;
+ FX_DWORD m_dwEnd;
+ FX_DWORD m_dwCur;
+ FX_LPBYTE m_pBuf;
+ FX_DWORD m_dwBufSize;
+ FX_DWORD m_dwBufIndex;
+};
+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 CFX_SAXItem : public CFX_Object
+{
+public:
+ CFX_SAXItem() : m_pNode(NULL)
+ , m_eNode(FX_SAXNODE_Unknown)
+ , m_dwID(0)
+ , m_bSkip(FALSE)
+ , m_pPrev(NULL)
+ , m_pNext(NULL)
+ {}
+ FX_LPVOID m_pNode;
+ FX_SAXNODE m_eNode;
+ FX_DWORD m_dwID;
+ FX_BOOL m_bSkip;
+ CFX_SAXItem* m_pPrev;
+ CFX_SAXItem* m_pNext;
+};
+class CFX_SAXCommentContext : public CFX_Object
+{
+public:
+ CFX_SAXCommentContext() : m_iHeaderCount(0)
+ , m_iTailCount(0)
+ {
+ }
+ FX_INT32 m_iHeaderCount;
+ FX_INT32 m_iTailCount;
+};
+class CFX_SAXReader : public IFX_SAXReader, public CFX_Object
+{
+public:
+ CFX_SAXReader();
+ ~CFX_SAXReader();
+ virtual void Release()
+ {
+ delete this;
+ }
+ virtual FX_INT32 StartParse(IFX_FileRead *pFile, FX_DWORD dwStart = 0, FX_DWORD dwLen = -1, FX_DWORD dwParseMode = 0);
+ virtual FX_INT32 ContinueParse(IFX_Pause *pPause = NULL);
+ virtual void SkipCurrentNode();
+ virtual void SetHandler(IFX_SAXReaderHandler *pHandler);
+ void AppendData(FX_BYTE ch);
+ void AppendName(FX_BYTE 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:
+ CFX_SAXFile m_File;
+ IFX_SAXReaderHandler* m_pHandler;
+ FX_INT32 m_iState;
+ CFX_SAXItem* m_pRoot;
+ CFX_SAXItem* m_pCurItem;
+ FX_DWORD m_dwItemID;
+ FX_SAXMODE m_eMode;
+ FX_SAXMODE m_ePrevMode;
+ FX_BOOL m_bCharData;
+ FX_BYTE m_CurByte;
+ FX_DWORD m_dwDataOffset;
+ CFX_ByteArray m_SkipStack;
+ FX_BYTE m_SkipChar;
+ FX_DWORD m_dwNodePos;
+ FX_LPBYTE m_pszData;
+ FX_INT32 m_iDataSize;
+ FX_INT32 m_iDataLength;
+ FX_INT32 m_iEntityStart;
+ FX_INT32 m_iDataPos;
+ FX_LPBYTE m_pszName;
+ FX_INT32 m_iNameSize;
+ FX_INT32 m_iNameLength;
+ FX_DWORD m_dwParseMode;
+ CFX_SAXCommentContext *m_pCommentContext;
+ void Reset();
+ void Push();
+ void Pop();
+ FX_BOOL SkipSpace(FX_BYTE ch);
+ void SkipNode();
+ void NotifyData();
+ void NotifyEnter();
+ void NotifyAttribute();
+ void NotifyBreak();
+ void NotifyClose();
+ void NotifyEnd();
+ void NotifyTargetData();
+ void ReallocDataBuffer();
+ void ReallocNameBuffer();
+ void ParseChar(FX_BYTE ch);
+};
+#endif