Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fgas / src / xml / fx_sax_imp.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FX_SAX_IMP_\r
8 #define _FX_SAX_IMP_\r
9 #define FX_SAXFILE_BUFSIZE      32768\r
10 class CFX_SAXFile\r
11 {\r
12 public:\r
13     CFX_SAXFile();\r
14     FX_BOOL             StartFile(IFX_FileRead *pFile, FX_DWORD dwStart, FX_DWORD dwLen);\r
15     FX_BOOL             ReadNextBlock();\r
16     void                Reset();\r
17     IFX_FileRead*       m_pFile;\r
18     FX_DWORD            m_dwStart;\r
19     FX_DWORD            m_dwEnd;\r
20     FX_DWORD            m_dwCur;\r
21     FX_LPBYTE           m_pBuf;\r
22     FX_DWORD            m_dwBufSize;\r
23     FX_DWORD            m_dwBufIndex;\r
24 };\r
25 enum FX_SAXMODE {\r
26     FX_SAXMODE_Text = 0,\r
27     FX_SAXMODE_NodeStart,\r
28     FX_SAXMODE_DeclOrComment,\r
29     FX_SAXMODE_DeclNode,\r
30     FX_SAXMODE_Comment,\r
31     FX_SAXMODE_CommentContent,\r
32     FX_SAXMODE_TagName,\r
33     FX_SAXMODE_TagAttributeName,\r
34     FX_SAXMODE_TagAttributeEqual,\r
35     FX_SAXMODE_TagAttributeValue,\r
36     FX_SAXMODE_TagMaybeClose,\r
37     FX_SAXMODE_TagClose,\r
38     FX_SAXMODE_TagEnd,\r
39     FX_SAXMODE_TargetData,\r
40     FX_SAXMODE_MAX,\r
41 };\r
42 class CFX_SAXItem\r
43 {\r
44 public:\r
45     CFX_SAXItem() : m_pNode(NULL)\r
46         , m_eNode(FX_SAXNODE_Unknown)\r
47         , m_dwID(0)\r
48         , m_bSkip(FALSE)\r
49         , m_pPrev(NULL)\r
50         , m_pNext(NULL)\r
51     {}\r
52     FX_LPVOID           m_pNode;\r
53     FX_SAXNODE          m_eNode;\r
54     FX_DWORD            m_dwID;\r
55     FX_BOOL                     m_bSkip;\r
56     CFX_SAXItem*        m_pPrev;\r
57     CFX_SAXItem*        m_pNext;\r
58 };\r
59 class CFX_SAXCommentContext\r
60 {\r
61 public:\r
62     CFX_SAXCommentContext() : m_iHeaderCount(0)\r
63         , m_iTailCount(0)\r
64     {\r
65     }\r
66     int32_t             m_iHeaderCount;\r
67     int32_t             m_iTailCount;\r
68 };\r
69 class CFX_SAXReader : public IFX_SAXReader\r
70 {\r
71 public:\r
72     CFX_SAXReader();\r
73     ~CFX_SAXReader();\r
74     virtual void                Release()\r
75     {\r
76         delete this;\r
77     }\r
78     virtual int32_t     StartParse(IFX_FileRead *pFile, FX_DWORD dwStart = 0, FX_DWORD dwLen = -1, FX_DWORD dwParseMode = 0);\r
79     virtual int32_t     ContinueParse(IFX_Pause *pPause = NULL);\r
80     virtual void                SkipCurrentNode();\r
81     virtual void                SetHandler(IFX_SAXReaderHandler *pHandler);\r
82     void                AppendData(uint8_t ch);\r
83     void                AppendName(uint8_t ch);\r
84     void                ParseText();\r
85     void                ParseNodeStart();\r
86     void                ParseInstruction();\r
87     void                ParseDeclOrComment();\r
88     void                ParseDeclNode();\r
89     void                ParseComment();\r
90     void                ParseCommentContent();\r
91     void                ParseTagName();\r
92     void                ParseTagAttributeName();\r
93     void                ParseTagAttributeEqual();\r
94     void                ParseTagAttributeValue();\r
95     void                ParseMaybeClose();\r
96     void                ParseTagClose();\r
97     void                ParseTagEnd();\r
98     void                ParseTargetData();\r
99 protected:\r
100     CFX_SAXFile                         m_File;\r
101     IFX_SAXReaderHandler*       m_pHandler;\r
102     int32_t                             m_iState;\r
103     CFX_SAXItem*                        m_pRoot;\r
104     CFX_SAXItem*                        m_pCurItem;\r
105     FX_DWORD                            m_dwItemID;\r
106     FX_SAXMODE                          m_eMode;\r
107     FX_SAXMODE                          m_ePrevMode;\r
108     FX_BOOL                                     m_bCharData;\r
109     uint8_t                                     m_CurByte;\r
110     FX_DWORD                            m_dwDataOffset;\r
111     CFX_ByteArray                       m_SkipStack;\r
112     uint8_t                                     m_SkipChar;\r
113     FX_DWORD                            m_dwNodePos;\r
114     FX_LPBYTE                           m_pszData;\r
115     int32_t                             m_iDataSize;\r
116     int32_t                             m_iDataLength;\r
117     int32_t                             m_iEntityStart;\r
118     int32_t                             m_iDataPos;\r
119     FX_LPBYTE                           m_pszName;\r
120     int32_t                             m_iNameSize;\r
121     int32_t                             m_iNameLength;\r
122     FX_DWORD                            m_dwParseMode;\r
123     CFX_SAXCommentContext       *m_pCommentContext;\r
124     void                Reset();\r
125     void                Push();\r
126     void                Pop();\r
127     FX_BOOL             SkipSpace(uint8_t ch);\r
128     void                SkipNode();\r
129     void                NotifyData();\r
130     void                NotifyEnter();\r
131     void                NotifyAttribute();\r
132     void                NotifyBreak();\r
133     void                NotifyClose();\r
134     void                NotifyEnd();\r
135     void                NotifyTargetData();\r
136     void                ReallocDataBuffer();\r
137     void                ReallocNameBuffer();\r
138     void                ParseChar(uint8_t ch);\r
139 };\r
140 #endif\r