Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fdp / src / css / fde_cssdatatable.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_CSSDATATABLE\r
8 #define _FDE_CSSDATATABLE\r
9 class CFDE_CSSFunction: public CFX_Target\r
10 {\r
11 public:\r
12     CFDE_CSSFunction(FX_LPCWSTR pszFuncName, IFDE_CSSValueList *pArgList): m_pszFuncName(pszFuncName), m_pArgList(pArgList)\r
13     {\r
14         FXSYS_assert(pArgList != NULL);\r
15     }\r
16     int32_t                             CountArgs() const\r
17     {\r
18         return m_pArgList->CountValues();\r
19     }\r
20     IFDE_CSSValue*                      GetArgs(int32_t index) const\r
21     {\r
22         return m_pArgList->GetValue(index);\r
23     }\r
24     FX_LPCWSTR                          GetFuncName() const\r
25     {\r
26         return m_pszFuncName;\r
27     };\r
28 \r
29 protected:\r
30     IFDE_CSSValueList                           *m_pArgList;\r
31     FX_LPCWSTR                                          m_pszFuncName;\r
32 };\r
33 class CFDE_CSSPrimitiveValue : public IFDE_CSSPrimitiveValue, public CFX_Target\r
34 {\r
35 public:\r
36     CFDE_CSSPrimitiveValue(const CFDE_CSSPrimitiveValue &src)\r
37     {\r
38         *this = src;\r
39     }\r
40     CFDE_CSSPrimitiveValue(FX_ARGB color) : m_eType(FDE_CSSPRIMITIVETYPE_RGB), m_dwColor(color) { }\r
41     CFDE_CSSPrimitiveValue(FDE_CSSPROPERTYVALUE eValue) : m_eType(FDE_CSSPRIMITIVETYPE_Enum) , m_eEnum(eValue) { }\r
42     CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, FX_FLOAT fValue) : m_eType(eType), m_fNumber(fValue) { }\r
43     CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, FX_LPCWSTR pValue) : m_eType(eType), m_pString(pValue)\r
44     {\r
45         FXSYS_assert(m_pString != NULL);\r
46     }\r
47     CFDE_CSSPrimitiveValue(CFDE_CSSFunction *pFunction) : m_eType(FDE_CSSPRIMITIVETYPE_Function), m_pFunction(pFunction) {}\r
48 \r
49     virtual FDE_CSSPRIMITIVETYPE        GetPrimitiveType() const\r
50     {\r
51         return m_eType;\r
52     }\r
53 \r
54     virtual FX_ARGB                                     GetRGBColor() const\r
55     {\r
56         FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_RGB);\r
57         return m_dwColor;\r
58     }\r
59     virtual FX_FLOAT                            GetFloat() const\r
60     {\r
61         FXSYS_assert(m_eType >= FDE_CSSPRIMITIVETYPE_Number && m_eType <= FDE_CSSPRIMITIVETYPE_PC);\r
62         return m_fNumber;\r
63     }\r
64     virtual FX_LPCWSTR                          GetString(int32_t &iLength) const\r
65     {\r
66         FXSYS_assert(m_eType >= FDE_CSSPRIMITIVETYPE_String && m_eType <= FDE_CSSPRIMITIVETYPE_URI);\r
67         iLength = FXSYS_wcslen(m_pString);\r
68         return m_pString;\r
69     }\r
70     virtual FDE_CSSPROPERTYVALUE        GetEnum() const\r
71     {\r
72         FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Enum);\r
73         return m_eEnum;\r
74     }\r
75     virtual     FX_LPCWSTR                              GetFuncName() const\r
76     {\r
77         FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function);\r
78         return m_pFunction->GetFuncName();\r
79     }\r
80     virtual int32_t                             CountArgs() const\r
81     {\r
82         FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function);\r
83         return m_pFunction->CountArgs();\r
84     }\r
85     virtual IFDE_CSSValue*                      GetArgs(int32_t index) const\r
86     {\r
87         FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function);\r
88         return m_pFunction->GetArgs(index);\r
89     }\r
90 \r
91     FDE_CSSPRIMITIVETYPE                        m_eType;\r
92     union {\r
93         FX_ARGB                                         m_dwColor;\r
94         FX_FLOAT                                        m_fNumber;\r
95         FX_LPCWSTR                                      m_pString;\r
96         FDE_CSSPROPERTYVALUE            m_eEnum;\r
97         CFDE_CSSFunction                        *m_pFunction;\r
98     };\r
99 };\r
100 typedef CFX_ArrayTemplate<IFDE_CSSPrimitiveValue*> CFDE_CSSPrimitiveArray;\r
101 typedef CFX_ArrayTemplate<IFDE_CSSValue*> CFDE_CSSValueArray;\r
102 class CFDE_CSSValueList : public IFDE_CSSValueList, public CFX_Target\r
103 {\r
104 public:\r
105     CFDE_CSSValueList(IFX_MEMAllocator *pStaticStore, const CFDE_CSSValueArray &list);\r
106     virtual int32_t                             CountValues() const\r
107     {\r
108         return m_iCount;\r
109     }\r
110     virtual IFDE_CSSValue*                      GetValue(int32_t index) const\r
111     {\r
112         return m_ppList[index];\r
113     }\r
114 protected:\r
115     IFDE_CSSValue                                       **m_ppList;\r
116     int32_t                                             m_iCount;\r
117 };\r
118 class CFDE_CSSValueListParser : public CFX_Target\r
119 {\r
120 public:\r
121     CFDE_CSSValueListParser(FX_LPCWSTR psz, int32_t iLen, FX_WCHAR separator)\r
122         : m_Separator(separator), m_pCur(psz), m_pEnd(psz + iLen)\r
123     {\r
124         FXSYS_assert(psz != NULL && iLen > 0);\r
125     }\r
126     FX_BOOL                     NextValue(FDE_CSSPRIMITIVETYPE &eType, FX_LPCWSTR &pStart, int32_t &iLength);\r
127     FX_WCHAR            m_Separator;\r
128 protected:\r
129     int32_t             SkipTo(FX_WCHAR wch, FX_BOOL bWSSeparator = FALSE, FX_BOOL bBrContinue = FALSE);\r
130     FX_LPCWSTR          m_pCur;\r
131     FX_LPCWSTR          m_pEnd;\r
132 };\r
133 #ifdef _cplusplus\r
134 extern "C" {\r
135 #endif\r
136 #define FDE_CSSVALUETYPE_MaybeNumber    0x0100\r
137 #define FDE_CSSVALUETYPE_MaybeEnum              0x0200\r
138 #define FDE_CSSVALUETYPE_MaybeURI               0x0400\r
139 #define FDE_CSSVALUETYPE_MaybeString    0x0800\r
140 #define FDE_CSSVALUETYPE_MaybeColor             0x1000\r
141 #define FDE_CSSVALUETYPE_MaybeFunction  0x2000\r
142 #define FDE_IsOnlyValue(type,enum)              (((type) & ~(enum)) == FDE_CSSVALUETYPE_Primitive)\r
143     struct FDE_CSSPROPERTYTABLE {\r
144         FDE_CSSPROPERTY                 eName;\r
145         FX_LPCWSTR                              pszName;\r
146         FX_DWORD                                dwHash;\r
147         FX_DWORD                                dwType;\r
148     };\r
149     typedef FDE_CSSPROPERTYTABLE const * FDE_LPCCSSPROPERTYTABLE;\r
150 \r
151     FDE_LPCCSSPROPERTYTABLE             FDE_GetCSSPropertyByName(FX_LPCWSTR pszName, int32_t iLength);\r
152     FDE_LPCCSSPROPERTYTABLE             FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY eName);\r
153     struct FDE_CSSPROPERTYVALUETABLE {\r
154         FDE_CSSPROPERTYVALUE    eName;\r
155         FX_LPCWSTR                              pszName;\r
156         FX_DWORD                                dwHash;\r
157     };\r
158     typedef FDE_CSSPROPERTYVALUETABLE const * FDE_LPCCSSPROPERTYVALUETABLE;\r
159 \r
160     FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByName(FX_LPCWSTR pszName, int32_t iLength);\r
161     FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByEnum(FDE_CSSPROPERTYVALUE eName);\r
162     struct FDE_CSSMEDIATYPETABLE {\r
163         FX_WORD                                 wHash;\r
164         FX_WORD                                 wValue;\r
165     };\r
166     typedef FDE_CSSMEDIATYPETABLE const * FDE_LPCCSSMEDIATYPETABLE;\r
167     FDE_LPCCSSMEDIATYPETABLE    FDE_GetCSSMediaTypeByName(FX_LPCWSTR pszName, int32_t iLength);\r
168     struct FDE_CSSLENGTHUNITTABLE {\r
169         FX_WORD                                 wHash;\r
170         FX_WORD                                 wValue;\r
171     };\r
172     typedef FDE_CSSLENGTHUNITTABLE const * FDE_LPCCSSLENGTHUNITTABLE;\r
173     FDE_LPCCSSLENGTHUNITTABLE   FDE_GetCSSLengthUnitByName(FX_LPCWSTR pszName, int32_t iLength);\r
174     struct FDE_CSSCOLORTABLE {\r
175         FX_DWORD                                dwHash;\r
176         FX_ARGB                                 dwValue;\r
177     };\r
178     typedef FDE_CSSCOLORTABLE const * FDE_LPCCSSCOLORTABLE;\r
179     FDE_LPCCSSCOLORTABLE                FDE_GetCSSColorByName(FX_LPCWSTR pszName, int32_t iLength);\r
180     struct FDE_CSSPERSUDOTABLE {\r
181         FDE_CSSPERSUDO                  eName;\r
182         FX_LPCWSTR                              pszName;\r
183         FX_DWORD                                dwHash;\r
184     };\r
185     typedef FDE_CSSPERSUDOTABLE const * FDE_LPCCSSPERSUDOTABLE;\r
186 \r
187     FDE_LPCCSSPERSUDOTABLE              FDE_GetCSSPersudoByEnum(FDE_CSSPERSUDO ePersudo);\r
188     FX_BOOL     FDE_ParseCSSNumber(FX_LPCWSTR pszValue, int32_t iValueLen, FX_FLOAT &fValue, FDE_CSSPRIMITIVETYPE &eUnit);\r
189     FX_BOOL     FDE_ParseCSSString(FX_LPCWSTR pszValue, int32_t iValueLen, int32_t &iOffset, int32_t &iLength);\r
190     FX_BOOL     FDE_ParseCSSColor(FX_LPCWSTR pszValue, int32_t iValueLen, FX_ARGB &dwColor);\r
191     FX_BOOL     FDE_ParseCSSURI(FX_LPCWSTR pszValue, int32_t iValueLen, int32_t &iOffset, int32_t &iLength);\r
192 #ifdef _cplusplus\r
193 };\r
194 #endif\r
195 #endif\r