Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / src / css / fde_cssstylesheet.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_CSSSTYLESHEET\r
8 #define _FDE_CSSSTYLESHEET\r
9 #include "fde_cssdeclaration.h"\r
10 class CFDE_CSSSelector : public IFDE_CSSSelector, public CFX_Target\r
11 {\r
12 public:\r
13     CFDE_CSSSelector(FDE_CSSSELECTORTYPE eType, FX_LPCWSTR psz, FX_INT32 iLen, FX_BOOL bIgnoreCase)\r
14         : m_eType(eType), m_dwHash(FX_HashCode_String_GetW(psz, iLen, bIgnoreCase)), m_pNext(NULL)\r
15     {\r
16     }\r
17     virtual FDE_CSSSELECTORTYPE         GetType() const\r
18     {\r
19         return m_eType;\r
20     }\r
21 \r
22     virtual FX_DWORD                            GetNameHash() const\r
23     {\r
24         return m_dwHash;\r
25     }\r
26 \r
27     virtual IFDE_CSSSelector*           GetNextSelector() const\r
28     {\r
29         return m_pNext;\r
30     }\r
31     static IFDE_CSSSelector*            FromString(IFX_MEMAllocator *pStaticStore, FX_LPCWSTR psz, FX_INT32 iLen);\r
32     void                                                        SetNext(IFDE_CSSSelector *pNext)\r
33     {\r
34         m_pNext = pNext;\r
35     }\r
36 protected:\r
37     static CFDE_CSSSelector*            ParseSelector(IFX_MEMAllocator *pStaticStore, FX_LPCWSTR psz, FX_INT32 &iOff, FX_INT32 iLen, FDE_CSSSELECTORTYPE eType);\r
38     void                                                        SetType(FDE_CSSSELECTORTYPE eType)\r
39     {\r
40         m_eType =  eType;\r
41     }\r
42     FDE_CSSSELECTORTYPE                         m_eType;\r
43     FX_DWORD                                            m_dwHash;\r
44     IFDE_CSSSelector                            *m_pNext;\r
45 };\r
46 typedef CFX_ArrayTemplate<IFDE_CSSSelector*> CFDE_CSSSelectorArray;\r
47 class CFDE_CSSStyleRule : public IFDE_CSSStyleRule, public CFX_Target\r
48 {\r
49 public:\r
50     CFDE_CSSStyleRule() : m_ppSelector(NULL), m_iSelectors(0) { }\r
51     virtual FX_INT32                            CountSelectorLists() const\r
52     {\r
53         return m_iSelectors;\r
54     }\r
55     virtual IFDE_CSSSelector*           GetSelectorList(FX_INT32 index) const\r
56     {\r
57         return m_ppSelector[index];\r
58     }\r
59 \r
60     virtual IFDE_CSSDeclaration*        GetDeclaration() const\r
61     {\r
62         return (IFDE_CSSDeclaration*)&m_Declaration;\r
63     }\r
64     CFDE_CSSDeclaration&                        GetDeclImp()\r
65     {\r
66         return m_Declaration;\r
67     }\r
68     void                                                        SetSelector(IFX_MEMAllocator *pStaticStore, const CFDE_CSSSelectorArray &list);\r
69 protected:\r
70     CFDE_CSSDeclaration                         m_Declaration;\r
71     IFDE_CSSSelector                            **m_ppSelector;\r
72     FX_INT32                                            m_iSelectors;\r
73 };\r
74 class CFDE_CSSMediaRule : public IFDE_CSSMediaRule, public CFX_Target\r
75 {\r
76 public:\r
77     CFDE_CSSMediaRule(FX_DWORD dwMediaList) : m_dwMediaList(dwMediaList) { }\r
78     ~CFDE_CSSMediaRule();\r
79 \r
80     virtual FX_DWORD                            GetMediaList() const\r
81     {\r
82         return m_dwMediaList;\r
83     }\r
84 \r
85     virtual FX_INT32                            CountRules() const\r
86     {\r
87         return m_RuleArray.GetSize();\r
88     }\r
89     virtual IFDE_CSSRule*                       GetRule(FX_INT32 index)\r
90     {\r
91         return m_RuleArray.GetAt(index);\r
92     }\r
93     CFDE_CSSRuleArray&                          GetArray()\r
94     {\r
95         return m_RuleArray;\r
96     }\r
97 protected:\r
98     FX_DWORD                                            m_dwMediaList;\r
99     CFDE_CSSRuleArray                           m_RuleArray;\r
100 };\r
101 class CFDE_CSSFontFaceRule : public IFDE_CSSFontFaceRule, public CFX_Target\r
102 {\r
103 public:\r
104     virtual IFDE_CSSDeclaration*        GetDeclaration() const\r
105     {\r
106         return (IFDE_CSSDeclaration*)&m_Declaration;\r
107     }\r
108     CFDE_CSSDeclaration&                        GetDeclImp()\r
109     {\r
110         return m_Declaration;\r
111     }\r
112 protected:\r
113     CFDE_CSSDeclaration                         m_Declaration;\r
114 };\r
115 #define FDE_CSSSWITCHDEFAULTS()         case FDE_CSSSYNTAXSTATUS_EOS: \\r
116     return FDE_CSSSYNTAXSTATUS_EOS; \\r
117     case FDE_CSSSYNTAXSTATUS_Error: \\r
118     default: \\r
119     return FDE_CSSSYNTAXSTATUS_Error;\r
120 class CFDE_CSSStyleSheet : public IFDE_CSSStyleSheet, public CFX_Target\r
121 {\r
122 public:\r
123     CFDE_CSSStyleSheet(FX_DWORD dwMediaList);\r
124     ~CFDE_CSSStyleSheet();\r
125     virtual FX_DWORD                            AddRef();\r
126     virtual FX_DWORD                            Release();\r
127 \r
128     virtual FX_BOOL                                     GetUrl(CFX_WideString &szUrl)\r
129     {\r
130         szUrl = m_szUrl;\r
131         return szUrl.GetLength() > 0;\r
132     }\r
133     virtual FX_DWORD                            GetMediaList() const\r
134     {\r
135         return m_dwMediaList;\r
136     }\r
137     virtual FX_WORD                                     GetCodePage() const\r
138     {\r
139         return m_wCodePage;\r
140     }\r
141     virtual FX_INT32                            CountRules() const;\r
142     virtual IFDE_CSSRule*                       GetRule(FX_INT32 index);\r
143     FX_BOOL                                                     LoadFromStream(const CFX_WideString &szUrl, IFX_Stream *pStream, FX_WORD wCodePage);\r
144     FX_BOOL                                                     LoadFromBuffer(const CFX_WideString &szUrl, FX_LPCWSTR pBuffer, FX_INT32 iBufSize, FX_WORD wCodePage);\r
145 protected:\r
146     void                                                        Reset();\r
147     FX_BOOL                                                     LoadFromSyntax(IFDE_CSSSyntaxParser *pSyntax);\r
148     FDE_CSSSYNTAXSTATUS                         LoadStyleRule(IFDE_CSSSyntaxParser *pSyntax, CFDE_CSSRuleArray &ruleArray);\r
149     FDE_CSSSYNTAXSTATUS                         LoadImportRule(IFDE_CSSSyntaxParser *pSyntax);\r
150     FDE_CSSSYNTAXSTATUS                         LoadPageRule(IFDE_CSSSyntaxParser *pSyntax);\r
151     FDE_CSSSYNTAXSTATUS                         LoadMediaRule(IFDE_CSSSyntaxParser *pSyntax);\r
152     FDE_CSSSYNTAXSTATUS                         LoadFontFaceRule(IFDE_CSSSyntaxParser *pSyntax, CFDE_CSSRuleArray &ruleArray);\r
153     FDE_CSSSYNTAXSTATUS                         SkipRuleSet(IFDE_CSSSyntaxParser *pSyntax);\r
154     FX_WORD                                                     m_wCodePage;\r
155     FX_WORD                                                     m_wRefCount;\r
156     FX_DWORD                                            m_dwMediaList;\r
157     IFX_MEMAllocator                            *m_pAllocator;\r
158     CFDE_CSSRuleArray                           m_RuleArray;\r
159     CFX_WideString                                      m_szUrl;\r
160     CFDE_CSSSelectorArray                       m_Selectors;\r
161     CFX_MapPtrToPtr                                     m_StringCache;\r
162 };\r
163 #endif\r