1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef _FDE_CSSDECLARATION
8 #define _FDE_CSSDECLARATION
9 #include "fde_cssdatatable.h"
10 typedef struct _FDE_CSSPROPERTYHOLDER : public CFX_Target {
11   int16_t eProperty;
12   int16_t bImportant;
13   IFDE_CSSValue* pValue;
14   _FDE_CSSPROPERTYHOLDER* pNext;
15 } FDE_CSSPROPERTYHOLDER, *FDE_LPCSSPROPERTYHOLDER;
16 typedef struct _FDE_CSSCUSTOMPROPERTY : public CFX_Target {
17   const FX_WCHAR* pwsName;
18   const FX_WCHAR* pwsValue;
19   _FDE_CSSCUSTOMPROPERTY* pNext;
20 } FDE_CSSCUSTOMPROPERTY, *FDE_LPCSSCUSTOMPROPERTY;
21 typedef struct _FDE_CSSPROPERTYARGS : public CFX_Target {
22   IFX_MEMAllocator* pStaticStore;
23   CFX_MapPtrToPtr* pStringCache;
24   FDE_LPCCSSPROPERTYTABLE pProperty;
25 } FDE_CSSPROPERTYARGS;
26 typedef FDE_CSSPROPERTYARGS const* FDE_LPCCSSPROPERTYARGS;
27 class CFDE_CSSDeclaration : public IFDE_CSSDeclaration, public CFX_Target {
28  public:
CFDE_CSSDeclaration()29   CFDE_CSSDeclaration()
30       : m_pFirstProperty(NULL),
31         m_pLastProperty(NULL),
32         m_pFirstCustom(NULL),
33         m_pLastCustom(NULL) {}
34   virtual IFDE_CSSValue* GetProperty(FDE_CSSPROPERTY eProperty,
35                                      FX_BOOL& bImportant) const;
36   virtual FX_POSITION GetStartPosition() const;
37   virtual void GetNextProperty(FX_POSITION& pos,
38                                FDE_CSSPROPERTY& eProperty,
39                                IFDE_CSSValue*& pValue,
40                                FX_BOOL& bImportant) const;
41   virtual FX_POSITION GetStartCustom() const;
42   virtual void GetNextCustom(FX_POSITION& pos,
43                              CFX_WideString& wsName,
44                              CFX_WideString& wsValue) const;
45   FX_BOOL AddProperty(FDE_LPCCSSPROPERTYARGS pArgs,
46                       const FX_WCHAR* pszValue,
47                       int32_t iValueLen);
48   FX_BOOL AddProperty(FDE_LPCCSSPROPERTYARGS pArgs,
49                       const FX_WCHAR* pszName,
50                       int32_t iNameLen,
51                       const FX_WCHAR* pszValue,
52                       int32_t iValueLen);
53 
54  protected:
55   FX_BOOL ParseTextEmphasisProperty(FDE_LPCCSSPROPERTYARGS pArgs,
56                                     const FX_WCHAR* pszValue,
57                                     int32_t iValueLen,
58                                     FX_BOOL bImportant);
59   FX_BOOL ParseColumnsProperty(FDE_LPCCSSPROPERTYARGS pArgs,
60                                const FX_WCHAR* pszValue,
61                                int32_t iValueLen,
62                                FX_BOOL bImportant);
63   FX_BOOL ParseColumnRuleProperty(FDE_LPCCSSPROPERTYARGS pArgs,
64                                   const FX_WCHAR* pszValue,
65                                   int32_t iValueLen,
66                                   FX_BOOL bImportant);
67   FX_BOOL ParseOverflowProperty(FDE_LPCCSSPROPERTYARGS pArgs,
68                                 const FX_WCHAR* pszValue,
69                                 int32_t iValueLen,
70                                 FX_BOOL bImportant);
71   FX_BOOL ParseFontProperty(FDE_LPCCSSPROPERTYARGS pArgs,
72                             const FX_WCHAR* pszValue,
73                             int32_t iValueLen,
74                             FX_BOOL bImportant);
75   FX_BOOL ParseBackgroundProperty(FDE_LPCCSSPROPERTYARGS pArgs,
76                                   const FX_WCHAR* pszValue,
77                                   int32_t iValueLen,
78                                   FX_BOOL bImportant);
79   FX_BOOL ParseListStyleProperty(FDE_LPCCSSPROPERTYARGS pArgs,
80                                  const FX_WCHAR* pszValue,
81                                  int32_t iValueLen,
82                                  FX_BOOL bImportant);
83   FX_BOOL ParseBorderPropoerty(IFX_MEMAllocator* pStaticStore,
84                                const FX_WCHAR* pszValue,
85                                int32_t iValueLen,
86                                IFDE_CSSValue*& pColor,
87                                IFDE_CSSValue*& pStyle,
88                                IFDE_CSSValue*& pWidth) const;
89   void AddBorderProperty(IFX_MEMAllocator* pStaticStore,
90                          IFDE_CSSValue* pColor,
91                          IFDE_CSSValue* pStyle,
92                          IFDE_CSSValue* pWidth,
93                          FX_BOOL bImportant,
94                          FDE_CSSPROPERTY eColor,
95                          FDE_CSSPROPERTY eStyle,
96                          FDE_CSSPROPERTY eWidth);
97   FX_BOOL ParseContentProperty(FDE_LPCCSSPROPERTYARGS pArgs,
98                                const FX_WCHAR* pszValue,
99                                int32_t iValueLen,
100                                FX_BOOL bImportant);
101   FX_BOOL ParseCounterProperty(FDE_LPCCSSPROPERTYARGS pArgs,
102                                const FX_WCHAR* pszValue,
103                                int32_t iValueLen,
104                                FX_BOOL bImportant);
105   FX_BOOL ParseValueListProperty(FDE_LPCCSSPROPERTYARGS pArgs,
106                                  const FX_WCHAR* pszValue,
107                                  int32_t iValueLen,
108                                  FX_BOOL bImportant);
109   FX_BOOL Add4ValuesProperty(IFX_MEMAllocator* pStaticStore,
110                              const CFDE_CSSValueArray& list,
111                              FX_BOOL bImportant,
112                              FDE_CSSPROPERTY eLeft,
113                              FDE_CSSPROPERTY eTop,
114                              FDE_CSSPROPERTY eRight,
115                              FDE_CSSPROPERTY eBottom);
116   IFDE_CSSValue* ParseNumber(FDE_LPCCSSPROPERTYARGS pArgs,
117                              const FX_WCHAR* pszValue,
118                              int32_t iValueLen);
119   IFDE_CSSValue* ParseEnum(FDE_LPCCSSPROPERTYARGS pArgs,
120                            const FX_WCHAR* pszValue,
121                            int32_t iValueLen);
122   IFDE_CSSValue* ParseColor(FDE_LPCCSSPROPERTYARGS pArgs,
123                             const FX_WCHAR* pszValue,
124                             int32_t iValueLen);
125   IFDE_CSSValue* ParseURI(FDE_LPCCSSPROPERTYARGS pArgs,
126                           const FX_WCHAR* pszValue,
127                           int32_t iValueLen);
128   IFDE_CSSValue* ParseString(FDE_LPCCSSPROPERTYARGS pArgs,
129                              const FX_WCHAR* pszValue,
130                              int32_t iValueLen);
131   IFDE_CSSValue* ParseFunction(FDE_LPCCSSPROPERTYARGS pArgs,
132                                const FX_WCHAR* pszValue,
133                                int32_t iValueLen);
134   const FX_WCHAR* CopyToLocal(FDE_LPCCSSPROPERTYARGS pArgs,
135                               const FX_WCHAR* pszValue,
136                               int32_t iValueLen);
137   void AddPropertyHolder(IFX_MEMAllocator* pStaticStore,
138                          FDE_CSSPROPERTY eProperty,
139                          IFDE_CSSValue* pValue,
140                          FX_BOOL bImportant);
141   IFDE_CSSPrimitiveValue* NewNumberValue(IFX_MEMAllocator* pStaticStore,
142                                          FDE_CSSPRIMITIVETYPE eUnit,
143                                          FX_FLOAT fValue) const;
144   IFDE_CSSPrimitiveValue* NewEnumValue(IFX_MEMAllocator* pStaticStore,
145                                        FDE_CSSPROPERTYVALUE eValue) const;
146   FDE_LPCSSPROPERTYHOLDER m_pFirstProperty;
147   FDE_LPCSSPROPERTYHOLDER m_pLastProperty;
148   FDE_LPCSSCUSTOMPROPERTY m_pFirstCustom;
149   FDE_LPCSSCUSTOMPROPERTY m_pLastCustom;
150 };
151 #endif
152