// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef XFA_FDE_CSS_FDE_CSS_H_ #define XFA_FDE_CSS_FDE_CSS_H_ #include "core/fxge/fx_dib.h" #include "xfa/fgas/crt/fgas_stream.h" #include "xfa/fgas/crt/fgas_utils.h" #include "xfa/fgas/font/cfgas_fontmgr.h" class CFDE_CSSAccelerator; class CFDE_CSSDeclaration; class CFDE_CSSSelector; class CXFA_CSSTagProvider; class IFDE_CSSBoundaryStyle; class IFDE_CSSComputedStyle; class IFDE_CSSFontStyle; class IFDE_CSSParagraphStyle; class IFDE_CSSPositionStyle; class IFDE_CSSRule; class IFDE_CSSStyleSheet; class IFDE_CSSValue; class IFDE_CSSValueList; #define FDE_CSSMEDIATYPE_Braille 0x01 #define FDE_CSSMEDIATYPE_Emboss 0x02 #define FDE_CSSMEDIATYPE_Handheld 0x04 #define FDE_CSSMEDIATYPE_Print 0x08 #define FDE_CSSMEDIATYPE_Projection 0x10 #define FDE_CSSMEDIATYPE_Screen 0x20 #define FDE_CSSMEDIATYPE_TTY 0x40 #define FDE_CSSMEDIATYPE_TV 0x80 #define FDE_CSSMEDIATYPE_ALL 0xFF #define FDE_CSSUNITBITS (3) #define FDE_CSSUNITMASK ((1 << FDE_CSSUNITBITS) - 1) enum FDE_CSSVALUETYPE { FDE_CSSVALUETYPE_Primitive = 1, FDE_CSSVALUETYPE_List = 2, FDE_CSSVALUETYPE_Shorthand, }; enum FDE_CSSPRIMITIVETYPE { FDE_CSSPRIMITIVETYPE_Unknown = 0, FDE_CSSPRIMITIVETYPE_Number = 1, FDE_CSSPRIMITIVETYPE_Percent = 2, FDE_CSSPRIMITIVETYPE_EMS = 3, FDE_CSSPRIMITIVETYPE_EXS = 4, FDE_CSSPRIMITIVETYPE_PX = 5, FDE_CSSPRIMITIVETYPE_CM = 6, FDE_CSSPRIMITIVETYPE_MM = 7, FDE_CSSPRIMITIVETYPE_IN = 8, FDE_CSSPRIMITIVETYPE_PT = 9, FDE_CSSPRIMITIVETYPE_PC = 10, FDE_CSSPRIMITIVETYPE_String = 19, FDE_CSSPRIMITIVETYPE_URI = 20, FDE_CSSPRIMITIVETYPE_RGB = 25, FDE_CSSPRIMITIVETYPE_Enum, FDE_CSSPRIMITIVETYPE_Function, }; enum FDE_CSSPROPERTYVALUE { FDE_CSSPROPERTYVALUE_Bolder, FDE_CSSPROPERTYVALUE_LowerLatin, FDE_CSSPROPERTYVALUE_Lowercase, FDE_CSSPROPERTYVALUE_LowerGreek, FDE_CSSPROPERTYVALUE_Sesame, FDE_CSSPROPERTYVALUE_None, FDE_CSSPROPERTYVALUE_NwResize, FDE_CSSPROPERTYVALUE_WResize, FDE_CSSPROPERTYVALUE_Dot, FDE_CSSPROPERTYVALUE_End, FDE_CSSPROPERTYVALUE_Ltr, FDE_CSSPROPERTYVALUE_Pre, FDE_CSSPROPERTYVALUE_Rtl, FDE_CSSPROPERTYVALUE_Sub, FDE_CSSPROPERTYVALUE_Top, FDE_CSSPROPERTYVALUE_Visible, FDE_CSSPROPERTYVALUE_Filled, FDE_CSSPROPERTYVALUE_SwResize, FDE_CSSPROPERTYVALUE_NoRepeat, FDE_CSSPROPERTYVALUE_Default, FDE_CSSPROPERTYVALUE_Transparent, FDE_CSSPROPERTYVALUE_Ridge, FDE_CSSPROPERTYVALUE_Right, FDE_CSSPROPERTYVALUE_HorizontalTb, FDE_CSSPROPERTYVALUE_DistributeLetter, FDE_CSSPROPERTYVALUE_DoubleCircle, FDE_CSSPROPERTYVALUE_Ruby, FDE_CSSPROPERTYVALUE_Collapse, FDE_CSSPROPERTYVALUE_Normal, FDE_CSSPROPERTYVALUE_Avoid, FDE_CSSPROPERTYVALUE_UpperRoman, FDE_CSSPROPERTYVALUE_Auto, FDE_CSSPROPERTYVALUE_Text, FDE_CSSPROPERTYVALUE_XSmall, FDE_CSSPROPERTYVALUE_Thin, FDE_CSSPROPERTYVALUE_Repeat, FDE_CSSPROPERTYVALUE_Small, FDE_CSSPROPERTYVALUE_NeResize, FDE_CSSPROPERTYVALUE_NoContent, FDE_CSSPROPERTYVALUE_Outside, FDE_CSSPROPERTYVALUE_EResize, FDE_CSSPROPERTYVALUE_TableRow, FDE_CSSPROPERTYVALUE_Bottom, FDE_CSSPROPERTYVALUE_Underline, FDE_CSSPROPERTYVALUE_CjkIdeographic, FDE_CSSPROPERTYVALUE_SeResize, FDE_CSSPROPERTYVALUE_Fixed, FDE_CSSPROPERTYVALUE_Double, FDE_CSSPROPERTYVALUE_Solid, FDE_CSSPROPERTYVALUE_RubyBaseGroup, FDE_CSSPROPERTYVALUE_OpenQuote, FDE_CSSPROPERTYVALUE_Lighter, FDE_CSSPROPERTYVALUE_LowerRoman, FDE_CSSPROPERTYVALUE_Strict, FDE_CSSPROPERTYVALUE_TableCaption, FDE_CSSPROPERTYVALUE_Oblique, FDE_CSSPROPERTYVALUE_Decimal, FDE_CSSPROPERTYVALUE_Loose, FDE_CSSPROPERTYVALUE_Hebrew, FDE_CSSPROPERTYVALUE_Hidden, FDE_CSSPROPERTYVALUE_Dashed, FDE_CSSPROPERTYVALUE_Embed, FDE_CSSPROPERTYVALUE_TableRowGroup, FDE_CSSPROPERTYVALUE_TableColumn, FDE_CSSPROPERTYVALUE_Static, FDE_CSSPROPERTYVALUE_Outset, FDE_CSSPROPERTYVALUE_DecimalLeadingZero, FDE_CSSPROPERTYVALUE_KeepWords, FDE_CSSPROPERTYVALUE_KatakanaIroha, FDE_CSSPROPERTYVALUE_Super, FDE_CSSPROPERTYVALUE_Center, FDE_CSSPROPERTYVALUE_TableHeaderGroup, FDE_CSSPROPERTYVALUE_Inside, FDE_CSSPROPERTYVALUE_XxLarge, FDE_CSSPROPERTYVALUE_Triangle, FDE_CSSPROPERTYVALUE_RubyTextGroup, FDE_CSSPROPERTYVALUE_Circle, FDE_CSSPROPERTYVALUE_Hiragana, FDE_CSSPROPERTYVALUE_RepeatX, FDE_CSSPROPERTYVALUE_RepeatY, FDE_CSSPROPERTYVALUE_Move, FDE_CSSPROPERTYVALUE_HiraganaIroha, FDE_CSSPROPERTYVALUE_RubyBase, FDE_CSSPROPERTYVALUE_Scroll, FDE_CSSPROPERTYVALUE_Smaller, FDE_CSSPROPERTYVALUE_TableFooterGroup, FDE_CSSPROPERTYVALUE_Baseline, FDE_CSSPROPERTYVALUE_Separate, FDE_CSSPROPERTYVALUE_Armenian, FDE_CSSPROPERTYVALUE_Open, FDE_CSSPROPERTYVALUE_Relative, FDE_CSSPROPERTYVALUE_Thick, FDE_CSSPROPERTYVALUE_Justify, FDE_CSSPROPERTYVALUE_Middle, FDE_CSSPROPERTYVALUE_Always, FDE_CSSPROPERTYVALUE_DistributeSpace, FDE_CSSPROPERTYVALUE_LineEdge, FDE_CSSPROPERTYVALUE_PreWrap, FDE_CSSPROPERTYVALUE_Medium, FDE_CSSPROPERTYVALUE_NResize, FDE_CSSPROPERTYVALUE_ListItem, FDE_CSSPROPERTYVALUE_Show, FDE_CSSPROPERTYVALUE_Currentcolor, FDE_CSSPROPERTYVALUE_NoCloseQuote, FDE_CSSPROPERTYVALUE_VerticalLr, FDE_CSSPROPERTYVALUE_VerticalRl, FDE_CSSPROPERTYVALUE_Pointer, FDE_CSSPROPERTYVALUE_XxSmall, FDE_CSSPROPERTYVALUE_Bold, FDE_CSSPROPERTYVALUE_Both, FDE_CSSPROPERTYVALUE_SmallCaps, FDE_CSSPROPERTYVALUE_Katakana, FDE_CSSPROPERTYVALUE_After, FDE_CSSPROPERTYVALUE_Horizontal, FDE_CSSPROPERTYVALUE_Dotted, FDE_CSSPROPERTYVALUE_Disc, FDE_CSSPROPERTYVALUE_Georgian, FDE_CSSPROPERTYVALUE_Inline, FDE_CSSPROPERTYVALUE_Overline, FDE_CSSPROPERTYVALUE_Wait, FDE_CSSPROPERTYVALUE_BreakAll, FDE_CSSPROPERTYVALUE_UpperAlpha, FDE_CSSPROPERTYVALUE_Capitalize, FDE_CSSPROPERTYVALUE_Nowrap, FDE_CSSPROPERTYVALUE_TextBottom, FDE_CSSPROPERTYVALUE_NoOpenQuote, FDE_CSSPROPERTYVALUE_Groove, FDE_CSSPROPERTYVALUE_Progress, FDE_CSSPROPERTYVALUE_Larger, FDE_CSSPROPERTYVALUE_CloseQuote, FDE_CSSPROPERTYVALUE_TableCell, FDE_CSSPROPERTYVALUE_PreLine, FDE_CSSPROPERTYVALUE_Absolute, FDE_CSSPROPERTYVALUE_InlineTable, FDE_CSSPROPERTYVALUE_BidiOverride, FDE_CSSPROPERTYVALUE_InlineBlock, FDE_CSSPROPERTYVALUE_Inset, FDE_CSSPROPERTYVALUE_Crosshair, FDE_CSSPROPERTYVALUE_UpperLatin, FDE_CSSPROPERTYVALUE_Help, FDE_CSSPROPERTYVALUE_Hide, FDE_CSSPROPERTYVALUE_Uppercase, FDE_CSSPROPERTYVALUE_SResize, FDE_CSSPROPERTYVALUE_Table, FDE_CSSPROPERTYVALUE_Blink, FDE_CSSPROPERTYVALUE_Block, FDE_CSSPROPERTYVALUE_Start, FDE_CSSPROPERTYVALUE_TableColumnGroup, FDE_CSSPROPERTYVALUE_Italic, FDE_CSSPROPERTYVALUE_LineThrough, FDE_CSSPROPERTYVALUE_KeepAll, FDE_CSSPROPERTYVALUE_LowerAlpha, FDE_CSSPROPERTYVALUE_RunIn, FDE_CSSPROPERTYVALUE_Square, FDE_CSSPROPERTYVALUE_XLarge, FDE_CSSPROPERTYVALUE_Large, FDE_CSSPROPERTYVALUE_Before, FDE_CSSPROPERTYVALUE_Left, FDE_CSSPROPERTYVALUE_TextTop, FDE_CSSPROPERTYVALUE_RubyText, FDE_CSSPROPERTYVALUE_NoDisplay, FDE_CSSPROPERTYVALUE_MAX }; enum FDE_CSSPROPERTY { FDE_CSSPROPERTY_WritingMode, FDE_CSSPROPERTY_ColumnRuleWidth, FDE_CSSPROPERTY_BorderLeft, FDE_CSSPROPERTY_ColumnRule, FDE_CSSPROPERTY_Height, FDE_CSSPROPERTY_CounterReset, FDE_CSSPROPERTY_Content, FDE_CSSPROPERTY_RubyPosition, FDE_CSSPROPERTY_BackgroundColor, FDE_CSSPROPERTY_Width, FDE_CSSPROPERTY_Src, FDE_CSSPROPERTY_Top, FDE_CSSPROPERTY_Margin, FDE_CSSPROPERTY_BorderColor, FDE_CSSPROPERTY_Widows, FDE_CSSPROPERTY_BorderBottomColor, FDE_CSSPROPERTY_TextIndent, FDE_CSSPROPERTY_Right, FDE_CSSPROPERTY_TextEmphasisStyle, FDE_CSSPROPERTY_PaddingLeft, FDE_CSSPROPERTY_ColumnWidth, FDE_CSSPROPERTY_MarginLeft, FDE_CSSPROPERTY_Border, FDE_CSSPROPERTY_BorderTop, FDE_CSSPROPERTY_RubyOverhang, FDE_CSSPROPERTY_PageBreakBefore, FDE_CSSPROPERTY_MaxHeight, FDE_CSSPROPERTY_MinWidth, FDE_CSSPROPERTY_BorderLeftColor, FDE_CSSPROPERTY_Bottom, FDE_CSSPROPERTY_Quotes, FDE_CSSPROPERTY_MaxWidth, FDE_CSSPROPERTY_PaddingRight, FDE_CSSPROPERTY_ListStyleImage, FDE_CSSPROPERTY_WhiteSpace, FDE_CSSPROPERTY_BorderBottom, FDE_CSSPROPERTY_ListStyleType, FDE_CSSPROPERTY_WordBreak, FDE_CSSPROPERTY_OverflowX, FDE_CSSPROPERTY_OverflowY, FDE_CSSPROPERTY_BorderTopColor, FDE_CSSPROPERTY_FontFamily, FDE_CSSPROPERTY_Cursor, FDE_CSSPROPERTY_RubyAlign, FDE_CSSPROPERTY_ColumnRuleColor, FDE_CSSPROPERTY_FontWeight, FDE_CSSPROPERTY_BorderRightStyle, FDE_CSSPROPERTY_MinHeight, FDE_CSSPROPERTY_Color, FDE_CSSPROPERTY_LetterSpacing, FDE_CSSPROPERTY_EmptyCells, FDE_CSSPROPERTY_TextAlign, FDE_CSSPROPERTY_RubySpan, FDE_CSSPROPERTY_Position, FDE_CSSPROPERTY_BorderStyle, FDE_CSSPROPERTY_BorderBottomStyle, FDE_CSSPROPERTY_BorderCollapse, FDE_CSSPROPERTY_ColumnCount, FDE_CSSPROPERTY_BorderRightWidth, FDE_CSSPROPERTY_UnicodeBidi, FDE_CSSPROPERTY_VerticalAlign, FDE_CSSPROPERTY_PaddingTop, FDE_CSSPROPERTY_Columns, FDE_CSSPROPERTY_Overflow, FDE_CSSPROPERTY_TableLayout, FDE_CSSPROPERTY_FontVariant, FDE_CSSPROPERTY_ListStyle, FDE_CSSPROPERTY_BackgroundPosition, FDE_CSSPROPERTY_BorderWidth, FDE_CSSPROPERTY_TextEmphasisColor, FDE_CSSPROPERTY_BorderLeftStyle, FDE_CSSPROPERTY_PageBreakInside, FDE_CSSPROPERTY_TextEmphasis, FDE_CSSPROPERTY_BorderBottomWidth, FDE_CSSPROPERTY_ColumnGap, FDE_CSSPROPERTY_Orphans, FDE_CSSPROPERTY_BorderRight, FDE_CSSPROPERTY_FontSize, FDE_CSSPROPERTY_PageBreakAfter, FDE_CSSPROPERTY_CaptionSide, FDE_CSSPROPERTY_BackgroundRepeat, FDE_CSSPROPERTY_BorderTopStyle, FDE_CSSPROPERTY_BorderSpacing, FDE_CSSPROPERTY_TextTransform, FDE_CSSPROPERTY_FontStyle, FDE_CSSPROPERTY_Font, FDE_CSSPROPERTY_LineHeight, FDE_CSSPROPERTY_MarginRight, FDE_CSSPROPERTY_Float, FDE_CSSPROPERTY_BorderLeftWidth, FDE_CSSPROPERTY_Display, FDE_CSSPROPERTY_Clear, FDE_CSSPROPERTY_ColumnRuleStyle, FDE_CSSPROPERTY_TextCombine, FDE_CSSPROPERTY_ListStylePosition, FDE_CSSPROPERTY_Visibility, FDE_CSSPROPERTY_PaddingBottom, FDE_CSSPROPERTY_BackgroundAttachment, FDE_CSSPROPERTY_BackgroundImage, FDE_CSSPROPERTY_LineBreak, FDE_CSSPROPERTY_Background, FDE_CSSPROPERTY_BorderTopWidth, FDE_CSSPROPERTY_WordSpacing, FDE_CSSPROPERTY_BorderRightColor, FDE_CSSPROPERTY_CounterIncrement, FDE_CSSPROPERTY_Left, FDE_CSSPROPERTY_TextDecoration, FDE_CSSPROPERTY_Padding, FDE_CSSPROPERTY_MarginBottom, FDE_CSSPROPERTY_MarginTop, FDE_CSSPROPERTY_Direction, FDE_CSSPROPERTY_MAX }; enum FDE_CSSPERSUDO { FDE_CSSPERSUDO_After, FDE_CSSPERSUDO_Before, FDE_CSSPERSUDO_NONE }; enum FDE_CSSSELECTORTYPE { FDE_CSSSELECTORTYPE_Element, FDE_CSSSELECTORTYPE_Descendant, FDE_CSSSELECTORTYPE_Class, FDE_CSSSELECTORTYPE_Persudo, FDE_CSSSELECTORTYPE_ID, }; enum FDE_CSSRULETYPE { FDE_CSSRULETYPE_Unknown = 0, FDE_CSSRULETYPE_Style = 1, FDE_CSSRULETYPE_Media = 4, FDE_CSSRULETYPE_FontFace = 5, }; enum FDE_CSSSYNTAXSTATUS { FDE_CSSSYNTAXSTATUS_Error, FDE_CSSSYNTAXSTATUS_EOS, FDE_CSSSYNTAXSTATUS_None, FDE_CSSSYNTAXSTATUS_Charset, FDE_CSSSYNTAXSTATUS_ImportRule, FDE_CSSSYNTAXSTATUS_ImportClose, FDE_CSSSYNTAXSTATUS_PageRule, FDE_CSSSYNTAXSTATUS_StyleRule, FDE_CSSSYNTAXSTATUS_FontFaceRule, FDE_CSSSYNTAXSTATUS_MediaRule, FDE_CSSSYNTAXSTATUS_MediaType, FDE_CSSSYNTAXSTATUS_URI, FDE_CSSSYNTAXSTATUS_Selector, FDE_CSSSYNTAXSTATUS_DeclOpen, FDE_CSSSYNTAXSTATUS_DeclClose, FDE_CSSSYNTAXSTATUS_PropertyName, FDE_CSSSYNTAXSTATUS_PropertyValue, }; enum FDE_CSSLENGTHUNIT { FDE_CSSLENGTHUNIT_Auto, FDE_CSSLENGTHUNIT_None, FDE_CSSLENGTHUNIT_Normal, FDE_CSSLENGTHUNIT_Point, FDE_CSSLENGTHUNIT_Percent, }; enum FDE_CSSBKGATTACHMENT { FDE_CSSBKGATTACHMENT_Scroll, FDE_CSSBKGATTACHMENT_Fixed, }; enum FDE_CSSBKGREPEAT { FDE_CSSBKGREPEAT_Repeat, FDE_CSSBKGREPEAT_RepeatX, FDE_CSSBKGREPEAT_RepeatY, FDE_CSSBKGREPEAT_NoRepeat, }; enum FDE_CSSBORDERSTYLE { FDE_CSSBORDERSTYLE_None, FDE_CSSBORDERSTYLE_Hidden, FDE_CSSBORDERSTYLE_Dotted, FDE_CSSBORDERSTYLE_Dashed, FDE_CSSBORDERSTYLE_Solid, FDE_CSSBORDERSTYLE_Double, FDE_CSSBORDERSTYLE_Groove, FDE_CSSBORDERSTYLE_Ridge, FDE_CSSBORDERSTYLE_Inset, FDE_CSSBORDERSTYLE_outset, }; enum FDE_CSSCLEAR { FDE_CSSCLEAR_None, FDE_CSSCLEAR_Left, FDE_CSSCLEAR_Right, FDE_CSSCLEAR_Both, }; enum FDE_CSSDISPLAY { FDE_CSSDISPLAY_None, FDE_CSSDISPLAY_ListItem, FDE_CSSDISPLAY_RunIn, FDE_CSSDISPLAY_Block, FDE_CSSDISPLAY_Inline, FDE_CSSDISPLAY_InlineBlock, FDE_CSSDISPLAY_InlineTable, FDE_CSSDISPLAY_Table, FDE_CSSDISPLAY_TableRow, FDE_CSSDISPLAY_TableCell, FDE_CSSDISPLAY_TableCaption, FDE_CSSDISPLAY_TableColumn, FDE_CSSDISPLAY_TableRowGroup, FDE_CSSDISPLAY_TableColumnGroup, FDE_CSSDISPLAY_TableHeaderGroup, FDE_CSSDISPLAY_TableFooterGroup, FDE_CSSDISPLAY_Ruby, FDE_CSSDISPLAY_RubyBase, FDE_CSSDISPLAY_RubyText, FDE_CSSDISPLSY_RubyBaseGroup, FDE_CSSDISPLAY_RubyTextGroup, }; enum FDE_CSSVISIBILITY { FDE_CSSVISIBILITY_Visible, FDE_CSSVISIBILITY_Hidden, FDE_CSSVISIBILITY_Collapse, }; enum FDE_CSSFONTSTYLE { FDE_CSSFONTSTYLE_Normal, FDE_CSSFONTSTYLE_Italic, }; enum FDE_CSSFLOAT { FDE_CSSFLOAT_None, FDE_CSSFLOAT_Left, FDE_CSSFLOAT_Right, }; enum FDE_CSSWRITINGMODE { FDE_CSSWRITINGMODE_HorizontalTb, FDE_CSSWRITINGMODE_VerticalRl, FDE_CSSWRITINGMODE_VerticalLr, }; enum FDE_CSSWORDBREAK { FDE_CSSWORDBREAK_Normal, FDE_CSSWORDBREAK_KeepAll, FDE_CSSWORDBREAK_BreakAll, FDE_CSSWORDBREAK_KeepWords, }; enum FDE_CSSPAGEBREAK { FDE_CSSPAGEBREAK_Auto, FDE_CSSPAGEBREAK_Always, FDE_CSSPAGEBREAK_Avoid, FDE_CSSPAGEBREAK_Left, FDE_CSSPAGEBREAK_Right, }; enum FDE_CSSOVERFLOW { FDE_CSSOVERFLOW_Visible, FDE_CSSOVERFLOW_Hidden, FDE_CSSOVERFLOW_Scroll, FDE_CSSOVERFLOW_Auto, FDE_CSSOVERFLOW_NoDisplay, FDE_CSSOVERFLOW_NoContent, }; enum FDE_CSSLINEBREAK { FDE_CSSLINEBREAK_Auto, FDE_CSSLINEBREAK_Loose, FDE_CSSLINEBREAK_Normal, FDE_CSSLINEBREAK_Strict, }; enum FDE_CSSTEXTEMPHASISFILL { FDE_CSSTEXTEMPHASISFILL_Filled, FDE_CSSTEXTEMPHASISFILL_Open, }; enum FDE_CSSTEXTEMPHASISMARK { FDE_CSSTEXTEMPHASISMARK_None, FDE_CSSTEXTEMPHASISMARK_Auto, FDE_CSSTEXTEMPHASISMARK_Dot, FDE_CSSTEXTEMPHASISMARK_Circle, FDE_CSSTEXTEMPHASISMARK_DoubleCircle, FDE_CSSTEXTEMPHASISMARK_Triangle, FDE_CSSTEXTEMPHASISMARK_Sesame, FDE_CSSTEXTEMPHASISMARK_Custom, }; enum FDE_CSSTEXTCOMBINE { FDE_CSSTEXTCOMBINE_Horizontal, FDE_CSSTEXTCOMBINE_None, }; enum FDE_CSSCURSOR { FDE_CSSCURSOR_Auto, FDE_CSSCURSOR_Crosshair, FDE_CSSCURSOR_Default, FDE_CSSCURSOR_Pointer, FDE_CSSCURSOR_Move, FDE_CSSCURSOR_EResize, FDE_CSSCURSOR_NeResize, FDE_CSSCURSOR_NwResize, FDE_CSSCURSOR_NResize, FDE_CSSCURSOR_SeResize, FDE_CSSCURSOR_SwResize, FDE_CSSCURSOR_SResize, FDE_CSSCURSOR_WResize, FDE_CSSCURSOR_Text, FDE_CSSCURSOR_Wait, FDE_CSSCURSOR_Help, FDE_CSSCURSOR_Progress, }; enum FDE_CSSPOSITION { FDE_CSSPOSITION_Static, FDE_CSSPOSITION_Relative, FDE_CSSPOSITION_Absolute, FDE_CSSPOSITION_Fixed, }; enum FDE_CSSCAPTIONSIDE { FDE_CSSCAPTIONSIDE_Top, FDE_CSSCAPTIONSIDE_Bottom, FDE_CSSCAPTIONSIDE_Left, FDE_CSSCAPTIONSIDE_Right, FDE_CSSCAPTIONSIDE_Before, FDE_CSSCAPTIONSIDE_After, }; enum FDE_CSSRUBYALIGN { FDE_CSSRUBYALIGN_Auto, FDE_CSSRUBYALIGN_Start, FDE_CSSRUBYALIGN_Left, FDE_CSSRUBYALIGN_Center, FDE_CSSRUBYALIGN_End, FDE_CSSRUBYALIGN_Right, FDE_CSSRUBYALIGN_DistributeLetter, FDE_CSSRUBYALIGN_DistributeSpace, FDE_CSSRUBYALIGN_LineEdge, }; enum FDE_CSSRUBYOVERHANG { FDE_CSSRUBYOVERHANG_Auto, FDE_CSSRUBYOVERHANG_Start, FDE_CSSRUBYOVERHANG_End, FDE_CSSRUBYOVERHANG_None, }; enum FDE_CSSRUBYPOSITION { FDE_CSSRUBYPOSITION_Before, FDE_CSSRUBYPOSITION_After, FDE_CSSRUBYPOSITION_Right, FDE_CSSRUBYPOSITION_Inline, }; enum FDE_CSSRUBYSPAN { FDE_CSSRUBYSPAN_None, FDE_CSSRUBYSPAN_Attr, }; enum FDE_CSSTEXTALIGN { FDE_CSSTEXTALIGN_Left, FDE_CSSTEXTALIGN_Right, FDE_CSSTEXTALIGN_Center, FDE_CSSTEXTALIGN_Justify, FDE_CSSTEXTALIGN_JustifyAll, }; enum FDE_CSSVERTICALALIGN { FDE_CSSVERTICALALIGN_Baseline, FDE_CSSVERTICALALIGN_Sub, FDE_CSSVERTICALALIGN_Super, FDE_CSSVERTICALALIGN_Top, FDE_CSSVERTICALALIGN_TextTop, FDE_CSSVERTICALALIGN_Middle, FDE_CSSVERTICALALIGN_Bottom, FDE_CSSVERTICALALIGN_TextBottom, FDE_CSSVERTICALALIGN_Number, }; enum FDE_CSSLISTSTYLETYPE { FDE_CSSLISTSTYLETYPE_Disc, FDE_CSSLISTSTYLETYPE_Circle, FDE_CSSLISTSTYLETYPE_Square, FDE_CSSLISTSTYLETYPE_Decimal, FDE_CSSLISTSTYLETYPE_DecimalLeadingZero, FDE_CSSLISTSTYLETYPE_LowerRoman, FDE_CSSLISTSTYLETYPE_UpperRoman, FDE_CSSLISTSTYLETYPE_LowerGreek, FDE_CSSLISTSTYLETYPE_LowerLatin, FDE_CSSLISTSTYLETYPE_UpperLatin, FDE_CSSLISTSTYLETYPE_Armenian, FDE_CSSLISTSTYLETYPE_Georgian, FDE_CSSLISTSTYLETYPE_LowerAlpha, FDE_CSSLISTSTYLETYPE_UpperAlpha, FDE_CSSLISTSTYLETYPE_None, FDE_CSSLISTSTYLETYPE_CjkIdeographic, FDE_CSSLISTSTYLETYPE_Hebrew, FDE_CSSLISTSTYLETYPE_Hiragana, FDE_CSSLISTSTYLETYPE_HiraganaIroha, FDE_CSSLISTSTYLETYPE_Katakana, FDE_CSSLISTSTYLETYPE_KatakanaIroha, }; enum FDE_CSSLISTSTYLEPOSITION { FDE_CSSLISTSTYLEPOSITION_Outside, FDE_CSSLISTSTYLEPOSITION_Inside, }; enum FDE_CSSWHITESPACE { FDE_CSSWHITESPACE_Normal, FDE_CSSWHITESPACE_Pre, FDE_CSSWHITESPACE_Nowrap, FDE_CSSWHITESPACE_PreWrap, FDE_CSSWHITESPACE_PreLine, }; enum FDE_CSSFONTVARIANT { FDE_CSSFONTVARIANT_Normal, FDE_CSSFONTVARIANT_SmallCaps, }; enum FDE_CSSTEXTTRANSFORM { FDE_CSSTEXTTRANSFORM_None, FDE_CSSTEXTTRANSFORM_Capitalize, FDE_CSSTEXTTRANSFORM_UpperCase, FDE_CSSTEXTTRANSFORM_LowerCase, }; enum FDE_CSSTEXTDECORATION { FDE_CSSTEXTDECORATION_None = 0, FDE_CSSTEXTDECORATION_Underline = 1, FDE_CSSTEXTDECORATION_Overline = 2, FDE_CSSTEXTDECORATION_LineThrough = 4, FDE_CSSTEXTDECORATION_Blink = 8, FDE_CSSTEXTDECORATION_Double = 16, }; enum FDE_CSSSTYLESHEETGROUP { FDE_CSSSTYLESHEETGROUP_UserAgent, FDE_CSSSTYLESHEETGROUP_User, FDE_CSSSTYLESHEETGROUP_Author, FDE_CSSSTYLESHEETGROUP_MAX, }; enum FDE_CSSSTYLESHEETPRIORITY { FDE_CSSSTYLESHEETPRIORITY_High, FDE_CSSSTYLESHEETPRIORITY_Mid, FDE_CSSSTYLESHEETPRIORITY_Low, FDE_CSSSTYLESHEETPRIORITY_MAX, }; class IFDE_CSSValue { public: virtual ~IFDE_CSSValue() {} virtual FDE_CSSVALUETYPE GetType() const = 0; }; class IFDE_CSSPrimitiveValue : public IFDE_CSSValue { public: // IFDE_CSSValue FDE_CSSVALUETYPE GetType() const override; virtual FDE_CSSPRIMITIVETYPE GetPrimitiveType() const = 0; virtual FX_ARGB GetRGBColor() const = 0; virtual FX_FLOAT GetFloat() const = 0; virtual const FX_WCHAR* GetString(int32_t& iLength) const = 0; virtual FDE_CSSPROPERTYVALUE GetEnum() const = 0; virtual const FX_WCHAR* GetFuncName() const = 0; virtual int32_t CountArgs() const = 0; virtual IFDE_CSSValue* GetArgs(int32_t index) const = 0; }; class IFDE_CSSValueList : public IFDE_CSSValue { public: // IFDE_CSSValue FDE_CSSVALUETYPE GetType() const override; virtual int32_t CountValues() const = 0; virtual IFDE_CSSValue* GetValue(int32_t index) const = 0; }; class IFDE_CSSRule { public: virtual ~IFDE_CSSRule() {} virtual FDE_CSSRULETYPE GetType() const = 0; }; class IFDE_CSSStyleRule : public IFDE_CSSRule { public: // IFDE_CSSValue FDE_CSSRULETYPE GetType() const override; virtual int32_t CountSelectorLists() const = 0; virtual CFDE_CSSSelector* GetSelectorList(int32_t index) const = 0; virtual CFDE_CSSDeclaration* GetDeclaration() = 0; }; class IFDE_CSSMediaRule : public IFDE_CSSRule { public: // IFDE_CSSValue FDE_CSSRULETYPE GetType() const override; virtual uint32_t GetMediaList() const = 0; virtual int32_t CountRules() const = 0; virtual IFDE_CSSRule* GetRule(int32_t index) = 0; }; class IFDE_CSSFontFaceRule : public IFDE_CSSRule { public: // IFDE_CSSValue FDE_CSSRULETYPE GetType() const override; virtual CFDE_CSSDeclaration* GetDeclaration() = 0; }; class IFDE_CSSStyleSheet : public IFX_Retainable { public: static IFDE_CSSStyleSheet* LoadHTMLStandardStyleSheet(); static IFDE_CSSStyleSheet* LoadFromStream( const CFX_WideString& szUrl, const CFX_RetainPtr& pStream, uint16_t wCodePage, uint32_t dwMediaList = FDE_CSSMEDIATYPE_ALL); static IFDE_CSSStyleSheet* LoadFromBuffer( const CFX_WideString& szUrl, const FX_WCHAR* pBuffer, int32_t iBufSize, uint16_t wCodePage, uint32_t dwMediaList = FDE_CSSMEDIATYPE_ALL); virtual bool GetUrl(CFX_WideString& szUrl) = 0; virtual uint32_t GetMediaList() const = 0; virtual uint16_t GetCodePage() const = 0; virtual int32_t CountRules() const = 0; virtual IFDE_CSSRule* GetRule(int32_t index) = 0; }; typedef CFX_ArrayTemplate CFDE_CSSStyleSheetArray; struct FDE_CSSLENGTH { FDE_CSSLENGTH& Set(FDE_CSSLENGTHUNIT eUnit) { m_iData = eUnit; return *this; } FDE_CSSLENGTH& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { m_iData = ((intptr_t)(fValue * 1024.0f) << FDE_CSSUNITBITS) | eUnit; return *this; } FDE_CSSLENGTHUNIT GetUnit() const { return (FDE_CSSLENGTHUNIT)(m_iData & FDE_CSSUNITMASK); } FX_FLOAT GetValue() const { return (m_iData >> FDE_CSSUNITBITS) / 1024.0f; } bool NonZero() const { return (m_iData >> FDE_CSSUNITBITS) != 0; } private: intptr_t m_iData; }; struct FDE_CSSPOINT { FDE_CSSPOINT& Set(FDE_CSSLENGTHUNIT eUnit) { x.Set(eUnit); y.Set(eUnit); return *this; } FDE_CSSPOINT& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { x.Set(eUnit, fValue); y.Set(eUnit, fValue); return *this; } FDE_CSSLENGTH x, y; }; struct FDE_CSSSIZE { FDE_CSSSIZE& Set(FDE_CSSLENGTHUNIT eUnit) { cx.Set(eUnit); cy.Set(eUnit); return *this; } FDE_CSSSIZE& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { cx.Set(eUnit, fValue); cy.Set(eUnit, fValue); return *this; } FDE_CSSLENGTH cx, cy; }; struct FDE_CSSRECT { FDE_CSSRECT& Set(FDE_CSSLENGTHUNIT eUnit) { left.Set(eUnit); top.Set(eUnit); right.Set(eUnit); bottom.Set(eUnit); return *this; } FDE_CSSRECT& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { left.Set(eUnit, fValue); top.Set(eUnit, fValue); right.Set(eUnit, fValue); bottom.Set(eUnit, fValue); return *this; } FDE_CSSLENGTH left, top, right, bottom; }; class IFDE_CSSFontStyle { public: virtual ~IFDE_CSSFontStyle() {} virtual int32_t CountFontFamilies() const = 0; virtual const FX_WCHAR* GetFontFamily(int32_t index) const = 0; virtual uint16_t GetFontWeight() const = 0; virtual FDE_CSSFONTVARIANT GetFontVariant() const = 0; virtual FDE_CSSFONTSTYLE GetFontStyle() const = 0; virtual FX_FLOAT GetFontSize() const = 0; virtual FX_ARGB GetColor() const = 0; virtual void SetFontWeight(uint16_t wFontWeight) = 0; virtual void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) = 0; virtual void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) = 0; virtual void SetFontSize(FX_FLOAT fFontSize) = 0; virtual void SetColor(FX_ARGB dwFontColor) = 0; }; class IFDE_CSSBoundaryStyle { public: virtual ~IFDE_CSSBoundaryStyle() {} virtual const FDE_CSSRECT* GetBorderWidth() const = 0; virtual const FDE_CSSRECT* GetMarginWidth() const = 0; virtual const FDE_CSSRECT* GetPaddingWidth() const = 0; virtual void SetMarginWidth(const FDE_CSSRECT& rect) = 0; virtual void SetPaddingWidth(const FDE_CSSRECT& rect) = 0; }; class IFDE_CSSPositionStyle { public: virtual ~IFDE_CSSPositionStyle() {} virtual FDE_CSSDISPLAY GetDisplay() const = 0; }; class IFDE_CSSParagraphStyle { public: virtual ~IFDE_CSSParagraphStyle() {} virtual FX_FLOAT GetLineHeight() const = 0; virtual const FDE_CSSLENGTH& GetTextIndent() const = 0; virtual FDE_CSSTEXTALIGN GetTextAlign() const = 0; virtual FDE_CSSVERTICALALIGN GetVerticalAlign() const = 0; virtual FX_FLOAT GetNumberVerticalAlign() const = 0; virtual uint32_t GetTextDecoration() const = 0; virtual const FDE_CSSLENGTH& GetLetterSpacing() const = 0; virtual void SetLineHeight(FX_FLOAT fLineHeight) = 0; virtual void SetTextIndent(const FDE_CSSLENGTH& textIndent) = 0; virtual void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) = 0; virtual void SetNumberVerticalAlign(FX_FLOAT fAlign) = 0; virtual void SetTextDecoration(uint32_t dwTextDecoration) = 0; virtual void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) = 0; }; class IFDE_CSSComputedStyle : public IFX_Retainable { public: virtual void Reset() = 0; virtual IFDE_CSSFontStyle* GetFontStyles() = 0; virtual IFDE_CSSBoundaryStyle* GetBoundaryStyles() = 0; virtual IFDE_CSSPositionStyle* GetPositionStyles() = 0; virtual IFDE_CSSParagraphStyle* GetParagraphStyles() = 0; virtual bool GetCustomStyle(const CFX_WideStringC& wsName, CFX_WideString& wsValue) const = 0; }; #endif // XFA_FDE_CSS_FDE_CSS_H_