Home | History | Annotate | Download | only in css
      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 XFA_FDE_CSS_FDE_CSS_H_
      8 #define XFA_FDE_CSS_FDE_CSS_H_
      9 
     10 #include "core/fxge/fx_dib.h"
     11 #include "xfa/fgas/crt/fgas_stream.h"
     12 #include "xfa/fgas/crt/fgas_utils.h"
     13 #include "xfa/fgas/font/cfgas_fontmgr.h"
     14 
     15 enum FDE_CSSVALUETYPE {
     16   FDE_CSSVALUETYPE_Primitive = 1 << 0,
     17   FDE_CSSVALUETYPE_List = 1 << 1,
     18   FDE_CSSVALUETYPE_Shorthand = 1 << 2,
     19   // Note the values below this comment must be > 0x0F so we can mask the above.
     20   FDE_CSSVALUETYPE_MaybeNumber = 1 << 4,
     21   FDE_CSSVALUETYPE_MaybeEnum = 1 << 5,
     22   FDE_CSSVALUETYPE_MaybeString = 1 << 7,
     23   FDE_CSSVALUETYPE_MaybeColor = 1 << 8
     24 };
     25 
     26 enum class FDE_CSSPrimitiveType : uint8_t {
     27   Unknown = 0,
     28   Number,
     29   String,
     30   RGB,
     31   Enum,
     32   Function,
     33   List,
     34 };
     35 
     36 enum class FDE_CSSPropertyValue : uint8_t {
     37   Bolder = 0,
     38   None,
     39   Dot,
     40   Sub,
     41   Top,
     42   Right,
     43   Normal,
     44   Auto,
     45   Text,
     46   XSmall,
     47   Thin,
     48   Small,
     49   Bottom,
     50   Underline,
     51   Double,
     52   Lighter,
     53   Oblique,
     54   Super,
     55   Center,
     56   XxLarge,
     57   Smaller,
     58   Baseline,
     59   Thick,
     60   Justify,
     61   Middle,
     62   Medium,
     63   ListItem,
     64   XxSmall,
     65   Bold,
     66   SmallCaps,
     67   Inline,
     68   Overline,
     69   TextBottom,
     70   Larger,
     71   InlineTable,
     72   InlineBlock,
     73   Blink,
     74   Block,
     75   Italic,
     76   LineThrough,
     77   XLarge,
     78   Large,
     79   Left,
     80   TextTop,
     81   LAST_MARKER
     82 };
     83 
     84 enum class FDE_CSSProperty : uint8_t {
     85   BorderLeft = 0,
     86   Top,
     87   Margin,
     88   TextIndent,
     89   Right,
     90   PaddingLeft,
     91   MarginLeft,
     92   Border,
     93   BorderTop,
     94   Bottom,
     95   PaddingRight,
     96   BorderBottom,
     97   FontFamily,
     98   FontWeight,
     99   Color,
    100   LetterSpacing,
    101   TextAlign,
    102   BorderRightWidth,
    103   VerticalAlign,
    104   PaddingTop,
    105   FontVariant,
    106   BorderWidth,
    107   BorderBottomWidth,
    108   BorderRight,
    109   FontSize,
    110   BorderSpacing,
    111   FontStyle,
    112   Font,
    113   LineHeight,
    114   MarginRight,
    115   BorderLeftWidth,
    116   Display,
    117   PaddingBottom,
    118   BorderTopWidth,
    119   WordSpacing,
    120   Left,
    121   TextDecoration,
    122   Padding,
    123   MarginBottom,
    124   MarginTop,
    125   LAST_MARKER
    126 };
    127 
    128 enum class FDE_CSSSelectorType : uint8_t { Element = 0, Descendant };
    129 
    130 enum class FDE_CSSLengthUnit : uint8_t {
    131   Auto,
    132   None,
    133   Normal,
    134   Point,
    135   Percent,
    136 };
    137 
    138 enum class FDE_CSSDisplay : uint8_t {
    139   None,
    140   ListItem,
    141   Block,
    142   Inline,
    143   InlineBlock,
    144   InlineTable,
    145 };
    146 
    147 enum class FDE_CSSFontStyle : uint8_t {
    148   Normal,
    149   Italic,
    150 };
    151 
    152 enum class FDE_CSSTextAlign : uint8_t {
    153   Left,
    154   Right,
    155   Center,
    156   Justify,
    157   JustifyAll,
    158 };
    159 
    160 enum class FDE_CSSVerticalAlign : uint8_t {
    161   Baseline,
    162   Sub,
    163   Super,
    164   Top,
    165   TextTop,
    166   Middle,
    167   Bottom,
    168   TextBottom,
    169   Number,
    170 };
    171 
    172 enum class FDE_CSSFontVariant : uint8_t {
    173   Normal,
    174   SmallCaps,
    175 };
    176 
    177 enum FDE_CSSTEXTDECORATION {
    178   FDE_CSSTEXTDECORATION_None = 0,
    179   FDE_CSSTEXTDECORATION_Underline = 1 << 0,
    180   FDE_CSSTEXTDECORATION_Overline = 1 << 1,
    181   FDE_CSSTEXTDECORATION_LineThrough = 1 << 2,
    182   FDE_CSSTEXTDECORATION_Blink = 1 << 3,
    183   FDE_CSSTEXTDECORATION_Double = 1 << 4,
    184 };
    185 
    186 class FDE_CSSLength {
    187  public:
    188   FDE_CSSLength() {}
    189 
    190   explicit FDE_CSSLength(FDE_CSSLengthUnit eUnit) : m_unit(eUnit) {}
    191 
    192   FDE_CSSLength(FDE_CSSLengthUnit eUnit, FX_FLOAT fValue)
    193       : m_unit(eUnit), m_fValue(fValue) {}
    194 
    195   FDE_CSSLength& Set(FDE_CSSLengthUnit eUnit) {
    196     m_unit = eUnit;
    197     return *this;
    198   }
    199 
    200   FDE_CSSLength& Set(FDE_CSSLengthUnit eUnit, FX_FLOAT fValue) {
    201     m_unit = eUnit;
    202     m_fValue = fValue;
    203     return *this;
    204   }
    205 
    206   FDE_CSSLengthUnit GetUnit() const { return m_unit; }
    207 
    208   FX_FLOAT GetValue() const { return m_fValue; }
    209   bool NonZero() const { return static_cast<int>(m_fValue) != 0; }
    210 
    211  private:
    212   FDE_CSSLengthUnit m_unit;
    213   FX_FLOAT m_fValue;
    214 };
    215 
    216 class FDE_CSSRect {
    217  public:
    218   FDE_CSSRect() {}
    219 
    220   FDE_CSSRect(FDE_CSSLengthUnit eUnit, FX_FLOAT val)
    221       : left(eUnit, val),
    222         top(eUnit, val),
    223         right(eUnit, val),
    224         bottom(eUnit, val) {}
    225 
    226   FDE_CSSRect& Set(FDE_CSSLengthUnit eUnit) {
    227     left.Set(eUnit);
    228     top.Set(eUnit);
    229     right.Set(eUnit);
    230     bottom.Set(eUnit);
    231     return *this;
    232   }
    233   FDE_CSSRect& Set(FDE_CSSLengthUnit eUnit, FX_FLOAT fValue) {
    234     left.Set(eUnit, fValue);
    235     top.Set(eUnit, fValue);
    236     right.Set(eUnit, fValue);
    237     bottom.Set(eUnit, fValue);
    238     return *this;
    239   }
    240 
    241   FDE_CSSLength left, top, right, bottom;
    242 };
    243 
    244 #endif  // XFA_FDE_CSS_FDE_CSS_H_
    245