Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / src / css / fde_csssyntax.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 _FDE_CSSSYNTAX\r
8 #define _FDE_CSSSYNTAX\r
9 class CFDE_CSSTextBuf : public CFX_Target\r
10 {\r
11 public:\r
12     CFDE_CSSTextBuf();\r
13     ~CFDE_CSSTextBuf();\r
14     FX_BOOL                                                     AttachBuffer(FX_LPCWSTR pBuffer, FX_INT32 iBufLen);\r
15     FX_BOOL                                                     EstimateSize(FX_INT32 iAllocSize);\r
16     FX_INT32                                            LoadFromStream(IFX_Stream *pTxtStream, FX_INT32 iStreamOffset, FX_INT32 iMaxChars, FX_BOOL &bEOS);\r
17     FX_BOOL                                                     AppendChar(FX_WCHAR wch)\r
18     {\r
19         if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2)) {\r
20             return FALSE;\r
21         }\r
22         return (m_pBuffer[m_iDatLen++] = wch), TRUE;\r
23     }\r
24     void                                                        Clear()\r
25     {\r
26         m_iDatPos = m_iDatLen = 0;\r
27     }\r
28     void                                                        Reset();\r
29     FX_INT32                                            TrimEnd()\r
30     {\r
31         while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ') {\r
32             --m_iDatLen;\r
33         }\r
34         AppendChar(0);\r
35         return --m_iDatLen;\r
36     }\r
37     void                                                        Subtract(FX_INT32 iStart, FX_INT32 iLength);\r
38     FX_BOOL                                                     IsEOF() const\r
39     {\r
40         return m_iDatPos >= m_iDatLen;\r
41     }\r
42     FX_WCHAR                                            GetAt(FX_INT32 index) const\r
43     {\r
44         return m_pBuffer[index];\r
45     }\r
46     FX_WCHAR                                            GetChar() const\r
47     {\r
48         return m_pBuffer[m_iDatPos];\r
49     }\r
50     FX_WCHAR                                            GetNextChar() const\r
51     {\r
52         return (m_iDatPos + 1 >= m_iDatLen) ? 0 : m_pBuffer[m_iDatPos + 1];\r
53     }\r
54     void                                                        MoveNext()\r
55     {\r
56         m_iDatPos++;\r
57     }\r
58     FX_INT32                                            GetLength() const\r
59     {\r
60         return m_iDatLen;\r
61     }\r
62     FX_LPCWSTR                                          GetBuffer() const\r
63     {\r
64         return m_pBuffer;\r
65     }\r
66 protected:\r
67     FX_BOOL                                                     ExpandBuf(FX_INT32 iDesiredSize);\r
68     FX_BOOL                                                     m_bExtBuf;\r
69     FX_LPWSTR                                           m_pBuffer;\r
70     FX_INT32                                            m_iBufLen;\r
71     FX_INT32                                            m_iDatLen;\r
72     FX_INT32                                            m_iDatPos;\r
73 };\r
74 #define FDE_CSSSYNTAXCHECK_AllowCharset 1\r
75 #define FDE_CSSSYNTAXCHECK_AllowImport  2\r
76 enum FDE_CSSSYNTAXMODE {\r
77     FDE_CSSSYNTAXMODE_RuleSet,\r
78     FDE_CSSSYNTAXMODE_Comment,\r
79     FDE_CSSSYNTAXMODE_AtRule,\r
80     FDE_CSSSYNTAXMODE_UnknownRule,\r
81     FDE_CSSSYNTAXMODE_Charset,\r
82     FDE_CSSSYNTAXMODE_Import,\r
83     FDE_CSSSYNTAXMODE_MediaRule,\r
84     FDE_CSSSYNTAXMODE_URI,\r
85     FDE_CSSSYNTAXMODE_MediaType,\r
86     FDE_CSSSYNTAXMODE_Selector,\r
87     FDE_CSSSYNTAXMODE_PropertyName,\r
88     FDE_CSSSYNTAXMODE_PropertyValue,\r
89 };\r
90 class CFDE_CSSSyntaxParser : public IFDE_CSSSyntaxParser, public CFX_Target\r
91 {\r
92 public:\r
93     CFDE_CSSSyntaxParser();\r
94     ~CFDE_CSSSyntaxParser();\r
95     virtual void                                        Release()\r
96     {\r
97         FDE_Delete this;\r
98     }\r
99     virtual FX_BOOL                                     Init(IFX_Stream *pStream, FX_INT32 iCSSPlaneSize, FX_INT32 iTextDataSize = 32, FX_BOOL bOnlyDeclaration = FALSE);\r
100     virtual FX_BOOL                                     Init(FX_LPCWSTR pBuffer, FX_INT32 iBufferSize, FX_INT32 iTextDatSize = 32, FX_BOOL bOnlyDeclaration = FALSE);\r
101     virtual FDE_CSSSYNTAXSTATUS         DoSyntaxParse();\r
102     virtual FX_LPCWSTR                          GetCurrentString(FX_INT32 &iLength) const;\r
103 protected:\r
104     void                                                        Reset(FX_BOOL bOnlyDeclaration);\r
105     void                                                        SwitchMode(FDE_CSSSYNTAXMODE eMode);\r
106     FX_INT32                                            SwitchToComment();\r
107 \r
108     FX_BOOL                                                     RestoreMode();\r
109     FX_BOOL                                                     AppendChar(FX_WCHAR wch);\r
110     FX_INT32                                            SaveTextData();\r
111     FX_BOOL                                                     IsCharsetEnabled() const\r
112     {\r
113         return (m_dwCheck & FDE_CSSSYNTAXCHECK_AllowCharset) != 0;\r
114     }\r
115     void                                                        DisableCharset()\r
116     {\r
117         m_dwCheck = FDE_CSSSYNTAXCHECK_AllowImport;\r
118     }\r
119     FX_BOOL                                                     IsImportEnabled() const;\r
120     void                                                        DisableImport()\r
121     {\r
122         m_dwCheck = 0;\r
123     }\r
124     IFX_Stream                                          *m_pStream;\r
125     FX_INT32                                            m_iStreamPos;\r
126     FX_INT32                                            m_iPlaneSize;\r
127     CFDE_CSSTextBuf                                     m_TextData;\r
128     CFDE_CSSTextBuf                                     m_TextPlane;\r
129     FX_INT32                                            m_iTextDatLen;\r
130     FX_DWORD                                            m_dwCheck;\r
131     FDE_CSSSYNTAXMODE                           m_eMode;\r
132     FDE_CSSSYNTAXSTATUS                         m_eStatus;\r
133     CFX_StackTemplate<FDE_CSSSYNTAXMODE> m_ModeStack;\r
134 };\r
135 #endif\r