Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / include / fde_css.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_CSS\r
8 #define _FDE_CSS\r
9 class IFDE_HTMNotify;\r
10 class IFDE_CSSValue;\r
11 class IFDE_CSSPrimitiveValue;\r
12 class IFDE_CSSValueList;\r
13 class IFDE_CSSDeclaration;\r
14 class IFDE_CSSSelector;\r
15 class IFDE_CSSRule;\r
16 class IFDE_CSSStyleRule;\r
17 class IFDE_CSSMediaRule;\r
18 class IFDE_CSSFontFaceRule;\r
19 class IFDE_CSSStyleSheet;\r
20 class IFDE_CSSStyleSheetCache;\r
21 class IFDE_CSSSyntaxParser;\r
22 class IFDE_CSSRubyStyle;\r
23 class IFDE_CSSMultiColumnStyle;\r
24 class IFDE_CSSGeneratedContentStyle;\r
25 class IFDE_CSSFontStyle;\r
26 class IFDE_CSSBoundaryStyle;\r
27 class IFDE_CSSPositionStyle;\r
28 class IFDE_CSSParagraphStyle;\r
29 class IFDE_CSSBackgroundStyle;\r
30 class IFDE_CSSListStyle;\r
31 class IFDE_CSSTableStyle;\r
32 class IFDE_CSSVisualStyle;\r
33 class IFDE_CSSComputedStyle;\r
34 class IFDE_CSSTagProvider;\r
35 class IFDE_CSSAccelerator;\r
36 class IFDE_CSSStyleSelector;\r
37 class IFDE_CSSCounterContext;\r
38 class IFDE_CSSCounterManager;\r
39 class IFDE_CSSQuoteContext;\r
40 class IFDE_CSSContentContext;\r
41 class IFDE_CSSMultiColumnContext;\r
42 class IFDE_CSSFloatContext;\r
43 enum FDE_CSSVALUETYPE {\r
44     FDE_CSSVALUETYPE_Primitive          = 1,\r
45     FDE_CSSVALUETYPE_List                       = 2,\r
46     FDE_CSSVALUETYPE_Shorthand,\r
47 };\r
48 enum FDE_CSSPRIMITIVETYPE {\r
49     FDE_CSSPRIMITIVETYPE_Unknown        = 0,\r
50     FDE_CSSPRIMITIVETYPE_Number         = 1,\r
51     FDE_CSSPRIMITIVETYPE_Percent        = 2,\r
52     FDE_CSSPRIMITIVETYPE_EMS            = 3,\r
53     FDE_CSSPRIMITIVETYPE_EXS            = 4,\r
54     FDE_CSSPRIMITIVETYPE_PX                     = 5,\r
55     FDE_CSSPRIMITIVETYPE_CM                     = 6,\r
56     FDE_CSSPRIMITIVETYPE_MM                     = 7,\r
57     FDE_CSSPRIMITIVETYPE_IN                     = 8,\r
58     FDE_CSSPRIMITIVETYPE_PT                     = 9,\r
59     FDE_CSSPRIMITIVETYPE_PC                     = 10,\r
60     FDE_CSSPRIMITIVETYPE_String         = 19,\r
61     FDE_CSSPRIMITIVETYPE_URI            = 20,\r
62     FDE_CSSPRIMITIVETYPE_RGB            = 25,\r
63     FDE_CSSPRIMITIVETYPE_Enum,\r
64     FDE_CSSPRIMITIVETYPE_Function,\r
65 };\r
66 enum FDE_CSSPROPERTYVALUE {\r
67     FDE_CSSPROPERTYVALUE_Bolder,\r
68     FDE_CSSPROPERTYVALUE_LowerLatin,\r
69     FDE_CSSPROPERTYVALUE_Lowercase,\r
70     FDE_CSSPROPERTYVALUE_LowerGreek,\r
71     FDE_CSSPROPERTYVALUE_Sesame,\r
72     FDE_CSSPROPERTYVALUE_None,\r
73     FDE_CSSPROPERTYVALUE_NwResize,\r
74     FDE_CSSPROPERTYVALUE_WResize,\r
75     FDE_CSSPROPERTYVALUE_Dot,\r
76     FDE_CSSPROPERTYVALUE_End,\r
77     FDE_CSSPROPERTYVALUE_Ltr,\r
78     FDE_CSSPROPERTYVALUE_Pre,\r
79     FDE_CSSPROPERTYVALUE_Rtl,\r
80     FDE_CSSPROPERTYVALUE_Sub,\r
81     FDE_CSSPROPERTYVALUE_Top,\r
82     FDE_CSSPROPERTYVALUE_Visible,\r
83     FDE_CSSPROPERTYVALUE_Filled,\r
84     FDE_CSSPROPERTYVALUE_SwResize,\r
85     FDE_CSSPROPERTYVALUE_NoRepeat,\r
86     FDE_CSSPROPERTYVALUE_Default,\r
87     FDE_CSSPROPERTYVALUE_Transparent,\r
88     FDE_CSSPROPERTYVALUE_Ridge,\r
89     FDE_CSSPROPERTYVALUE_Right,\r
90     FDE_CSSPROPERTYVALUE_HorizontalTb,\r
91     FDE_CSSPROPERTYVALUE_DistributeLetter,\r
92     FDE_CSSPROPERTYVALUE_DoubleCircle,\r
93     FDE_CSSPROPERTYVALUE_Ruby,\r
94     FDE_CSSPROPERTYVALUE_Collapse,\r
95     FDE_CSSPROPERTYVALUE_Normal,\r
96     FDE_CSSPROPERTYVALUE_Avoid,\r
97     FDE_CSSPROPERTYVALUE_UpperRoman,\r
98     FDE_CSSPROPERTYVALUE_Auto,\r
99     FDE_CSSPROPERTYVALUE_Text,\r
100     FDE_CSSPROPERTYVALUE_XSmall,\r
101     FDE_CSSPROPERTYVALUE_Thin,\r
102     FDE_CSSPROPERTYVALUE_Repeat,\r
103     FDE_CSSPROPERTYVALUE_Small,\r
104     FDE_CSSPROPERTYVALUE_NeResize,\r
105     FDE_CSSPROPERTYVALUE_NoContent,\r
106     FDE_CSSPROPERTYVALUE_Outside,\r
107     FDE_CSSPROPERTYVALUE_EResize,\r
108     FDE_CSSPROPERTYVALUE_TableRow,\r
109     FDE_CSSPROPERTYVALUE_Bottom,\r
110     FDE_CSSPROPERTYVALUE_Underline,\r
111     FDE_CSSPROPERTYVALUE_CjkIdeographic,\r
112     FDE_CSSPROPERTYVALUE_SeResize,\r
113     FDE_CSSPROPERTYVALUE_Fixed,\r
114     FDE_CSSPROPERTYVALUE_Double,\r
115     FDE_CSSPROPERTYVALUE_Solid,\r
116     FDE_CSSPROPERTYVALUE_RubyBaseGroup,\r
117     FDE_CSSPROPERTYVALUE_OpenQuote,\r
118     FDE_CSSPROPERTYVALUE_Lighter,\r
119     FDE_CSSPROPERTYVALUE_LowerRoman,\r
120     FDE_CSSPROPERTYVALUE_Strict,\r
121     FDE_CSSPROPERTYVALUE_TableCaption,\r
122     FDE_CSSPROPERTYVALUE_Oblique,\r
123     FDE_CSSPROPERTYVALUE_Decimal,\r
124     FDE_CSSPROPERTYVALUE_Loose,\r
125     FDE_CSSPROPERTYVALUE_Hebrew,\r
126     FDE_CSSPROPERTYVALUE_Hidden,\r
127     FDE_CSSPROPERTYVALUE_Dashed,\r
128     FDE_CSSPROPERTYVALUE_Embed,\r
129     FDE_CSSPROPERTYVALUE_TableRowGroup,\r
130     FDE_CSSPROPERTYVALUE_TableColumn,\r
131     FDE_CSSPROPERTYVALUE_Static,\r
132     FDE_CSSPROPERTYVALUE_Outset,\r
133     FDE_CSSPROPERTYVALUE_DecimalLeadingZero,\r
134     FDE_CSSPROPERTYVALUE_KeepWords,\r
135     FDE_CSSPROPERTYVALUE_KatakanaIroha,\r
136     FDE_CSSPROPERTYVALUE_Super,\r
137     FDE_CSSPROPERTYVALUE_Center,\r
138     FDE_CSSPROPERTYVALUE_TableHeaderGroup,\r
139     FDE_CSSPROPERTYVALUE_Inside,\r
140     FDE_CSSPROPERTYVALUE_XxLarge,\r
141     FDE_CSSPROPERTYVALUE_Triangle,\r
142     FDE_CSSPROPERTYVALUE_RubyTextGroup,\r
143     FDE_CSSPROPERTYVALUE_Circle,\r
144     FDE_CSSPROPERTYVALUE_Hiragana,\r
145     FDE_CSSPROPERTYVALUE_RepeatX,\r
146     FDE_CSSPROPERTYVALUE_RepeatY,\r
147     FDE_CSSPROPERTYVALUE_Move,\r
148     FDE_CSSPROPERTYVALUE_HiraganaIroha,\r
149     FDE_CSSPROPERTYVALUE_RubyBase,\r
150     FDE_CSSPROPERTYVALUE_Scroll,\r
151     FDE_CSSPROPERTYVALUE_Smaller,\r
152     FDE_CSSPROPERTYVALUE_TableFooterGroup,\r
153     FDE_CSSPROPERTYVALUE_Baseline,\r
154     FDE_CSSPROPERTYVALUE_Separate,\r
155     FDE_CSSPROPERTYVALUE_Armenian,\r
156     FDE_CSSPROPERTYVALUE_Open,\r
157     FDE_CSSPROPERTYVALUE_Relative,\r
158     FDE_CSSPROPERTYVALUE_Thick,\r
159     FDE_CSSPROPERTYVALUE_Justify,\r
160     FDE_CSSPROPERTYVALUE_Middle,\r
161     FDE_CSSPROPERTYVALUE_Always,\r
162     FDE_CSSPROPERTYVALUE_DistributeSpace,\r
163     FDE_CSSPROPERTYVALUE_LineEdge,\r
164     FDE_CSSPROPERTYVALUE_PreWrap,\r
165     FDE_CSSPROPERTYVALUE_Medium,\r
166     FDE_CSSPROPERTYVALUE_NResize,\r
167     FDE_CSSPROPERTYVALUE_ListItem,\r
168     FDE_CSSPROPERTYVALUE_Show,\r
169     FDE_CSSPROPERTYVALUE_Currentcolor,\r
170     FDE_CSSPROPERTYVALUE_NoCloseQuote,\r
171     FDE_CSSPROPERTYVALUE_VerticalLr,\r
172     FDE_CSSPROPERTYVALUE_VerticalRl,\r
173     FDE_CSSPROPERTYVALUE_Pointer,\r
174     FDE_CSSPROPERTYVALUE_XxSmall,\r
175     FDE_CSSPROPERTYVALUE_Bold,\r
176     FDE_CSSPROPERTYVALUE_Both,\r
177     FDE_CSSPROPERTYVALUE_SmallCaps,\r
178     FDE_CSSPROPERTYVALUE_Katakana,\r
179     FDE_CSSPROPERTYVALUE_After,\r
180     FDE_CSSPROPERTYVALUE_Horizontal,\r
181     FDE_CSSPROPERTYVALUE_Dotted,\r
182     FDE_CSSPROPERTYVALUE_Disc,\r
183     FDE_CSSPROPERTYVALUE_Georgian,\r
184     FDE_CSSPROPERTYVALUE_Inline,\r
185     FDE_CSSPROPERTYVALUE_Overline,\r
186     FDE_CSSPROPERTYVALUE_Wait,\r
187     FDE_CSSPROPERTYVALUE_BreakAll,\r
188     FDE_CSSPROPERTYVALUE_UpperAlpha,\r
189     FDE_CSSPROPERTYVALUE_Capitalize,\r
190     FDE_CSSPROPERTYVALUE_Nowrap,\r
191     FDE_CSSPROPERTYVALUE_TextBottom,\r
192     FDE_CSSPROPERTYVALUE_NoOpenQuote,\r
193     FDE_CSSPROPERTYVALUE_Groove,\r
194     FDE_CSSPROPERTYVALUE_Progress,\r
195     FDE_CSSPROPERTYVALUE_Larger,\r
196     FDE_CSSPROPERTYVALUE_CloseQuote,\r
197     FDE_CSSPROPERTYVALUE_TableCell,\r
198     FDE_CSSPROPERTYVALUE_PreLine,\r
199     FDE_CSSPROPERTYVALUE_Absolute,\r
200     FDE_CSSPROPERTYVALUE_InlineTable,\r
201     FDE_CSSPROPERTYVALUE_BidiOverride,\r
202     FDE_CSSPROPERTYVALUE_InlineBlock,\r
203     FDE_CSSPROPERTYVALUE_Inset,\r
204     FDE_CSSPROPERTYVALUE_Crosshair,\r
205     FDE_CSSPROPERTYVALUE_UpperLatin,\r
206     FDE_CSSPROPERTYVALUE_Help,\r
207     FDE_CSSPROPERTYVALUE_Hide,\r
208     FDE_CSSPROPERTYVALUE_Uppercase,\r
209     FDE_CSSPROPERTYVALUE_SResize,\r
210     FDE_CSSPROPERTYVALUE_Table,\r
211     FDE_CSSPROPERTYVALUE_Blink,\r
212     FDE_CSSPROPERTYVALUE_Block,\r
213     FDE_CSSPROPERTYVALUE_Start,\r
214     FDE_CSSPROPERTYVALUE_TableColumnGroup,\r
215     FDE_CSSPROPERTYVALUE_Italic,\r
216     FDE_CSSPROPERTYVALUE_LineThrough,\r
217     FDE_CSSPROPERTYVALUE_KeepAll,\r
218     FDE_CSSPROPERTYVALUE_LowerAlpha,\r
219     FDE_CSSPROPERTYVALUE_RunIn,\r
220     FDE_CSSPROPERTYVALUE_Square,\r
221     FDE_CSSPROPERTYVALUE_XLarge,\r
222     FDE_CSSPROPERTYVALUE_Large,\r
223     FDE_CSSPROPERTYVALUE_Before,\r
224     FDE_CSSPROPERTYVALUE_Left,\r
225     FDE_CSSPROPERTYVALUE_TextTop,\r
226     FDE_CSSPROPERTYVALUE_RubyText,\r
227     FDE_CSSPROPERTYVALUE_NoDisplay,\r
228     FDE_CSSPROPERTYVALUE_MAX\r
229 };\r
230 class IFDE_CSSValue\r
231 {\r
232 public:\r
233     virtual FDE_CSSVALUETYPE            GetType() const = 0;\r
234 };\r
235 class IFDE_CSSPrimitiveValue : public IFDE_CSSValue\r
236 {\r
237 public:\r
238     virtual FDE_CSSVALUETYPE            GetType() const\r
239     {\r
240         return FDE_CSSVALUETYPE_Primitive;\r
241     }\r
242     virtual FDE_CSSPRIMITIVETYPE        GetPrimitiveType() const = 0;\r
243     virtual FX_ARGB                                     GetRGBColor() const = 0;\r
244     virtual FX_FLOAT                            GetFloat() const = 0;\r
245     virtual FX_LPCWSTR                          GetString(FX_INT32 &iLength) const = 0;\r
246     virtual FDE_CSSPROPERTYVALUE        GetEnum() const = 0;\r
247     virtual     FX_LPCWSTR                              GetFuncName() const = 0;\r
248     virtual FX_INT32                            CountArgs() const = 0;\r
249     virtual IFDE_CSSValue*                      GetArgs(FX_INT32 index) const = 0;\r
250 };\r
251 class IFDE_CSSValueList : public IFDE_CSSValue\r
252 {\r
253 public:\r
254     virtual FDE_CSSVALUETYPE            GetType() const\r
255     {\r
256         return FDE_CSSVALUETYPE_List;\r
257     }\r
258     virtual FX_INT32                            CountValues() const = 0;\r
259     virtual IFDE_CSSValue*                      GetValue(FX_INT32 index) const = 0;\r
260 };\r
261 enum FDE_CSSPROPERTY {\r
262     FDE_CSSPROPERTY_WritingMode,\r
263     FDE_CSSPROPERTY_ColumnRuleWidth,\r
264     FDE_CSSPROPERTY_BorderLeft,\r
265     FDE_CSSPROPERTY_ColumnRule,\r
266     FDE_CSSPROPERTY_Height,\r
267     FDE_CSSPROPERTY_CounterReset,\r
268     FDE_CSSPROPERTY_Content,\r
269     FDE_CSSPROPERTY_RubyPosition,\r
270     FDE_CSSPROPERTY_BackgroundColor,\r
271     FDE_CSSPROPERTY_Width,\r
272     FDE_CSSPROPERTY_Src,\r
273     FDE_CSSPROPERTY_Top,\r
274     FDE_CSSPROPERTY_Margin,\r
275     FDE_CSSPROPERTY_BorderColor,\r
276     FDE_CSSPROPERTY_Widows,\r
277     FDE_CSSPROPERTY_BorderBottomColor,\r
278     FDE_CSSPROPERTY_TextIndent,\r
279     FDE_CSSPROPERTY_Right,\r
280     FDE_CSSPROPERTY_TextEmphasisStyle,\r
281     FDE_CSSPROPERTY_PaddingLeft,\r
282     FDE_CSSPROPERTY_ColumnWidth,\r
283     FDE_CSSPROPERTY_MarginLeft,\r
284     FDE_CSSPROPERTY_Border,\r
285     FDE_CSSPROPERTY_BorderTop,\r
286     FDE_CSSPROPERTY_RubyOverhang,\r
287     FDE_CSSPROPERTY_PageBreakBefore,\r
288     FDE_CSSPROPERTY_MaxHeight,\r
289     FDE_CSSPROPERTY_MinWidth,\r
290     FDE_CSSPROPERTY_BorderLeftColor,\r
291     FDE_CSSPROPERTY_Bottom,\r
292     FDE_CSSPROPERTY_Quotes,\r
293     FDE_CSSPROPERTY_MaxWidth,\r
294     FDE_CSSPROPERTY_PaddingRight,\r
295     FDE_CSSPROPERTY_ListStyleImage,\r
296     FDE_CSSPROPERTY_WhiteSpace,\r
297     FDE_CSSPROPERTY_BorderBottom,\r
298     FDE_CSSPROPERTY_ListStyleType,\r
299     FDE_CSSPROPERTY_WordBreak,\r
300     FDE_CSSPROPERTY_OverflowX,\r
301     FDE_CSSPROPERTY_OverflowY,\r
302     FDE_CSSPROPERTY_BorderTopColor,\r
303     FDE_CSSPROPERTY_FontFamily,\r
304     FDE_CSSPROPERTY_Cursor,\r
305     FDE_CSSPROPERTY_RubyAlign,\r
306     FDE_CSSPROPERTY_ColumnRuleColor,\r
307     FDE_CSSPROPERTY_FontWeight,\r
308     FDE_CSSPROPERTY_BorderRightStyle,\r
309     FDE_CSSPROPERTY_MinHeight,\r
310     FDE_CSSPROPERTY_Color,\r
311     FDE_CSSPROPERTY_LetterSpacing,\r
312     FDE_CSSPROPERTY_EmptyCells,\r
313     FDE_CSSPROPERTY_TextAlign,\r
314     FDE_CSSPROPERTY_RubySpan,\r
315     FDE_CSSPROPERTY_Position,\r
316     FDE_CSSPROPERTY_BorderStyle,\r
317     FDE_CSSPROPERTY_BorderBottomStyle,\r
318     FDE_CSSPROPERTY_BorderCollapse,\r
319     FDE_CSSPROPERTY_ColumnCount,\r
320     FDE_CSSPROPERTY_BorderRightWidth,\r
321     FDE_CSSPROPERTY_UnicodeBidi,\r
322     FDE_CSSPROPERTY_VerticalAlign,\r
323     FDE_CSSPROPERTY_PaddingTop,\r
324     FDE_CSSPROPERTY_Columns,\r
325     FDE_CSSPROPERTY_Overflow,\r
326     FDE_CSSPROPERTY_TableLayout,\r
327     FDE_CSSPROPERTY_FontVariant,\r
328     FDE_CSSPROPERTY_ListStyle,\r
329     FDE_CSSPROPERTY_BackgroundPosition,\r
330     FDE_CSSPROPERTY_BorderWidth,\r
331     FDE_CSSPROPERTY_TextEmphasisColor,\r
332     FDE_CSSPROPERTY_BorderLeftStyle,\r
333     FDE_CSSPROPERTY_PageBreakInside,\r
334     FDE_CSSPROPERTY_TextEmphasis,\r
335     FDE_CSSPROPERTY_BorderBottomWidth,\r
336     FDE_CSSPROPERTY_ColumnGap,\r
337     FDE_CSSPROPERTY_Orphans,\r
338     FDE_CSSPROPERTY_BorderRight,\r
339     FDE_CSSPROPERTY_FontSize,\r
340     FDE_CSSPROPERTY_PageBreakAfter,\r
341     FDE_CSSPROPERTY_CaptionSide,\r
342     FDE_CSSPROPERTY_BackgroundRepeat,\r
343     FDE_CSSPROPERTY_BorderTopStyle,\r
344     FDE_CSSPROPERTY_BorderSpacing,\r
345     FDE_CSSPROPERTY_TextTransform,\r
346     FDE_CSSPROPERTY_FontStyle,\r
347     FDE_CSSPROPERTY_Font,\r
348     FDE_CSSPROPERTY_LineHeight,\r
349     FDE_CSSPROPERTY_MarginRight,\r
350     FDE_CSSPROPERTY_Float,\r
351     FDE_CSSPROPERTY_BorderLeftWidth,\r
352     FDE_CSSPROPERTY_Display,\r
353     FDE_CSSPROPERTY_Clear,\r
354     FDE_CSSPROPERTY_ColumnRuleStyle,\r
355     FDE_CSSPROPERTY_TextCombine,\r
356     FDE_CSSPROPERTY_ListStylePosition,\r
357     FDE_CSSPROPERTY_Visibility,\r
358     FDE_CSSPROPERTY_PaddingBottom,\r
359     FDE_CSSPROPERTY_BackgroundAttachment,\r
360     FDE_CSSPROPERTY_BackgroundImage,\r
361     FDE_CSSPROPERTY_LineBreak,\r
362     FDE_CSSPROPERTY_Background,\r
363     FDE_CSSPROPERTY_BorderTopWidth,\r
364     FDE_CSSPROPERTY_WordSpacing,\r
365     FDE_CSSPROPERTY_BorderRightColor,\r
366     FDE_CSSPROPERTY_CounterIncrement,\r
367     FDE_CSSPROPERTY_Left,\r
368     FDE_CSSPROPERTY_TextDecoration,\r
369     FDE_CSSPROPERTY_Padding,\r
370     FDE_CSSPROPERTY_MarginBottom,\r
371     FDE_CSSPROPERTY_MarginTop,\r
372     FDE_CSSPROPERTY_Direction,\r
373     FDE_CSSPROPERTY_MAX\r
374 };\r
375 class IFDE_CSSDeclaration\r
376 {\r
377 public:\r
378     virtual IFDE_CSSValue*                      GetProperty(FDE_CSSPROPERTY eProperty, FX_BOOL &bImportant) const = 0;\r
379     virtual FX_POSITION                         GetStartPosition() const = 0;\r
380     virtual void                                        GetNextProperty(FX_POSITION &pos, FDE_CSSPROPERTY &eProperty, IFDE_CSSValue *&pValue, FX_BOOL &bImportant) const = 0;\r
381     virtual FX_POSITION                         GetStartCustom() const = 0;\r
382     virtual void                                        GetNextCustom(FX_POSITION &pos, CFX_WideString &wsName, CFX_WideString &wsValue) const = 0;\r
383 };\r
384 typedef CFX_ArrayTemplate<IFDE_CSSDeclaration*> CFDE_CSSDeclarationArray;\r
385 enum FDE_CSSPERSUDO {\r
386     FDE_CSSPERSUDO_After,\r
387     FDE_CSSPERSUDO_Before,\r
388     FDE_CSSPERSUDO_NONE\r
389 };\r
390 enum FDE_CSSSELECTORTYPE {\r
391     FDE_CSSSELECTORTYPE_Element,\r
392     FDE_CSSSELECTORTYPE_Descendant,\r
393     FDE_CSSSELECTORTYPE_Class,\r
394     FDE_CSSSELECTORTYPE_Persudo,\r
395     FDE_CSSSELECTORTYPE_ID,\r
396 };\r
397 class IFDE_CSSSelector\r
398 {\r
399 public:\r
400     virtual FDE_CSSSELECTORTYPE         GetType() const = 0;\r
401     virtual FX_DWORD                            GetNameHash() const = 0;\r
402     virtual IFDE_CSSSelector*           GetNextSelector() const = 0;\r
403 };\r
404 #define FDE_CSSMEDIATYPE_Braille        0x01\r
405 #define FDE_CSSMEDIATYPE_Emboss         0x02\r
406 #define FDE_CSSMEDIATYPE_Handheld       0x04\r
407 #define FDE_CSSMEDIATYPE_Print          0x08\r
408 #define FDE_CSSMEDIATYPE_Projection     0x10\r
409 #define FDE_CSSMEDIATYPE_Screen         0x20\r
410 #define FDE_CSSMEDIATYPE_TTY            0x40\r
411 #define FDE_CSSMEDIATYPE_TV                     0x80\r
412 #define FDE_CSSMEDIATYPE_ALL            0xFF\r
413 enum FDE_CSSRULETYPE {\r
414     FDE_CSSRULETYPE_Unknown                     = 0,\r
415     FDE_CSSRULETYPE_Style                       = 1,\r
416     FDE_CSSRULETYPE_Media                       = 4,\r
417     FDE_CSSRULETYPE_FontFace            = 5,\r
418 };\r
419 class IFDE_CSSRule\r
420 {\r
421 public:\r
422     virtual FDE_CSSRULETYPE                     GetType() const = 0;\r
423 };\r
424 typedef CFX_MassArrayTemplate<IFDE_CSSRule*> CFDE_CSSRuleArray;\r
425 class IFDE_CSSStyleRule : public IFDE_CSSRule\r
426 {\r
427 public:\r
428     virtual FDE_CSSRULETYPE                     GetType() const\r
429     {\r
430         return FDE_CSSRULETYPE_Style;\r
431     }\r
432     virtual FX_INT32                            CountSelectorLists() const = 0;\r
433     virtual IFDE_CSSSelector*           GetSelectorList(FX_INT32 index) const = 0;\r
434     virtual IFDE_CSSDeclaration*        GetDeclaration() const = 0;\r
435 };\r
436 class IFDE_CSSMediaRule : public IFDE_CSSRule\r
437 {\r
438 public:\r
439     virtual FDE_CSSRULETYPE                     GetType() const\r
440     {\r
441         return FDE_CSSRULETYPE_Media;\r
442     }\r
443     virtual FX_DWORD                            GetMediaList() const = 0;\r
444     virtual FX_INT32                            CountRules() const = 0;\r
445     virtual IFDE_CSSRule*                       GetRule(FX_INT32 index) = 0;\r
446 };\r
447 class IFDE_CSSFontFaceRule : public IFDE_CSSRule\r
448 {\r
449 public:\r
450     virtual FDE_CSSRULETYPE                     GetType() const\r
451     {\r
452         return FDE_CSSRULETYPE_FontFace;\r
453     }\r
454     virtual     IFDE_CSSDeclaration*    GetDeclaration() const = 0;\r
455 };\r
456 class IFDE_CSSStyleSheet : public IFX_Unknown\r
457 {\r
458 public:\r
459     static IFDE_CSSStyleSheet*          LoadHTMLStandardStyleSheet();\r
460     static IFDE_CSSStyleSheet*          LoadFromStream(const CFX_WideString &szUrl, IFX_Stream *pStream, FX_WORD wCodePage, FX_DWORD dwMediaList = FDE_CSSMEDIATYPE_ALL);\r
461     static IFDE_CSSStyleSheet*          LoadFromBuffer(const CFX_WideString &szUrl, FX_LPCWSTR pBuffer, FX_INT32 iBufSize, FX_WORD wCodePage, FX_DWORD dwMediaList = FDE_CSSMEDIATYPE_ALL);\r
462     virtual FX_BOOL                                     GetUrl(CFX_WideString &szUrl) = 0;\r
463     virtual FX_DWORD                            GetMediaList() const = 0;\r
464     virtual FX_WORD                                     GetCodePage() const = 0;\r
465 \r
466     virtual FX_INT32                            CountRules() const = 0;\r
467     virtual IFDE_CSSRule*                       GetRule(FX_INT32 index) = 0;\r
468 };\r
469 typedef CFX_ArrayTemplate<IFDE_CSSStyleSheet*> CFDE_CSSStyleSheetArray;\r
470 #define FDE_CSSUSERSTYLESHEET           (FX_BSTRC("#USERSHEET"))\r
471 #define FDE_CSSUAGENTSTYLESHEET         (FX_BSTRC("#AGENTSHEET"))\r
472 class IFDE_CSSStyleSheetCache\r
473 {\r
474 public:\r
475     static IFDE_CSSStyleSheetCache*     Create();\r
476     virtual void                                        Release() = 0;\r
477     virtual void                                        SetMaxItems(FX_INT32 iMaxCount = 5) = 0;\r
478     virtual void                                        AddStyleSheet(FX_BSTR szKey, IFDE_CSSStyleSheet *pStyleSheet) = 0;\r
479     virtual IFDE_CSSStyleSheet*         GetStyleSheet(FX_BSTR szKey) const = 0;\r
480     virtual void                                        RemoveStyleSheet(FX_BSTR szKey) = 0;\r
481 };\r
482 enum FDE_CSSSYNTAXSTATUS {\r
483     FDE_CSSSYNTAXSTATUS_Error,\r
484     FDE_CSSSYNTAXSTATUS_EOS,\r
485     FDE_CSSSYNTAXSTATUS_None,\r
486     FDE_CSSSYNTAXSTATUS_Charset,\r
487     FDE_CSSSYNTAXSTATUS_ImportRule,\r
488     FDE_CSSSYNTAXSTATUS_ImportClose,\r
489     FDE_CSSSYNTAXSTATUS_PageRule,\r
490     FDE_CSSSYNTAXSTATUS_StyleRule,\r
491     FDE_CSSSYNTAXSTATUS_FontFaceRule,\r
492     FDE_CSSSYNTAXSTATUS_MediaRule,\r
493     FDE_CSSSYNTAXSTATUS_MediaType,\r
494     FDE_CSSSYNTAXSTATUS_URI,\r
495     FDE_CSSSYNTAXSTATUS_Selector,\r
496     FDE_CSSSYNTAXSTATUS_DeclOpen,\r
497     FDE_CSSSYNTAXSTATUS_DeclClose,\r
498     FDE_CSSSYNTAXSTATUS_PropertyName,\r
499     FDE_CSSSYNTAXSTATUS_PropertyValue,\r
500 };\r
501 class IFDE_CSSSyntaxParser\r
502 {\r
503 public:\r
504     static IFDE_CSSSyntaxParser*        Create();\r
505     virtual void                                        Release() = 0;\r
506     virtual FX_BOOL                                     Init(IFX_Stream *pStream, FX_INT32 iCSSPlaneSize, FX_INT32 iTextDataSize = 32, FX_BOOL bOnlyDeclaration = FALSE) = 0;\r
507     virtual FX_BOOL                                     Init(FX_LPCWSTR pBuffer, FX_INT32 iBufferSize, FX_INT32 iTextDatSize = 32, FX_BOOL bOnlyDeclaration = FALSE) = 0;\r
508 \r
509     virtual FDE_CSSSYNTAXSTATUS         DoSyntaxParse() = 0;\r
510     virtual FX_LPCWSTR                          GetCurrentString(FX_INT32 &iLength) const = 0;\r
511 };\r
512 enum FDE_CSSLENGTHUNIT {\r
513     FDE_CSSLENGTHUNIT_Auto,\r
514     FDE_CSSLENGTHUNIT_None,\r
515     FDE_CSSLENGTHUNIT_Normal,\r
516     FDE_CSSLENGTHUNIT_Point,\r
517     FDE_CSSLENGTHUNIT_Percent,\r
518 };\r
519 #define FDE_CSSUNITBITS                         (3)\r
520 #define FDE_CSSUNITMASK                         ((1 << FDE_CSSUNITBITS) - 1)\r
521 struct FDE_CSSLENGTH {\r
522     FDE_CSSLENGTH&                                      Set(FDE_CSSLENGTHUNIT eUnit)\r
523     {\r
524         m_iData = eUnit;\r
525         return *this;\r
526     }\r
527     FDE_CSSLENGTH&                                      Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue)\r
528     {\r
529         m_iData = ((FX_INTPTR)(fValue * 1024.0f) << FDE_CSSUNITBITS) | eUnit;\r
530         return *this;\r
531     }\r
532     FDE_CSSLENGTHUNIT                           GetUnit() const\r
533     {\r
534         return (FDE_CSSLENGTHUNIT)(m_iData & FDE_CSSUNITMASK);\r
535     }\r
536     FX_FLOAT                                            GetValue() const\r
537     {\r
538         return (m_iData >> FDE_CSSUNITBITS) / 1024.0f;\r
539     }\r
540     FX_BOOL                                                     NonZero() const\r
541     {\r
542         return (m_iData >> FDE_CSSUNITBITS) != 0;\r
543     }\r
544 private:\r
545     FX_INTPTR                                           m_iData;\r
546 };\r
547 struct FDE_CSSPOINT {\r
548     FDE_CSSPOINT&                                       Set(FDE_CSSLENGTHUNIT eUnit)\r
549     {\r
550         x.Set(eUnit);\r
551         y.Set(eUnit);\r
552         return *this;\r
553     }\r
554     FDE_CSSPOINT&                                       Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue)\r
555     {\r
556         x.Set(eUnit, fValue);\r
557         y.Set(eUnit, fValue);\r
558         return *this;\r
559     }\r
560     FDE_CSSLENGTH                                       x, y;\r
561 };\r
562 struct FDE_CSSSIZE {\r
563     FDE_CSSSIZE&                                        Set(FDE_CSSLENGTHUNIT eUnit)\r
564     {\r
565         cx.Set(eUnit);\r
566         cy.Set(eUnit);\r
567         return *this;\r
568     }\r
569     FDE_CSSSIZE&                                        Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue)\r
570     {\r
571         cx.Set(eUnit, fValue);\r
572         cy.Set(eUnit, fValue);\r
573         return *this;\r
574     }\r
575     FDE_CSSLENGTH                                       cx, cy;\r
576 };\r
577 struct FDE_CSSRECT {\r
578     FDE_CSSRECT&                                        Set(FDE_CSSLENGTHUNIT eUnit)\r
579     {\r
580         left.Set(eUnit);\r
581         top.Set(eUnit);\r
582         right.Set(eUnit);\r
583         bottom.Set(eUnit);\r
584         return *this;\r
585     }\r
586     FDE_CSSRECT&                                        Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue)\r
587     {\r
588         left.Set(eUnit, fValue);\r
589         top.Set(eUnit, fValue);\r
590         right.Set(eUnit, fValue);\r
591         bottom.Set(eUnit, fValue);\r
592         return *this;\r
593     }\r
594 \r
595     FDE_CSSLENGTH                       left, top, right, bottom;\r
596 };\r
597 enum FDE_CSSBKGATTACHMENT {\r
598     FDE_CSSBKGATTACHMENT_Scroll,\r
599     FDE_CSSBKGATTACHMENT_Fixed,\r
600 };\r
601 enum FDE_CSSBKGREPEAT {\r
602     FDE_CSSBKGREPEAT_Repeat,\r
603     FDE_CSSBKGREPEAT_RepeatX,\r
604     FDE_CSSBKGREPEAT_RepeatY,\r
605     FDE_CSSBKGREPEAT_NoRepeat,\r
606 };\r
607 enum FDE_CSSBORDERSTYLE {\r
608     FDE_CSSBORDERSTYLE_None,\r
609     FDE_CSSBORDERSTYLE_Hidden,\r
610     FDE_CSSBORDERSTYLE_Dotted,\r
611     FDE_CSSBORDERSTYLE_Dashed,\r
612     FDE_CSSBORDERSTYLE_Solid,\r
613     FDE_CSSBORDERSTYLE_Double,\r
614     FDE_CSSBORDERSTYLE_Groove,\r
615     FDE_CSSBORDERSTYLE_Ridge,\r
616     FDE_CSSBORDERSTYLE_Inset,\r
617     FDE_CSSBORDERSTYLE_outset,\r
618 };\r
619 enum FDE_CSSCLEAR {\r
620     FDE_CSSCLEAR_None,\r
621     FDE_CSSCLEAR_Left,\r
622     FDE_CSSCLEAR_Right,\r
623     FDE_CSSCLEAR_Both,\r
624 };\r
625 enum FDE_CSSDISPLAY {\r
626     FDE_CSSDISPLAY_None,\r
627     FDE_CSSDISPLAY_ListItem,\r
628     FDE_CSSDISPLAY_RunIn,\r
629     FDE_CSSDISPLAY_Block,\r
630     FDE_CSSDISPLAY_Inline,\r
631     FDE_CSSDISPLAY_InlineBlock,\r
632     FDE_CSSDISPLAY_InlineTable,\r
633     FDE_CSSDISPLAY_Table,\r
634     FDE_CSSDISPLAY_TableRow,\r
635     FDE_CSSDISPLAY_TableCell,\r
636     FDE_CSSDISPLAY_TableCaption,\r
637     FDE_CSSDISPLAY_TableColumn,\r
638     FDE_CSSDISPLAY_TableRowGroup,\r
639     FDE_CSSDISPLAY_TableColumnGroup,\r
640     FDE_CSSDISPLAY_TableHeaderGroup,\r
641     FDE_CSSDISPLAY_TableFooterGroup,\r
642     FDE_CSSDISPLAY_Ruby,\r
643     FDE_CSSDISPLAY_RubyBase,\r
644     FDE_CSSDISPLAY_RubyText,\r
645     FDE_CSSDISPLSY_RubyBaseGroup,\r
646     FDE_CSSDISPLAY_RubyTextGroup,\r
647 };\r
648 enum FDE_CSSVISIBILITY {\r
649     FDE_CSSVISIBILITY_Visible,\r
650     FDE_CSSVISIBILITY_Hidden,\r
651     FDE_CSSVISIBILITY_Collapse,\r
652 };\r
653 enum FDE_CSSFONTSTYLE {\r
654     FDE_CSSFONTSTYLE_Normal,\r
655     FDE_CSSFONTSTYLE_Italic,\r
656 };\r
657 enum FDE_CSSFLOAT {\r
658     FDE_CSSFLOAT_None,\r
659     FDE_CSSFLOAT_Left,\r
660     FDE_CSSFLOAT_Right,\r
661 };\r
662 enum FDE_CSSWRITINGMODE {\r
663     FDE_CSSWRITINGMODE_HorizontalTb,\r
664     FDE_CSSWRITINGMODE_VerticalRl,\r
665     FDE_CSSWRITINGMODE_VerticalLr,\r
666 };\r
667 enum FDE_CSSWORDBREAK {\r
668     FDE_CSSWORDBREAK_Normal,\r
669     FDE_CSSWORDBREAK_KeepAll,\r
670     FDE_CSSWORDBREAK_BreakAll,\r
671     FDE_CSSWORDBREAK_KeepWords,\r
672 };\r
673 enum FDE_CSSPAGEBREAK {\r
674     FDE_CSSPAGEBREAK_Auto,\r
675     FDE_CSSPAGEBREAK_Always,\r
676     FDE_CSSPAGEBREAK_Avoid,\r
677     FDE_CSSPAGEBREAK_Left,\r
678     FDE_CSSPAGEBREAK_Right,\r
679 };\r
680 enum FDE_CSSOVERFLOW {\r
681     FDE_CSSOVERFLOW_Visible,\r
682     FDE_CSSOVERFLOW_Hidden,\r
683     FDE_CSSOVERFLOW_Scroll,\r
684     FDE_CSSOVERFLOW_Auto,\r
685     FDE_CSSOVERFLOW_NoDisplay,\r
686     FDE_CSSOVERFLOW_NoContent,\r
687 };\r
688 enum FDE_CSSLINEBREAK {\r
689     FDE_CSSLINEBREAK_Auto,\r
690     FDE_CSSLINEBREAK_Loose,\r
691     FDE_CSSLINEBREAK_Normal,\r
692     FDE_CSSLINEBREAK_Strict,\r
693 };\r
694 enum FDE_CSSTEXTEMPHASISFILL {\r
695     FDE_CSSTEXTEMPHASISFILL_Filled,\r
696     FDE_CSSTEXTEMPHASISFILL_Open,\r
697 };\r
698 enum FDE_CSSTEXTEMPHASISMARK {\r
699     FDE_CSSTEXTEMPHASISMARK_None,\r
700     FDE_CSSTEXTEMPHASISMARK_Auto,\r
701     FDE_CSSTEXTEMPHASISMARK_Dot,\r
702     FDE_CSSTEXTEMPHASISMARK_Circle,\r
703     FDE_CSSTEXTEMPHASISMARK_DoubleCircle,\r
704     FDE_CSSTEXTEMPHASISMARK_Triangle,\r
705     FDE_CSSTEXTEMPHASISMARK_Sesame,\r
706     FDE_CSSTEXTEMPHASISMARK_Custom,\r
707 };\r
708 enum FDE_CSSTEXTCOMBINE {\r
709     FDE_CSSTEXTCOMBINE_Horizontal,\r
710     FDE_CSSTEXTCOMBINE_None,\r
711 };\r
712 enum FDE_CSSCURSOR {\r
713     FDE_CSSCURSOR_Auto,\r
714     FDE_CSSCURSOR_Crosshair,\r
715     FDE_CSSCURSOR_Default,\r
716     FDE_CSSCURSOR_Pointer,\r
717     FDE_CSSCURSOR_Move,\r
718     FDE_CSSCURSOR_EResize,\r
719     FDE_CSSCURSOR_NeResize,\r
720     FDE_CSSCURSOR_NwResize,\r
721     FDE_CSSCURSOR_NResize,\r
722     FDE_CSSCURSOR_SeResize,\r
723     FDE_CSSCURSOR_SwResize,\r
724     FDE_CSSCURSOR_SResize,\r
725     FDE_CSSCURSOR_WResize,\r
726     FDE_CSSCURSOR_Text,\r
727     FDE_CSSCURSOR_Wait,\r
728     FDE_CSSCURSOR_Help,\r
729     FDE_CSSCURSOR_Progress,\r
730 };\r
731 enum FDE_CSSPOSITION {\r
732     FDE_CSSPOSITION_Static,\r
733     FDE_CSSPOSITION_Relative,\r
734     FDE_CSSPOSITION_Absolute,\r
735     FDE_CSSPOSITION_Fixed,\r
736 };\r
737 enum FDE_CSSCAPTIONSIDE {\r
738     FDE_CSSCAPTIONSIDE_Top,\r
739     FDE_CSSCAPTIONSIDE_Bottom,\r
740     FDE_CSSCAPTIONSIDE_Left,\r
741     FDE_CSSCAPTIONSIDE_Right,\r
742     FDE_CSSCAPTIONSIDE_Before,\r
743     FDE_CSSCAPTIONSIDE_After,\r
744 };\r
745 enum FDE_CSSRUBYALIGN {\r
746     FDE_CSSRUBYALIGN_Auto,\r
747     FDE_CSSRUBYALIGN_Start,\r
748     FDE_CSSRUBYALIGN_Left,\r
749     FDE_CSSRUBYALIGN_Center,\r
750     FDE_CSSRUBYALIGN_End,\r
751     FDE_CSSRUBYALIGN_Right,\r
752     FDE_CSSRUBYALIGN_DistributeLetter,\r
753     FDE_CSSRUBYALIGN_DistributeSpace,\r
754     FDE_CSSRUBYALIGN_LineEdge,\r
755 };\r
756 enum FDE_CSSRUBYOVERHANG {\r
757     FDE_CSSRUBYOVERHANG_Auto,\r
758     FDE_CSSRUBYOVERHANG_Start,\r
759     FDE_CSSRUBYOVERHANG_End,\r
760     FDE_CSSRUBYOVERHANG_None,\r
761 };\r
762 enum FDE_CSSRUBYPOSITION {\r
763     FDE_CSSRUBYPOSITION_Before,\r
764     FDE_CSSRUBYPOSITION_After,\r
765     FDE_CSSRUBYPOSITION_Right,\r
766     FDE_CSSRUBYPOSITION_Inline,\r
767 };\r
768 enum FDE_CSSRUBYSPAN {\r
769     FDE_CSSRUBYSPAN_None,\r
770     FDE_CSSRUBYSPAN_Attr,\r
771 };\r
772 enum FDE_CSSTEXTALIGN {\r
773     FDE_CSSTEXTALIGN_Left,\r
774     FDE_CSSTEXTALIGN_Right,\r
775     FDE_CSSTEXTALIGN_Center,\r
776     FDE_CSSTEXTALIGN_Justify,\r
777     FDE_CSSTEXTALIGN_JustifyAll,\r
778 };\r
779 enum FDE_CSSVERTICALALIGN {\r
780     FDE_CSSVERTICALALIGN_Baseline,\r
781     FDE_CSSVERTICALALIGN_Sub,\r
782     FDE_CSSVERTICALALIGN_Super,\r
783     FDE_CSSVERTICALALIGN_Top,\r
784     FDE_CSSVERTICALALIGN_TextTop,\r
785     FDE_CSSVERTICALALIGN_Middle,\r
786     FDE_CSSVERTICALALIGN_Bottom,\r
787     FDE_CSSVERTICALALIGN_TextBottom,\r
788     FDE_CSSVERTICALALIGN_Number,\r
789 };\r
790 enum FDE_CSSLISTSTYLETYPE {\r
791     FDE_CSSLISTSTYLETYPE_Disc,\r
792     FDE_CSSLISTSTYLETYPE_Circle,\r
793     FDE_CSSLISTSTYLETYPE_Square,\r
794     FDE_CSSLISTSTYLETYPE_Decimal,\r
795     FDE_CSSLISTSTYLETYPE_DecimalLeadingZero,\r
796     FDE_CSSLISTSTYLETYPE_LowerRoman,\r
797     FDE_CSSLISTSTYLETYPE_UpperRoman,\r
798     FDE_CSSLISTSTYLETYPE_LowerGreek,\r
799     FDE_CSSLISTSTYLETYPE_LowerLatin,\r
800     FDE_CSSLISTSTYLETYPE_UpperLatin,\r
801     FDE_CSSLISTSTYLETYPE_Armenian,\r
802     FDE_CSSLISTSTYLETYPE_Georgian,\r
803     FDE_CSSLISTSTYLETYPE_LowerAlpha,\r
804     FDE_CSSLISTSTYLETYPE_UpperAlpha,\r
805     FDE_CSSLISTSTYLETYPE_None,\r
806     FDE_CSSLISTSTYLETYPE_CjkIdeographic,\r
807     FDE_CSSLISTSTYLETYPE_Hebrew,\r
808     FDE_CSSLISTSTYLETYPE_Hiragana,\r
809     FDE_CSSLISTSTYLETYPE_HiraganaIroha,\r
810     FDE_CSSLISTSTYLETYPE_Katakana,\r
811     FDE_CSSLISTSTYLETYPE_KatakanaIroha,\r
812 };\r
813 enum FDE_CSSLISTSTYLEPOSITION {\r
814     FDE_CSSLISTSTYLEPOSITION_Outside,\r
815     FDE_CSSLISTSTYLEPOSITION_Inside,\r
816 };\r
817 enum FDE_CSSWHITESPACE {\r
818     FDE_CSSWHITESPACE_Normal,\r
819     FDE_CSSWHITESPACE_Pre,\r
820     FDE_CSSWHITESPACE_Nowrap,\r
821     FDE_CSSWHITESPACE_PreWrap,\r
822     FDE_CSSWHITESPACE_PreLine,\r
823 };\r
824 enum FDE_CSSFONTVARIANT {\r
825     FDE_CSSFONTVARIANT_Normal,\r
826     FDE_CSSFONTVARIANT_SmallCaps,\r
827 };\r
828 enum FDE_CSSTEXTTRANSFORM {\r
829     FDE_CSSTEXTTRANSFORM_None,\r
830     FDE_CSSTEXTTRANSFORM_Capitalize,\r
831     FDE_CSSTEXTTRANSFORM_UpperCase,\r
832     FDE_CSSTEXTTRANSFORM_LowerCase,\r
833 };\r
834 enum FDE_CSSTEXTDECORATION {\r
835     FDE_CSSTEXTDECORATION_None                          = 0,\r
836     FDE_CSSTEXTDECORATION_Underline                     = 1,\r
837     FDE_CSSTEXTDECORATION_Overline                      = 2,\r
838     FDE_CSSTEXTDECORATION_LineThrough           = 4,\r
839     FDE_CSSTEXTDECORATION_Blink                         = 8,\r
840     FDE_CSSTEXTDECORATION_Double                        = 16,\r
841 };\r
842 class IFDE_CSSRubyStyle\r
843 {\r
844 public:\r
845     virtual FDE_CSSRUBYALIGN            GetRubyAlign() const = 0;\r
846     virtual FDE_CSSRUBYOVERHANG         GetRubyOverhang() const = 0;\r
847     virtual FDE_CSSRUBYPOSITION         GetRubyPosition() const = 0;\r
848     virtual FDE_CSSRUBYSPAN                     GetRubySpanType() const = 0;\r
849     virtual IFDE_CSSValue*                      GetRubySpanAttr() const = 0;\r
850 };\r
851 class IFDE_CSSMultiColumnStyle\r
852 {\r
853 public:\r
854     virtual const FDE_CSSLENGTH&        GetColumnCount() const = 0;\r
855     virtual const FDE_CSSLENGTH&        GetColumnGap() const = 0;\r
856     virtual FX_ARGB                                     GetColumnRuleColor() const = 0;\r
857     virtual FDE_CSSBORDERSTYLE          GetColumnRuleStyle() const = 0;\r
858     virtual const FDE_CSSLENGTH&        GetColumnRuleWidth() const = 0;\r
859     virtual const FDE_CSSLENGTH&        GetColumnWidth() const = 0;\r
860     virtual void                                        SetColumnCount(const FDE_CSSLENGTH &columnCount) = 0;\r
861     virtual void                                        SetColumnGap(const FDE_CSSLENGTH &columnGap) = 0;\r
862     virtual void                                        SetColumnRuleColor(FX_ARGB dwColumnRuleColor) = 0;\r
863     virtual void                                        SetColumnRuleStyle(FDE_CSSBORDERSTYLE eColumnRuleStyle) = 0;\r
864     virtual void                                        SetColumnRuleWidth(const FDE_CSSLENGTH &columnRuleWidth) = 0;\r
865     virtual void                                        SetColumnWidth(const FDE_CSSLENGTH &columnWidth) = 0;\r
866 };\r
867 class IFDE_CSSGeneratedContentStyle\r
868 {\r
869 public:\r
870     virtual FX_INT32                            CountCounters() = 0;\r
871     virtual FX_LPCWSTR                          GetCounterIdentifier(FX_INT32 index) = 0;\r
872     virtual FX_BOOL                                     GetCounterReset(FX_INT32 index, FX_INT32 &iValue) = 0;\r
873     virtual FX_BOOL                                     GetCounterIncrement(FX_INT32 index, FX_INT32 &iValue) = 0;\r
874     virtual IFDE_CSSValueList*          GetContent() const = 0;\r
875     virtual FX_INT32                            CountQuotes() const = 0;\r
876     virtual FX_LPCWSTR                          GetQuotes(FX_INT32 index) const = 0;\r
877 };\r
878 class IFDE_CSSFontStyle\r
879 {\r
880 public:\r
881     virtual FX_INT32                            CountFontFamilies() const = 0;\r
882     virtual FX_LPCWSTR                          GetFontFamily(FX_INT32 index) const = 0;\r
883     virtual FX_WORD                                     GetFontWeight() const = 0;\r
884     virtual FDE_CSSFONTVARIANT          GetFontVariant() const = 0;\r
885     virtual FDE_CSSFONTSTYLE            GetFontStyle() const = 0;\r
886     virtual FX_FLOAT                            GetFontSize() const = 0;\r
887     virtual FX_ARGB                                     GetColor() const = 0;\r
888     virtual void                                        SetFontWeight(FX_WORD wFontWeight) = 0;\r
889     virtual void                                        SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) = 0;\r
890     virtual void                                        SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) = 0;\r
891     virtual void                                        SetFontSize(FX_FLOAT fFontSize) = 0;\r
892     virtual void                                        SetColor(FX_ARGB dwFontColor) = 0;\r
893 };\r
894 class IFDE_CSSBoundaryStyle\r
895 {\r
896 public:\r
897     virtual FX_ARGB                                     GetBorderLeftColor() const = 0;\r
898     virtual FX_ARGB                                     GetBorderTopColor() const = 0;\r
899     virtual FX_ARGB                                     GetBorderRightColor() const = 0;\r
900     virtual FX_ARGB                                     GetBorderBottomColor() const = 0;\r
901     virtual FDE_CSSBORDERSTYLE          GetBorderLeftStyle() const = 0;\r
902     virtual FDE_CSSBORDERSTYLE          GetBorderTopStyle() const = 0;\r
903     virtual FDE_CSSBORDERSTYLE          GetBorderRightStyle() const = 0;\r
904     virtual FDE_CSSBORDERSTYLE          GetBorderBottomStyle() const = 0;\r
905     virtual const FDE_CSSRECT*          GetBorderWidth() const = 0;\r
906     virtual const FDE_CSSRECT*          GetMarginWidth() const = 0;\r
907     virtual const FDE_CSSRECT*          GetPaddingWidth() const = 0;\r
908     virtual void                                        SetBorderLeftColor(FX_ARGB dwBorderColor) = 0;\r
909     virtual void                                        SetBorderTopColor(FX_ARGB dwBorderColor) = 0;\r
910     virtual void                                        SetBorderRightColor(FX_ARGB dwBorderColor) = 0;\r
911     virtual void                                        SetBorderBottomColor(FX_ARGB dwBorderColor) = 0;\r
912 \r
913     virtual void                                        SetBorderLeftStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0;\r
914     virtual void                                        SetBorderTopStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0;\r
915     virtual void                                        SetBorderRightStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0;\r
916     virtual void                                        SetBorderBottomStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0;\r
917 \r
918     virtual void                                        SetBorderWidth(const FDE_CSSRECT &rect) = 0;\r
919     virtual void                                        SetMarginWidth(const FDE_CSSRECT &rect) = 0;\r
920     virtual void                                        SetPaddingWidth(const FDE_CSSRECT &rect) = 0;\r
921 };\r
922 class IFDE_CSSPositionStyle\r
923 {\r
924 public:\r
925     virtual FDE_CSSDISPLAY                      GetDisplay() const = 0;\r
926     virtual const FDE_CSSSIZE&          GetBoxSize() const = 0;\r
927     virtual const FDE_CSSSIZE&          GetMinBoxSize() const = 0;\r
928     virtual const FDE_CSSSIZE&          GetMaxBoxSize() const = 0;\r
929     virtual FDE_CSSFLOAT                        GetFloat() const = 0;\r
930     virtual FDE_CSSCLEAR                        GetClear() const = 0;\r
931     virtual FDE_CSSPOSITION                     GetPosition() const = 0;\r
932     virtual FDE_CSSLENGTH                       GetTop() const = 0;\r
933     virtual FDE_CSSLENGTH                       GetBottom() const = 0;\r
934     virtual FDE_CSSLENGTH                       GetLeft() const = 0;\r
935     virtual FDE_CSSLENGTH                       GetRight() const = 0;\r
936     virtual void                                        SetDisplay(FDE_CSSDISPLAY eDisplay) = 0;\r
937     virtual void                                        SetBoxSize(const FDE_CSSSIZE &boxSize) = 0;\r
938     virtual void                                        SetMinBoxSize(const FDE_CSSSIZE &minBoxSize) = 0;\r
939     virtual void                                        SetMaxBoxSize(const FDE_CSSSIZE &maxBoxSize) = 0;\r
940     virtual void                                        SetFloat(FDE_CSSFLOAT eFloat) = 0;\r
941     virtual void                                        SetClear(FDE_CSSCLEAR eClear) = 0;\r
942 };\r
943 class IFDE_CSSParagraphStyle\r
944 {\r
945 public:\r
946     virtual FX_FLOAT                            GetLineHeight() const = 0;\r
947     virtual FDE_CSSWHITESPACE           GetWhiteSpace() const = 0;\r
948     virtual const FDE_CSSLENGTH&        GetTextIndent() const = 0;\r
949     virtual FDE_CSSTEXTALIGN            GetTextAlign() const = 0;\r
950     virtual FDE_CSSVERTICALALIGN        GetVerticalAlign() const = 0;\r
951     virtual FX_FLOAT                            GetNumberVerticalAlign() const = 0;\r
952     virtual FDE_CSSTEXTTRANSFORM        GetTextTransform() const = 0;\r
953     virtual FX_DWORD                            GetTextDecoration() const = 0;\r
954     virtual const FDE_CSSLENGTH&        GetLetterSpacing() const = 0;\r
955     virtual const FDE_CSSLENGTH&        GetWordSpacing() const = 0;\r
956     virtual FDE_CSSWRITINGMODE          GetWritingMode() const = 0;\r
957     virtual FDE_CSSWORDBREAK            GetWordBreak() const = 0;\r
958     virtual FX_INT32                            GetWidows() const = 0;\r
959     virtual FX_ARGB                                     GetTextEmphasisColor() const = 0;\r
960     virtual FDE_CSSPAGEBREAK            GetPageBreakBefore() const = 0;\r
961     virtual FDE_CSSPAGEBREAK            GetPageBreakAfter() const = 0;\r
962     virtual FDE_CSSPAGEBREAK            GetPageBreakInside() const = 0;\r
963     virtual FX_INT32                            GetOrphans() const = 0;\r
964     virtual FDE_CSSLINEBREAK            GetLineBreak() const = 0;\r
965     virtual FDE_CSSTEXTEMPHASISMARK     GetTextEmphasisMark() const = 0;\r
966     virtual FDE_CSSTEXTEMPHASISFILL     GetTextEmphasisFill() const = 0;\r
967     virtual FX_LPCWSTR                          GetTextEmphasisCustom() const = 0;\r
968     virtual FDE_CSSTEXTCOMBINE          GetTextCombineType() const = 0;\r
969     virtual FX_BOOL                                     HasTextCombineNumber() const = 0;\r
970     virtual FX_FLOAT                            GetTextCombineNumber() const = 0;\r
971     virtual void                                        SetLineHeight(FX_FLOAT fLineHeight) = 0;\r
972     virtual void                                        SetWhiteSpace(FDE_CSSWHITESPACE eWhiteSpace) = 0;\r
973     virtual void                                        SetTextIndent(const FDE_CSSLENGTH &textIndent) = 0;\r
974     virtual void                                        SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) = 0;\r
975     virtual void                                        SetVerticalAlign(FDE_CSSVERTICALALIGN eVerticalAlign) = 0;\r
976     virtual void                                        SetNumberVerticalAlign(FX_FLOAT fAlign) = 0;\r
977     virtual void                                        SetTextTransform(FDE_CSSTEXTTRANSFORM eTextTransform) = 0;\r
978     virtual void                                        SetTextDecoration(FX_DWORD dwTextDecoration) = 0;\r
979     virtual void                                        SetLetterSpacing(const FDE_CSSLENGTH &letterSpacing) = 0;\r
980     virtual void                                        SetWordSpacing(const FDE_CSSLENGTH &wordSpacing) = 0;\r
981     virtual void                                        SetWritingMode(FDE_CSSWRITINGMODE eWritingMode) = 0;\r
982     virtual void                                        SetWordBreak(FDE_CSSWORDBREAK eWordBreak) = 0;\r
983     virtual void                                        SetWidows(FX_INT32 iWidows) = 0;\r
984     virtual void                                        SetTextEmphasisColor(FX_ARGB dwTextEmphasisColor) = 0;\r
985     virtual void                                        SetPageBreakBefore(FDE_CSSPAGEBREAK ePageBreakBefore) = 0;\r
986     virtual void                                        SetPageBreakAfter(FDE_CSSPAGEBREAK ePageBreakAfter) = 0;\r
987     virtual void                                        SetPageBreakInside(FDE_CSSPAGEBREAK ePageBreakInside) = 0;\r
988     virtual void                                        SetOrphans(FX_INT32 iOrphans) = 0;\r
989     virtual void                                        SetLineBreak(FDE_CSSLINEBREAK eLineBreak) = 0;\r
990 };\r
991 class IFDE_CSSBackgroundStyle\r
992 {\r
993 public:\r
994     virtual FX_ARGB                                     GetBKGColor() const = 0;\r
995     virtual FX_LPCWSTR                          GetBKGImage() const = 0;\r
996     virtual FDE_CSSBKGREPEAT            GetBKGRepeat() const = 0;\r
997     virtual FDE_CSSBKGATTACHMENT        GetBKGAttachment() const = 0;\r
998     virtual const FDE_CSSPOINT&         GetBKGPosition() const = 0;\r
999     virtual void                                        SetBKGColor(FX_ARGB dwBKGColor) = 0;\r
1000     virtual void                                        SetBKGPosition(const FDE_CSSPOINT &bkgPosition) = 0;\r
1001 };\r
1002 class IFDE_CSSListStyle\r
1003 {\r
1004 public:\r
1005     virtual FDE_CSSLISTSTYLETYPE                GetListStyleType() const = 0;\r
1006     virtual FDE_CSSLISTSTYLEPOSITION    GetListStylePosition() const = 0;\r
1007     virtual FX_LPCWSTR                                  GetListStyleImage() const = 0;\r
1008     virtual void                                                SetListStyleType(FDE_CSSLISTSTYLETYPE eListStyleType) = 0;\r
1009     virtual void                                                SetListStylePosition(FDE_CSSLISTSTYLEPOSITION eListStylePosition) = 0;\r
1010 };\r
1011 class IFDE_CSSTableStyle\r
1012 {\r
1013 public:\r
1014     virtual FDE_CSSCAPTIONSIDE                  GetCaptionSide() const = 0;\r
1015 };\r
1016 class IFDE_CSSVisualStyle\r
1017 {\r
1018 public:\r
1019     virtual FDE_CSSVISIBILITY           GetVisibility() const = 0;\r
1020     virtual FDE_CSSOVERFLOW                     GetOverflowX() const = 0;\r
1021     virtual FDE_CSSOVERFLOW                     GetOverflowY() const = 0;\r
1022     virtual void                                        SetVisibility(FDE_CSSVISIBILITY eVisibility) = 0;\r
1023 };\r
1024 class IFDE_CSSComputedStyle : public IFX_Unknown\r
1025 {\r
1026 public:\r
1027     virtual void                                                        Reset() = 0;\r
1028     virtual IFDE_CSSFontStyle*                          GetFontStyles() const = 0;\r
1029     virtual IFDE_CSSBoundaryStyle*                      GetBoundaryStyles() const = 0;\r
1030     virtual IFDE_CSSPositionStyle*                      GetPositionStyles() const = 0;\r
1031     virtual IFDE_CSSParagraphStyle*                     GetParagraphStyles() const = 0;\r
1032     virtual IFDE_CSSBackgroundStyle*            GetBackgroundStyles() const = 0;\r
1033     virtual IFDE_CSSVisualStyle*                        GetVisualStyles() const = 0;\r
1034     virtual IFDE_CSSListStyle*                          GetListStyles() const = 0;\r
1035     virtual IFDE_CSSMultiColumnStyle*           GetMultiColumnStyle() const = 0;\r
1036     virtual IFDE_CSSTableStyle*                         GetTableStyle() const = 0;\r
1037     virtual IFDE_CSSGeneratedContentStyle*      GetGeneratedContentStyle() const = 0;\r
1038     virtual IFDE_CSSRubyStyle*                          GetRubyStyle() const = 0;\r
1039     virtual FX_BOOL                                                     GetCustomStyle(FX_WSTR wsName, CFX_WideString &wsValue) const = 0;\r
1040 };\r
1041 enum FDE_CSSSTYLESHEETGROUP {\r
1042     FDE_CSSSTYLESHEETGROUP_UserAgent,\r
1043     FDE_CSSSTYLESHEETGROUP_User,\r
1044     FDE_CSSSTYLESHEETGROUP_Author,\r
1045     FDE_CSSSTYLESHEETGROUP_MAX,\r
1046 };\r
1047 enum FDE_CSSSTYLESHEETPRIORITY {\r
1048     FDE_CSSSTYLESHEETPRIORITY_High,\r
1049     FDE_CSSSTYLESHEETPRIORITY_Mid,\r
1050     FDE_CSSSTYLESHEETPRIORITY_Low,\r
1051     FDE_CSSSTYLESHEETPRIORITY_MAX,\r
1052 };\r
1053 class IFDE_CSSTagProvider\r
1054 {\r
1055 public:\r
1056     virtual CFX_WideStringC                     GetTagName() = 0;\r
1057     virtual FX_POSITION                         GetFirstAttribute() = 0;\r
1058     virtual void                                        GetNextAttribute(FX_POSITION &pos, CFX_WideStringC &wsAttr, CFX_WideStringC &wsValue) = 0;\r
1059 };\r
1060 class IFDE_CSSAccelerator\r
1061 {\r
1062 public:\r
1063     virtual void                                        OnEnterTag(IFDE_CSSTagProvider *pTag) = 0;\r
1064     virtual void                                        OnLeaveTag(IFDE_CSSTagProvider *pTag) = 0;\r
1065 };\r
1066 class IFDE_CSSStyleSelector\r
1067 {\r
1068 public:\r
1069     static IFDE_CSSStyleSelector*       Create();\r
1070     virtual void                                        Release() = 0;\r
1071     virtual void                                        SetFontMgr(IFX_FontMgr *pFontMgr) = 0;\r
1072     virtual void                                        SetDefFontSize(FX_FLOAT fFontSize) = 0;\r
1073     virtual FX_BOOL                                     SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, IFDE_CSSStyleSheet *pSheet) = 0;\r
1074     virtual FX_BOOL                                     SetStyleSheets(FDE_CSSSTYLESHEETGROUP eType, const CFDE_CSSStyleSheetArray *pArray) = 0;\r
1075     virtual void                                        SetStylePriority(FDE_CSSSTYLESHEETGROUP eType, FDE_CSSSTYLESHEETPRIORITY ePriority) = 0;\r
1076     virtual void                                        UpdateStyleIndex(FX_DWORD dwMediaList) = 0;\r
1077     virtual IFDE_CSSAccelerator*        InitAccelerator() = 0;\r
1078     virtual IFDE_CSSComputedStyle*      CreateComputedStyle(IFDE_CSSComputedStyle *pParentStyle) = 0;\r
1079     virtual FX_INT32                            MatchDeclarations(IFDE_CSSTagProvider *pTag, CFDE_CSSDeclarationArray &matchedDecls, FDE_CSSPERSUDO ePersudoType = FDE_CSSPERSUDO_NONE) = 0;\r
1080     virtual void                                        ComputeStyle(IFDE_CSSTagProvider *pTag, const IFDE_CSSDeclaration **ppDeclArray, FX_INT32 iDeclCount, IFDE_CSSComputedStyle *pDestStyle) = 0;\r
1081 };\r
1082 #endif\r