/* * Copyright (C) 2007 Alexey Proskuryakov . * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CSSPrimitiveValueMappings_h #define CSSPrimitiveValueMappings_h #include "CSSPrimitiveValue.h" #include "CSSValueKeywords.h" #include "RenderStyle.h" namespace WebCore { template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderStyle e) : m_type(CSS_IDENT) { switch (e) { case BNONE: m_value.ident = CSS_VAL_NONE; break; case BHIDDEN: m_value.ident = CSS_VAL_HIDDEN; break; case INSET: m_value.ident = CSS_VAL_INSET; break; case GROOVE: m_value.ident = CSS_VAL_GROOVE; break; case RIDGE: m_value.ident = CSS_VAL_RIDGE; break; case OUTSET: m_value.ident = CSS_VAL_OUTSET; break; case DOTTED: m_value.ident = CSS_VAL_DOTTED; break; case DASHED: m_value.ident = CSS_VAL_DASHED; break; case SOLID: m_value.ident = CSS_VAL_SOLID; break; case DOUBLE: m_value.ident = CSS_VAL_DOUBLE; break; } } template<> inline CSSPrimitiveValue::operator EBorderStyle() const { return (EBorderStyle)(m_value.ident - CSS_VAL_NONE); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CompositeOperator e) : m_type(CSS_IDENT) { switch (e) { case CompositeClear: m_value.ident = CSS_VAL_CLEAR; break; case CompositeCopy: m_value.ident = CSS_VAL_COPY; break; case CompositeSourceOver: m_value.ident = CSS_VAL_SOURCE_OVER; break; case CompositeSourceIn: m_value.ident = CSS_VAL_SOURCE_IN; break; case CompositeSourceOut: m_value.ident = CSS_VAL_SOURCE_OUT; break; case CompositeSourceAtop: m_value.ident = CSS_VAL_SOURCE_ATOP; break; case CompositeDestinationOver: m_value.ident = CSS_VAL_DESTINATION_OVER; break; case CompositeDestinationIn: m_value.ident = CSS_VAL_DESTINATION_IN; break; case CompositeDestinationOut: m_value.ident = CSS_VAL_DESTINATION_OUT; break; case CompositeDestinationAtop: m_value.ident = CSS_VAL_DESTINATION_ATOP; break; case CompositeXOR: m_value.ident = CSS_VAL_XOR; break; case CompositePlusDarker: m_value.ident = CSS_VAL_PLUS_DARKER; break; case CompositeHighlight: m_value.ident = CSS_VAL_HIGHLIGHT; break; case CompositePlusLighter: m_value.ident = CSS_VAL_PLUS_LIGHTER; break; } } template<> inline CSSPrimitiveValue::operator CompositeOperator() const { switch (m_value.ident) { case CSS_VAL_CLEAR: return CompositeClear; case CSS_VAL_COPY: return CompositeCopy; case CSS_VAL_SOURCE_OVER: return CompositeSourceOver; case CSS_VAL_SOURCE_IN: return CompositeSourceIn; case CSS_VAL_SOURCE_OUT: return CompositeSourceOut; case CSS_VAL_SOURCE_ATOP: return CompositeSourceAtop; case CSS_VAL_DESTINATION_OVER: return CompositeDestinationOver; case CSS_VAL_DESTINATION_IN: return CompositeDestinationIn; case CSS_VAL_DESTINATION_OUT: return CompositeDestinationOut; case CSS_VAL_DESTINATION_ATOP: return CompositeDestinationAtop; case CSS_VAL_XOR: return CompositeXOR; case CSS_VAL_PLUS_DARKER: return CompositePlusDarker; case CSS_VAL_HIGHLIGHT: return CompositeHighlight; case CSS_VAL_PLUS_LIGHTER: return CompositePlusLighter; } ASSERT_NOT_REACHED(); return CompositeClear; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAppearance e) : m_type(CSS_IDENT) { switch (e) { case NoAppearance: m_value.ident = CSS_VAL_NONE; break; case CheckboxAppearance: m_value.ident = CSS_VAL_CHECKBOX; break; case RadioAppearance: m_value.ident = CSS_VAL_RADIO; break; case PushButtonAppearance: m_value.ident = CSS_VAL_PUSH_BUTTON; break; case SquareButtonAppearance: m_value.ident = CSS_VAL_SQUARE_BUTTON; break; case ButtonAppearance: m_value.ident = CSS_VAL_BUTTON; break; case ButtonBevelAppearance: m_value.ident = CSS_VAL_BUTTON_BEVEL; break; case ListboxAppearance: m_value.ident = CSS_VAL_LISTBOX; break; case ListItemAppearance: m_value.ident = CSS_VAL_LISTITEM; break; case MenulistAppearance: m_value.ident = CSS_VAL_MENULIST; break; case MenulistButtonAppearance: m_value.ident = CSS_VAL_MENULIST_BUTTON; break; case MenulistTextAppearance: m_value.ident = CSS_VAL_MENULIST_TEXT; break; case MenulistTextFieldAppearance: m_value.ident = CSS_VAL_MENULIST_TEXTFIELD; break; case ScrollbarButtonUpAppearance: m_value.ident = CSS_VAL_SCROLLBARBUTTON_UP; break; case ScrollbarButtonDownAppearance: m_value.ident = CSS_VAL_SCROLLBARBUTTON_DOWN; break; case ScrollbarButtonLeftAppearance: m_value.ident = CSS_VAL_SCROLLBARBUTTON_LEFT; break; case ScrollbarButtonRightAppearance: m_value.ident = CSS_VAL_SCROLLBARBUTTON_RIGHT; break; case ScrollbarTrackHorizontalAppearance: m_value.ident = CSS_VAL_SCROLLBARTRACK_HORIZONTAL; break; case ScrollbarTrackVerticalAppearance: m_value.ident = CSS_VAL_SCROLLBARTRACK_VERTICAL; break; case ScrollbarThumbHorizontalAppearance: m_value.ident = CSS_VAL_SCROLLBARTHUMB_HORIZONTAL; break; case ScrollbarThumbVerticalAppearance: m_value.ident = CSS_VAL_SCROLLBARTHUMB_VERTICAL; break; case ScrollbarGripperHorizontalAppearance: m_value.ident = CSS_VAL_SCROLLBARGRIPPER_HORIZONTAL; break; case ScrollbarGripperVerticalAppearance: m_value.ident = CSS_VAL_SCROLLBARGRIPPER_VERTICAL; break; case SliderHorizontalAppearance: m_value.ident = CSS_VAL_SLIDER_HORIZONTAL; break; case SliderVerticalAppearance: m_value.ident = CSS_VAL_SLIDER_VERTICAL; break; case SliderThumbHorizontalAppearance: m_value.ident = CSS_VAL_SLIDERTHUMB_HORIZONTAL; break; case SliderThumbVerticalAppearance: m_value.ident = CSS_VAL_SLIDERTHUMB_VERTICAL; break; case CaretAppearance: m_value.ident = CSS_VAL_CARET; break; case SearchFieldAppearance: m_value.ident = CSS_VAL_SEARCHFIELD; break; case SearchFieldDecorationAppearance: m_value.ident = CSS_VAL_SEARCHFIELD_DECORATION; break; case SearchFieldResultsDecorationAppearance: m_value.ident = CSS_VAL_SEARCHFIELD_RESULTS_DECORATION; break; case SearchFieldResultsButtonAppearance: m_value.ident = CSS_VAL_SEARCHFIELD_RESULTS_BUTTON; break; case SearchFieldCancelButtonAppearance: m_value.ident = CSS_VAL_SEARCHFIELD_CANCEL_BUTTON; break; case TextFieldAppearance: m_value.ident = CSS_VAL_TEXTFIELD; break; case TextAreaAppearance: m_value.ident = CSS_VAL_TEXTAREA; break; } } template<> inline CSSPrimitiveValue::operator EAppearance() const { if (m_value.ident == CSS_VAL_NONE) return NoAppearance; else return EAppearance(m_value.ident - CSS_VAL_CHECKBOX + 1); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBackgroundBox e) : m_type(CSS_IDENT) { switch (e) { case BGBORDER: m_value.ident = CSS_VAL_BORDER; break; case BGPADDING: m_value.ident = CSS_VAL_PADDING; break; case BGCONTENT: m_value.ident = CSS_VAL_CONTENT; break; } } template<> inline CSSPrimitiveValue::operator EBackgroundBox() const { switch (m_value.ident) { case CSS_VAL_BORDER: return BGBORDER; case CSS_VAL_PADDING: return BGPADDING; case CSS_VAL_CONTENT: return BGCONTENT; } ASSERT_NOT_REACHED(); return BGBORDER; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBackgroundRepeat e) : m_type(CSS_IDENT) { switch (e) { case REPEAT: m_value.ident = CSS_VAL_REPEAT; break; case REPEAT_X: m_value.ident = CSS_VAL_REPEAT_X; break; case REPEAT_Y: m_value.ident = CSS_VAL_REPEAT_Y; break; case NO_REPEAT: m_value.ident = CSS_VAL_NO_REPEAT; break; } } template<> inline CSSPrimitiveValue::operator EBackgroundRepeat() const { switch (m_value.ident) { case CSS_VAL_REPEAT: return REPEAT; case CSS_VAL_REPEAT_X: return REPEAT_X; case CSS_VAL_REPEAT_Y: return REPEAT_Y; case CSS_VAL_NO_REPEAT: return NO_REPEAT; } ASSERT_NOT_REACHED(); return REPEAT; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxAlignment e) : m_type(CSS_IDENT) { switch (e) { case BSTRETCH: m_value.ident = CSS_VAL_STRETCH; break; case BSTART: m_value.ident = CSS_VAL_START; break; case BCENTER: m_value.ident = CSS_VAL_CENTER; break; case BEND: m_value.ident = CSS_VAL_END; break; case BBASELINE: m_value.ident = CSS_VAL_BASELINE; break; case BJUSTIFY: m_value.ident = CSS_VAL_JUSTIFY; break; } } template<> inline CSSPrimitiveValue::operator EBoxAlignment() const { switch (m_value.ident) { case CSS_VAL_STRETCH: return BSTRETCH; case CSS_VAL_START: return BSTART; case CSS_VAL_END: return BEND; case CSS_VAL_CENTER: return BCENTER; case CSS_VAL_BASELINE: return BBASELINE; case CSS_VAL_JUSTIFY: return BJUSTIFY; } ASSERT_NOT_REACHED(); return BSTRETCH; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDirection e) : m_type(CSS_IDENT) { switch (e) { case BNORMAL: m_value.ident = CSS_VAL_NORMAL; break; case BREVERSE: m_value.ident = CSS_VAL_REVERSE; break; } } template<> inline CSSPrimitiveValue::operator EBoxDirection() const { switch (m_value.ident) { case CSS_VAL_NORMAL: return BNORMAL; case CSS_VAL_REVERSE: return BREVERSE; } ASSERT_NOT_REACHED(); return BNORMAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxLines e) : m_type(CSS_IDENT) { switch (e) { case SINGLE: m_value.ident = CSS_VAL_SINGLE; break; case MULTIPLE: m_value.ident = CSS_VAL_MULTIPLE; break; } } template<> inline CSSPrimitiveValue::operator EBoxLines() const { switch (m_value.ident) { case CSS_VAL_SINGLE: return SINGLE; case CSS_VAL_MULTIPLE: return MULTIPLE; } ASSERT_NOT_REACHED(); return SINGLE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxOrient e) : m_type(CSS_IDENT) { switch (e) { case HORIZONTAL: m_value.ident = CSS_VAL_HORIZONTAL; break; case VERTICAL: m_value.ident = CSS_VAL_VERTICAL; break; } } template<> inline CSSPrimitiveValue::operator EBoxOrient() const { switch (m_value.ident) { case CSS_VAL_HORIZONTAL: case CSS_VAL_INLINE_AXIS: return HORIZONTAL; case CSS_VAL_VERTICAL: return VERTICAL; } ASSERT_NOT_REACHED(); return HORIZONTAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECaptionSide e) : m_type(CSS_IDENT) { switch (e) { case CAPLEFT: m_value.ident = CSS_VAL_LEFT; break; case CAPRIGHT: m_value.ident = CSS_VAL_RIGHT; break; case CAPTOP: m_value.ident = CSS_VAL_TOP; break; case CAPBOTTOM: m_value.ident = CSS_VAL_BOTTOM; break; } } template<> inline CSSPrimitiveValue::operator ECaptionSide() const { switch (m_value.ident) { case CSS_VAL_LEFT: return CAPLEFT; case CSS_VAL_RIGHT: return CAPRIGHT; case CSS_VAL_TOP: return CAPTOP; case CSS_VAL_BOTTOM: return CAPBOTTOM; } ASSERT_NOT_REACHED(); return CAPTOP; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EClear e) : m_type(CSS_IDENT) { switch (e) { case CNONE: m_value.ident = CSS_VAL_NONE; break; case CLEFT: m_value.ident = CSS_VAL_LEFT; break; case CRIGHT: m_value.ident = CSS_VAL_RIGHT; break; case CBOTH: m_value.ident = CSS_VAL_BOTH; break; } } template<> inline CSSPrimitiveValue::operator EClear() const { switch (m_value.ident) { case CSS_VAL_NONE: return CNONE; case CSS_VAL_LEFT: return CLEFT; case CSS_VAL_RIGHT: return CRIGHT; case CSS_VAL_BOTH: return CBOTH; } ASSERT_NOT_REACHED(); return CNONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECursor e) : m_type(CSS_IDENT) { switch (e) { case CURSOR_AUTO: m_value.ident = CSS_VAL_AUTO; break; case CURSOR_CROSS: m_value.ident = CSS_VAL_CROSSHAIR; break; case CURSOR_DEFAULT: m_value.ident = CSS_VAL_DEFAULT; break; case CURSOR_POINTER: m_value.ident = CSS_VAL_POINTER; break; case CURSOR_MOVE: m_value.ident = CSS_VAL_MOVE; break; case CURSOR_CELL: m_value.ident = CSS_VAL_CELL; break; case CURSOR_VERTICAL_TEXT: m_value.ident = CSS_VAL_VERTICAL_TEXT; break; case CURSOR_CONTEXT_MENU: m_value.ident = CSS_VAL_CONTEXT_MENU; break; case CURSOR_ALIAS: m_value.ident = CSS_VAL_ALIAS; break; case CURSOR_COPY: m_value.ident = CSS_VAL_COPY; break; case CURSOR_NONE: m_value.ident = CSS_VAL_NONE; break; case CURSOR_PROGRESS: m_value.ident = CSS_VAL_PROGRESS; break; case CURSOR_NO_DROP: m_value.ident = CSS_VAL_NO_DROP; break; case CURSOR_NOT_ALLOWED: m_value.ident = CSS_VAL_NOT_ALLOWED; break; case CURSOR_WEBKIT_ZOOM_IN: m_value.ident = CSS_VAL__WEBKIT_ZOOM_IN; break; case CURSOR_WEBKIT_ZOOM_OUT: m_value.ident = CSS_VAL__WEBKIT_ZOOM_OUT; break; case CURSOR_E_RESIZE: m_value.ident = CSS_VAL_E_RESIZE; break; case CURSOR_NE_RESIZE: m_value.ident = CSS_VAL_NE_RESIZE; break; case CURSOR_NW_RESIZE: m_value.ident = CSS_VAL_NW_RESIZE; break; case CURSOR_N_RESIZE: m_value.ident = CSS_VAL_N_RESIZE; break; case CURSOR_SE_RESIZE: m_value.ident = CSS_VAL_SE_RESIZE; break; case CURSOR_SW_RESIZE: m_value.ident = CSS_VAL_SW_RESIZE; break; case CURSOR_S_RESIZE: m_value.ident = CSS_VAL_S_RESIZE; break; case CURSOR_W_RESIZE: m_value.ident = CSS_VAL_W_RESIZE; break; case CURSOR_EW_RESIZE: m_value.ident = CSS_VAL_EW_RESIZE; break; case CURSOR_NS_RESIZE: m_value.ident = CSS_VAL_NS_RESIZE; break; case CURSOR_NESW_RESIZE: m_value.ident = CSS_VAL_NESW_RESIZE; break; case CURSOR_NWSE_RESIZE: m_value.ident = CSS_VAL_NWSE_RESIZE; break; case CURSOR_COL_RESIZE: m_value.ident = CSS_VAL_COL_RESIZE; break; case CURSOR_ROW_RESIZE: m_value.ident = CSS_VAL_ROW_RESIZE; break; case CURSOR_TEXT: m_value.ident = CSS_VAL_TEXT; break; case CURSOR_WAIT: m_value.ident = CSS_VAL_WAIT; break; case CURSOR_HELP: m_value.ident = CSS_VAL_HELP; break; case CURSOR_ALL_SCROLL: m_value.ident = CSS_VAL_ALL_SCROLL; break; } } template<> inline CSSPrimitiveValue::operator ECursor() const { if (m_value.ident == CSS_VAL_COPY) return CURSOR_COPY; else if (m_value.ident == CSS_VAL_NONE) return CURSOR_NONE; else return (ECursor)(m_value.ident - CSS_VAL_AUTO); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDisplay e) : m_type(CSS_IDENT) { switch (e) { case INLINE: m_value.ident = CSS_VAL_INLINE; break; case BLOCK: m_value.ident = CSS_VAL_BLOCK; break; case LIST_ITEM: m_value.ident = CSS_VAL_LIST_ITEM; break; case RUN_IN: m_value.ident = CSS_VAL_RUN_IN; break; case COMPACT: m_value.ident = CSS_VAL_COMPACT; break; case INLINE_BLOCK: m_value.ident = CSS_VAL_INLINE_BLOCK; break; case TABLE: m_value.ident = CSS_VAL_TABLE; break; case INLINE_TABLE: m_value.ident = CSS_VAL_INLINE_TABLE; break; case TABLE_ROW_GROUP: m_value.ident = CSS_VAL_TABLE_ROW_GROUP; break; case TABLE_HEADER_GROUP: m_value.ident = CSS_VAL_TABLE_HEADER_GROUP; break; case TABLE_FOOTER_GROUP: m_value.ident = CSS_VAL_TABLE_FOOTER_GROUP; break; case TABLE_ROW: m_value.ident = CSS_VAL_TABLE_ROW; break; case TABLE_COLUMN_GROUP: m_value.ident = CSS_VAL_TABLE_COLUMN_GROUP; break; case TABLE_COLUMN: m_value.ident = CSS_VAL_TABLE_COLUMN; break; case TABLE_CELL: m_value.ident = CSS_VAL_TABLE_CELL; break; case TABLE_CAPTION: m_value.ident = CSS_VAL_TABLE_CAPTION; break; case BOX: m_value.ident = CSS_VAL__WEBKIT_BOX; break; case INLINE_BOX: m_value.ident = CSS_VAL__WEBKIT_INLINE_BOX; break; case NONE: m_value.ident = CSS_VAL_NONE; break; } } template<> inline CSSPrimitiveValue::operator EDisplay() const { if (m_value.ident == CSS_VAL_NONE) return NONE; else return EDisplay(m_value.ident - CSS_VAL_INLINE); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EEmptyCell e) : m_type(CSS_IDENT) { switch (e) { case SHOW: m_value.ident = CSS_VAL_SHOW; break; case HIDE: m_value.ident = CSS_VAL_HIDE; break; } } template<> inline CSSPrimitiveValue::operator EEmptyCell() const { switch (m_value.ident) { case CSS_VAL_SHOW: return SHOW; case CSS_VAL_HIDE: return HIDE; } ASSERT_NOT_REACHED(); return SHOW; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e) : m_type(CSS_IDENT) { switch (e) { case FNONE: m_value.ident = CSS_VAL_NONE; break; case FLEFT: m_value.ident = CSS_VAL_LEFT; break; case FRIGHT: m_value.ident = CSS_VAL_RIGHT; break; } } template<> inline CSSPrimitiveValue::operator EFloat() const { switch (m_value.ident) { case CSS_VAL_LEFT: return FLEFT; case CSS_VAL_RIGHT: return FRIGHT; case CSS_VAL_NONE: case CSS_VAL_CENTER: // Non-standard CSS value return FNONE; } ASSERT_NOT_REACHED(); return FNONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EKHTMLLineBreak e) : m_type(CSS_IDENT) { switch (e) { case LBNORMAL: m_value.ident = CSS_VAL_NORMAL; break; case AFTER_WHITE_SPACE: m_value.ident = CSS_VAL_AFTER_WHITE_SPACE; break; } } template<> inline CSSPrimitiveValue::operator EKHTMLLineBreak() const { switch (m_value.ident) { case CSS_VAL_AFTER_WHITE_SPACE: return AFTER_WHITE_SPACE; case CSS_VAL_NORMAL: return LBNORMAL; } ASSERT_NOT_REACHED(); return LBNORMAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStylePosition e) : m_type(CSS_IDENT) { switch (e) { case OUTSIDE: m_value.ident = CSS_VAL_OUTSIDE; break; case INSIDE: m_value.ident = CSS_VAL_INSIDE; break; } } template<> inline CSSPrimitiveValue::operator EListStylePosition() const { return (EListStylePosition)(m_value.ident - CSS_VAL_OUTSIDE); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStyleType e) : m_type(CSS_IDENT) { switch (e) { case LNONE: m_value.ident = CSS_VAL_NONE; break; case DISC: m_value.ident = CSS_VAL_DISC; break; case CIRCLE: m_value.ident = CSS_VAL_CIRCLE; break; case SQUARE: m_value.ident = CSS_VAL_SQUARE; break; case LDECIMAL: m_value.ident = CSS_VAL_DECIMAL; break; case DECIMAL_LEADING_ZERO: m_value.ident = CSS_VAL_DECIMAL_LEADING_ZERO; break; case LOWER_ROMAN: m_value.ident = CSS_VAL_LOWER_ROMAN; break; case UPPER_ROMAN: m_value.ident = CSS_VAL_UPPER_ROMAN; break; case LOWER_GREEK: m_value.ident = CSS_VAL_LOWER_GREEK; break; case LOWER_ALPHA: m_value.ident = CSS_VAL_LOWER_ALPHA; break; case LOWER_LATIN: m_value.ident = CSS_VAL_LOWER_LATIN; break; case UPPER_ALPHA: m_value.ident = CSS_VAL_UPPER_ALPHA; break; case UPPER_LATIN: m_value.ident = CSS_VAL_UPPER_LATIN; break; case HEBREW: m_value.ident = CSS_VAL_HEBREW; break; case ARMENIAN: m_value.ident = CSS_VAL_ARMENIAN; break; case GEORGIAN: m_value.ident = CSS_VAL_GEORGIAN; break; case CJK_IDEOGRAPHIC: m_value.ident = CSS_VAL_CJK_IDEOGRAPHIC; break; case HIRAGANA: m_value.ident = CSS_VAL_HIRAGANA; break; case KATAKANA: m_value.ident = CSS_VAL_KATAKANA; break; case HIRAGANA_IROHA: m_value.ident = CSS_VAL_HIRAGANA_IROHA; break; case KATAKANA_IROHA: m_value.ident = CSS_VAL_KATAKANA_IROHA; break; } } template<> inline CSSPrimitiveValue::operator EListStyleType() const { switch (m_value.ident) { case CSS_VAL_NONE: return LNONE; default: return EListStyleType(m_value.ident - CSS_VAL_DISC); } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarginCollapse e) : m_type(CSS_IDENT) { switch (e) { case MCOLLAPSE: m_value.ident = CSS_VAL_COLLAPSE; break; case MSEPARATE: m_value.ident = CSS_VAL_SEPARATE; break; case MDISCARD: m_value.ident = CSS_VAL_DISCARD; break; } } template<> inline CSSPrimitiveValue::operator EMarginCollapse() const { switch (m_value.ident) { case CSS_VAL_COLLAPSE: return MCOLLAPSE; case CSS_VAL_SEPARATE: return MSEPARATE; case CSS_VAL_DISCARD: return MDISCARD; } ASSERT_NOT_REACHED(); return MCOLLAPSE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeBehavior e) : m_type(CSS_IDENT) { switch (e) { case MNONE: m_value.ident = CSS_VAL_NONE; break; case MSCROLL: m_value.ident = CSS_VAL_SCROLL; break; case MSLIDE: m_value.ident = CSS_VAL_SLIDE; break; case MALTERNATE: m_value.ident = CSS_VAL_ALTERNATE; break; } } template<> inline CSSPrimitiveValue::operator EMarqueeBehavior() const { switch (m_value.ident) { case CSS_VAL_NONE: return MNONE; case CSS_VAL_SCROLL: return MSCROLL; case CSS_VAL_SLIDE: return MSLIDE; case CSS_VAL_ALTERNATE: return MALTERNATE; } ASSERT_NOT_REACHED(); return MNONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeDirection e) : m_type(CSS_IDENT) { switch (e) { case MFORWARD: m_value.ident = CSS_VAL_FORWARDS; break; case MBACKWARD: m_value.ident = CSS_VAL_BACKWARDS; break; case MAUTO: m_value.ident = CSS_VAL_AUTO; break; case MUP: m_value.ident = CSS_VAL_UP; break; case MDOWN: m_value.ident = CSS_VAL_DOWN; break; case MLEFT: m_value.ident = CSS_VAL_LEFT; break; case MRIGHT: m_value.ident = CSS_VAL_RIGHT; break; } } template<> inline CSSPrimitiveValue::operator EMarqueeDirection() const { switch (m_value.ident) { case CSS_VAL_FORWARDS: return MFORWARD; case CSS_VAL_BACKWARDS: return MBACKWARD; case CSS_VAL_AUTO: return MAUTO; case CSS_VAL_AHEAD: case CSS_VAL_UP: // We don't support vertical languages, so AHEAD just maps to UP. return MUP; case CSS_VAL_REVERSE: case CSS_VAL_DOWN: // REVERSE just maps to DOWN, since we don't do vertical text. return MDOWN; case CSS_VAL_LEFT: return MLEFT; case CSS_VAL_RIGHT: return MRIGHT; } ASSERT_NOT_REACHED(); return MAUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMatchNearestMailBlockquoteColor e) : m_type(CSS_IDENT) { switch (e) { case BCNORMAL: m_value.ident = CSS_VAL_NORMAL; break; case MATCH: m_value.ident = CSS_VAL_MATCH; break; } } template<> inline CSSPrimitiveValue::operator EMatchNearestMailBlockquoteColor() const { switch (m_value.ident) { case CSS_VAL_NORMAL: return BCNORMAL; case CSS_VAL_MATCH: return MATCH; } ASSERT_NOT_REACHED(); return BCNORMAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ENBSPMode e) : m_type(CSS_IDENT) { switch (e) { case NBNORMAL: m_value.ident = CSS_VAL_NORMAL; break; case SPACE: m_value.ident = CSS_VAL_SPACE; break; } } template<> inline CSSPrimitiveValue::operator ENBSPMode() const { switch (m_value.ident) { case CSS_VAL_SPACE: return SPACE; case CSS_VAL_NORMAL: return NBNORMAL; } ASSERT_NOT_REACHED(); return NBNORMAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e) : m_type(CSS_IDENT) { switch (e) { case OVISIBLE: m_value.ident = CSS_VAL_VISIBLE; break; case OHIDDEN: m_value.ident = CSS_VAL_HIDDEN; break; case OSCROLL: m_value.ident = CSS_VAL_SCROLL; break; case OAUTO: m_value.ident = CSS_VAL_AUTO; break; case OMARQUEE: m_value.ident = CSS_VAL__WEBKIT_MARQUEE; break; case OOVERLAY: m_value.ident = CSS_VAL_OVERLAY; break; } } template<> inline CSSPrimitiveValue::operator EOverflow() const { switch (m_value.ident) { case CSS_VAL_VISIBLE: return OVISIBLE; case CSS_VAL_HIDDEN: return OHIDDEN; case CSS_VAL_SCROLL: return OSCROLL; case CSS_VAL_AUTO: return OAUTO; case CSS_VAL__WEBKIT_MARQUEE: return OMARQUEE; case CSS_VAL_OVERLAY: return OOVERLAY; } ASSERT_NOT_REACHED(); return OVISIBLE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPageBreak e) : m_type(CSS_IDENT) { switch (e) { case PBAUTO: m_value.ident = CSS_VAL_AUTO; break; case PBALWAYS: m_value.ident = CSS_VAL_ALWAYS; break; case PBAVOID: m_value.ident = CSS_VAL_AVOID; break; } } template<> inline CSSPrimitiveValue::operator EPageBreak() const { switch (m_value.ident) { case CSS_VAL_AUTO: return PBAUTO; case CSS_VAL_LEFT: case CSS_VAL_RIGHT: case CSS_VAL_ALWAYS: return PBALWAYS; // CSS2.1: "Conforming user agents may map left/right to always." case CSS_VAL_AVOID: return PBAVOID; } ASSERT_NOT_REACHED(); return PBAUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPosition e) : m_type(CSS_IDENT) { switch (e) { case StaticPosition: m_value.ident = CSS_VAL_STATIC; break; case RelativePosition: m_value.ident = CSS_VAL_RELATIVE; break; case AbsolutePosition: m_value.ident = CSS_VAL_ABSOLUTE; break; case FixedPosition: m_value.ident = CSS_VAL_FIXED; break; } } template<> inline CSSPrimitiveValue::operator EPosition() const { switch (m_value.ident) { case CSS_VAL_STATIC: return StaticPosition; case CSS_VAL_RELATIVE: return RelativePosition; case CSS_VAL_ABSOLUTE: return AbsolutePosition; case CSS_VAL_FIXED: return FixedPosition; } ASSERT_NOT_REACHED(); return StaticPosition; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EResize e) : m_type(CSS_IDENT) { switch (e) { case RESIZE_BOTH: m_value.ident = CSS_VAL_BOTH; break; case RESIZE_HORIZONTAL: m_value.ident = CSS_VAL_HORIZONTAL; break; case RESIZE_VERTICAL: m_value.ident = CSS_VAL_VERTICAL; break; case RESIZE_NONE: m_value.ident = CSS_VAL_NONE; break; } } template<> inline CSSPrimitiveValue::operator EResize() const { switch (m_value.ident) { case CSS_VAL_BOTH: return RESIZE_BOTH; case CSS_VAL_HORIZONTAL: return RESIZE_HORIZONTAL; case CSS_VAL_VERTICAL: return RESIZE_VERTICAL; case CSS_VAL_AUTO: ASSERT_NOT_REACHED(); // Depends on settings, thus should be handled by the caller. return RESIZE_NONE; case CSS_VAL_NONE: return RESIZE_NONE; } ASSERT_NOT_REACHED(); return RESIZE_NONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETableLayout e) : m_type(CSS_IDENT) { switch (e) { case TAUTO: m_value.ident = CSS_VAL_AUTO; break; case TFIXED: m_value.ident = CSS_VAL_FIXED; break; } } template<> inline CSSPrimitiveValue::operator ETableLayout() const { switch (m_value.ident) { case CSS_VAL_FIXED: return TFIXED; case CSS_VAL_AUTO: return TAUTO; } ASSERT_NOT_REACHED(); return TAUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAlign e) : m_type(CSS_IDENT) { switch (e) { case TAAUTO: m_value.ident = CSS_VAL_AUTO; break; case LEFT: m_value.ident = CSS_VAL_LEFT; break; case RIGHT: m_value.ident = CSS_VAL_RIGHT; break; case CENTER: m_value.ident = CSS_VAL_CENTER; break; case JUSTIFY: m_value.ident = CSS_VAL_JUSTIFY; break; case WEBKIT_LEFT: m_value.ident = CSS_VAL__WEBKIT_LEFT; break; case WEBKIT_RIGHT: m_value.ident = CSS_VAL__WEBKIT_RIGHT; break; case WEBKIT_CENTER: m_value.ident = CSS_VAL__WEBKIT_CENTER; break; } } template<> inline CSSPrimitiveValue::operator ETextAlign() const { switch (m_value.ident) { case CSS_VAL_START: case CSS_VAL_END: ASSERT_NOT_REACHED(); // Depends on direction, thus should be handled by the caller. return LEFT; default: return (ETextAlign)(m_value.ident - CSS_VAL__WEBKIT_AUTO); } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextSecurity e) : m_type(CSS_IDENT) { switch (e) { case TSNONE: m_value.ident = CSS_VAL_NONE; break; case TSDISC: m_value.ident = CSS_VAL_DISC; break; case TSCIRCLE: m_value.ident = CSS_VAL_CIRCLE; break; case TSSQUARE: m_value.ident = CSS_VAL_SQUARE; break; } } template<> inline CSSPrimitiveValue::operator ETextSecurity() const { switch (m_value.ident) { case CSS_VAL_NONE: return TSNONE; case CSS_VAL_DISC: return TSDISC; case CSS_VAL_CIRCLE: return TSCIRCLE; case CSS_VAL_SQUARE: return TSSQUARE; } ASSERT_NOT_REACHED(); return TSNONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextTransform e) : m_type(CSS_IDENT) { switch (e) { case CAPITALIZE: m_value.ident = CSS_VAL_CAPITALIZE; break; case UPPERCASE: m_value.ident = CSS_VAL_UPPERCASE; break; case LOWERCASE: m_value.ident = CSS_VAL_LOWERCASE; break; case TTNONE: m_value.ident = CSS_VAL_NONE; break; } } template<> inline CSSPrimitiveValue::operator ETextTransform() const { switch (m_value.ident) { case CSS_VAL_CAPITALIZE: return CAPITALIZE; case CSS_VAL_UPPERCASE: return UPPERCASE; case CSS_VAL_LOWERCASE: return LOWERCASE; case CSS_VAL_NONE: return TTNONE; } ASSERT_NOT_REACHED(); return TTNONE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUnicodeBidi e) : m_type(CSS_IDENT) { switch (e) { case UBNormal: m_value.ident = CSS_VAL_NORMAL; break; case Embed: m_value.ident = CSS_VAL_EMBED; break; case Override: m_value.ident = CSS_VAL_BIDI_OVERRIDE; break; } } template<> inline CSSPrimitiveValue::operator EUnicodeBidi() const { switch (m_value.ident) { case CSS_VAL_NORMAL: return UBNormal; case CSS_VAL_EMBED: return Embed; case CSS_VAL_BIDI_OVERRIDE: return Override; } ASSERT_NOT_REACHED(); return UBNormal; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserDrag e) : m_type(CSS_IDENT) { switch (e) { case DRAG_AUTO: m_value.ident = CSS_VAL_AUTO; break; case DRAG_NONE: m_value.ident = CSS_VAL_NONE; break; case DRAG_ELEMENT: m_value.ident = CSS_VAL_ELEMENT; break; } } template<> inline CSSPrimitiveValue::operator EUserDrag() const { switch (m_value.ident) { case CSS_VAL_AUTO: return DRAG_AUTO; case CSS_VAL_NONE: return DRAG_NONE; case CSS_VAL_ELEMENT: return DRAG_ELEMENT; } ASSERT_NOT_REACHED(); return DRAG_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserModify e) : m_type(CSS_IDENT) { switch (e) { case READ_ONLY: m_value.ident = CSS_VAL_READ_ONLY; break; case READ_WRITE: m_value.ident = CSS_VAL_READ_WRITE; break; case READ_WRITE_PLAINTEXT_ONLY: m_value.ident = CSS_VAL_READ_WRITE_PLAINTEXT_ONLY; break; } } template<> inline CSSPrimitiveValue::operator EUserModify() const { return EUserModify(m_value.ident - CSS_VAL_READ_ONLY); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserSelect e) : m_type(CSS_IDENT) { switch (e) { case SELECT_NONE: m_value.ident = CSS_VAL_NONE; break; case SELECT_TEXT: m_value.ident = CSS_VAL_TEXT; break; } } template<> inline CSSPrimitiveValue::operator EUserSelect() const { switch (m_value.ident) { case CSS_VAL_AUTO: return SELECT_TEXT; case CSS_VAL_NONE: return SELECT_NONE; case CSS_VAL_TEXT: return SELECT_TEXT; } ASSERT_NOT_REACHED(); return SELECT_TEXT; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVisibility e) : m_type(CSS_IDENT) { switch (e) { case VISIBLE: m_value.ident = CSS_VAL_VISIBLE; break; case HIDDEN: m_value.ident = CSS_VAL_HIDDEN; break; case COLLAPSE: m_value.ident = CSS_VAL_COLLAPSE; break; } } template<> inline CSSPrimitiveValue::operator EVisibility() const { switch (m_value.ident) { case CSS_VAL_HIDDEN: return HIDDEN; case CSS_VAL_VISIBLE: return VISIBLE; case CSS_VAL_COLLAPSE: return COLLAPSE; } ASSERT_NOT_REACHED(); return VISIBLE; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWhiteSpace e) : m_type(CSS_IDENT) { switch (e) { case NORMAL: m_value.ident = CSS_VAL_NORMAL; break; case PRE: m_value.ident = CSS_VAL_PRE; break; case PRE_WRAP: m_value.ident = CSS_VAL_PRE_WRAP; break; case PRE_LINE: m_value.ident = CSS_VAL_PRE_LINE; break; case NOWRAP: m_value.ident = CSS_VAL_NOWRAP; break; case KHTML_NOWRAP: m_value.ident = CSS_VAL__WEBKIT_NOWRAP; break; } } template<> inline CSSPrimitiveValue::operator EWhiteSpace() const { switch (m_value.ident) { case CSS_VAL__WEBKIT_NOWRAP: return KHTML_NOWRAP; case CSS_VAL_NOWRAP: return NOWRAP; case CSS_VAL_PRE: return PRE; case CSS_VAL_PRE_WRAP: return PRE_WRAP; case CSS_VAL_PRE_LINE: return PRE_LINE; case CSS_VAL_NORMAL: return NORMAL; } ASSERT_NOT_REACHED(); return NORMAL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordBreak e) : m_type(CSS_IDENT) { switch (e) { case NormalWordBreak: m_value.ident = CSS_VAL_NORMAL; break; case BreakAllWordBreak: m_value.ident = CSS_VAL_BREAK_ALL; break; case BreakWordBreak: m_value.ident = CSS_VAL_BREAK_WORD; break; } } template<> inline CSSPrimitiveValue::operator EWordBreak() const { switch (m_value.ident) { case CSS_VAL_BREAK_ALL: return BreakAllWordBreak; case CSS_VAL_BREAK_WORD: return BreakWordBreak; case CSS_VAL_NORMAL: return NormalWordBreak; } ASSERT_NOT_REACHED(); return NormalWordBreak; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordWrap e) : m_type(CSS_IDENT) { switch (e) { case NormalWordWrap: m_value.ident = CSS_VAL_NORMAL; break; case BreakWordWrap: m_value.ident = CSS_VAL_BREAK_WORD; break; } } template<> inline CSSPrimitiveValue::operator EWordWrap() const { switch (m_value.ident) { case CSS_VAL_BREAK_WORD: return BreakWordWrap; case CSS_VAL_NORMAL: return NormalWordWrap; } ASSERT_NOT_REACHED(); return NormalWordWrap; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextDirection e) : m_type(CSS_IDENT) { switch (e) { case LTR: m_value.ident = CSS_VAL_LTR; break; case RTL: m_value.ident = CSS_VAL_RTL; break; } } template<> inline CSSPrimitiveValue::operator TextDirection() const { switch (m_value.ident) { case CSS_VAL_LTR: return LTR; case CSS_VAL_RTL: return RTL; } ASSERT_NOT_REACHED(); return LTR; } #if ENABLE(SVG) template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineCap e) : m_type(CSS_IDENT) { switch (e) { case ButtCap: m_value.ident = CSS_VAL_BUTT; break; case RoundCap: m_value.ident = CSS_VAL_ROUND; break; case SquareCap: m_value.ident = CSS_VAL_SQUARE; break; } } template<> inline CSSPrimitiveValue::operator LineCap() const { switch (m_value.ident) { case CSS_VAL_BUTT: return ButtCap; case CSS_VAL_ROUND: return RoundCap; case CSS_VAL_SQUARE: return SquareCap; } ASSERT_NOT_REACHED(); return ButtCap; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineJoin e) : m_type(CSS_IDENT) { switch (e) { case MiterJoin: m_value.ident = CSS_VAL_MITER; break; case RoundJoin: m_value.ident = CSS_VAL_ROUND; break; case BevelJoin: m_value.ident = CSS_VAL_BEVEL; break; } } template<> inline CSSPrimitiveValue::operator LineJoin() const { switch (m_value.ident) { case CSS_VAL_MITER: return MiterJoin; case CSS_VAL_ROUND: return RoundJoin; case CSS_VAL_BEVEL: return BevelJoin; } ASSERT_NOT_REACHED(); return MiterJoin; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WindRule e) : m_type(CSS_IDENT) { switch (e) { case RULE_NONZERO: m_value.ident = CSS_VAL_NONZERO; break; case RULE_EVENODD: m_value.ident = CSS_VAL_EVENODD; break; } } template<> inline CSSPrimitiveValue::operator WindRule() const { switch (m_value.ident) { case CSS_VAL_NONZERO: return RULE_NONZERO; case CSS_VAL_EVENODD: return RULE_EVENODD; } ASSERT_NOT_REACHED(); return RULE_NONZERO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignmentBaseline e) : m_type(CSS_IDENT) { switch (e) { case AB_AUTO: m_value.ident = CSS_VAL_AUTO; break; case AB_BASELINE: m_value.ident = CSS_VAL_BASELINE; break; case AB_BEFORE_EDGE: m_value.ident = CSS_VAL_BEFORE_EDGE; break; case AB_TEXT_BEFORE_EDGE: m_value.ident = CSS_VAL_TEXT_BEFORE_EDGE; break; case AB_MIDDLE: m_value.ident = CSS_VAL_MIDDLE; break; case AB_CENTRAL: m_value.ident = CSS_VAL_CENTRAL; break; case AB_AFTER_EDGE: m_value.ident = CSS_VAL_AFTER_EDGE; break; case AB_TEXT_AFTER_EDGE: m_value.ident = CSS_VAL_TEXT_AFTER_EDGE; break; case AB_IDEOGRAPHIC: m_value.ident = CSS_VAL_IDEOGRAPHIC; break; case AB_ALPHABETIC: m_value.ident = CSS_VAL_ALPHABETIC; break; case AB_HANGING: m_value.ident = CSS_VAL_HANGING; break; case AB_MATHEMATICAL: m_value.ident = CSS_VAL_MATHEMATICAL; break; } } template<> inline CSSPrimitiveValue::operator EAlignmentBaseline() const { switch (m_value.ident) { case CSS_VAL_AUTO: return AB_AUTO; case CSS_VAL_BASELINE: return AB_BASELINE; case CSS_VAL_BEFORE_EDGE: return AB_BEFORE_EDGE; case CSS_VAL_TEXT_BEFORE_EDGE: return AB_TEXT_BEFORE_EDGE; case CSS_VAL_MIDDLE: return AB_MIDDLE; case CSS_VAL_CENTRAL: return AB_CENTRAL; case CSS_VAL_AFTER_EDGE: return AB_AFTER_EDGE; case CSS_VAL_TEXT_AFTER_EDGE: return AB_TEXT_AFTER_EDGE; case CSS_VAL_IDEOGRAPHIC: return AB_IDEOGRAPHIC; case CSS_VAL_ALPHABETIC: return AB_ALPHABETIC; case CSS_VAL_HANGING: return AB_HANGING; case CSS_VAL_MATHEMATICAL: return AB_MATHEMATICAL; } ASSERT_NOT_REACHED(); return AB_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorInterpolation e) : m_type(CSS_IDENT) { switch (e) { case CI_AUTO: m_value.ident = CSS_VAL_AUTO; break; case CI_SRGB: m_value.ident = CSS_VAL_SRGB; break; case CI_LINEARRGB: m_value.ident = CSS_VAL_LINEARRGB; break; } } template<> inline CSSPrimitiveValue::operator EColorInterpolation() const { switch (m_value.ident) { case CSS_VAL_SRGB: return CI_SRGB; case CSS_VAL_LINEARRGB: return CI_LINEARRGB; case CSS_VAL_AUTO: return CI_AUTO; } ASSERT_NOT_REACHED(); return CI_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorRendering e) : m_type(CSS_IDENT) { switch (e) { case CR_AUTO: m_value.ident = CSS_VAL_AUTO; break; case CR_OPTIMIZESPEED: m_value.ident = CSS_VAL_OPTIMIZESPEED; break; case CR_OPTIMIZEQUALITY: m_value.ident = CSS_VAL_OPTIMIZEQUALITY; break; } } template<> inline CSSPrimitiveValue::operator EColorRendering() const { switch (m_value.ident) { case CSS_VAL_OPTIMIZESPEED: return CR_OPTIMIZESPEED; case CSS_VAL_OPTIMIZEQUALITY: return CR_OPTIMIZEQUALITY; case CSS_VAL_AUTO: return CR_AUTO; } ASSERT_NOT_REACHED(); return CR_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDominantBaseline e) : m_type(CSS_IDENT) { switch (e) { case DB_AUTO: m_value.ident = CSS_VAL_AUTO; break; case DB_USE_SCRIPT: m_value.ident = CSS_VAL_USE_SCRIPT; break; case DB_NO_CHANGE: m_value.ident = CSS_VAL_NO_CHANGE; break; case DB_RESET_SIZE: m_value.ident = CSS_VAL_RESET_SIZE; break; case DB_CENTRAL: m_value.ident = CSS_VAL_CENTRAL; break; case DB_MIDDLE: m_value.ident = CSS_VAL_MIDDLE; break; case DB_TEXT_BEFORE_EDGE: m_value.ident = CSS_VAL_TEXT_BEFORE_EDGE; break; case DB_TEXT_AFTER_EDGE: m_value.ident = CSS_VAL_TEXT_AFTER_EDGE; break; case DB_IDEOGRAPHIC: m_value.ident = CSS_VAL_IDEOGRAPHIC; break; case DB_ALPHABETIC: m_value.ident = CSS_VAL_ALPHABETIC; break; case DB_HANGING: m_value.ident = CSS_VAL_HANGING; break; case DB_MATHEMATICAL: m_value.ident = CSS_VAL_MATHEMATICAL; break; } } template<> inline CSSPrimitiveValue::operator EDominantBaseline() const { switch (m_value.ident) { case CSS_VAL_AUTO: return DB_AUTO; case CSS_VAL_USE_SCRIPT: return DB_USE_SCRIPT; case CSS_VAL_NO_CHANGE: return DB_NO_CHANGE; case CSS_VAL_RESET_SIZE: return DB_RESET_SIZE; case CSS_VAL_IDEOGRAPHIC: return DB_IDEOGRAPHIC; case CSS_VAL_ALPHABETIC: return DB_ALPHABETIC; case CSS_VAL_HANGING: return DB_HANGING; case CSS_VAL_MATHEMATICAL: return DB_MATHEMATICAL; case CSS_VAL_CENTRAL: return DB_CENTRAL; case CSS_VAL_MIDDLE: return DB_MIDDLE; case CSS_VAL_TEXT_AFTER_EDGE: return DB_TEXT_AFTER_EDGE; case CSS_VAL_TEXT_BEFORE_EDGE: return DB_TEXT_BEFORE_EDGE; } ASSERT_NOT_REACHED(); return DB_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering e) : m_type(CSS_IDENT) { switch (e) { case IR_AUTO: m_value.ident = CSS_VAL_AUTO; break; case IR_OPTIMIZESPEED: m_value.ident = CSS_VAL_OPTIMIZESPEED; break; case IR_OPTIMIZEQUALITY: m_value.ident = CSS_VAL_OPTIMIZEQUALITY; break; } } template<> inline CSSPrimitiveValue::operator EImageRendering() const { switch (m_value.ident) { case CSS_VAL_AUTO: return IR_AUTO; case CSS_VAL_OPTIMIZESPEED: return IR_OPTIMIZESPEED; case CSS_VAL_OPTIMIZEQUALITY: return IR_OPTIMIZEQUALITY; } ASSERT_NOT_REACHED(); return IR_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPointerEvents e) : m_type(CSS_IDENT) { switch (e) { case PE_NONE: m_value.ident = CSS_VAL_NONE; break; case PE_STROKE: m_value.ident = CSS_VAL_STROKE; break; case PE_FILL: m_value.ident = CSS_VAL_FILL; break; case PE_PAINTED: m_value.ident = CSS_VAL_PAINTED; break; case PE_VISIBLE: m_value.ident = CSS_VAL_VISIBLE; break; case PE_VISIBLE_STROKE: m_value.ident = CSS_VAL_VISIBLESTROKE; break; case PE_VISIBLE_FILL: m_value.ident = CSS_VAL_VISIBLEFILL; break; case PE_VISIBLE_PAINTED: m_value.ident = CSS_VAL_VISIBLEPAINTED; break; case PE_ALL: m_value.ident = CSS_VAL_ALL; break; } } template<> inline CSSPrimitiveValue::operator EPointerEvents() const { switch (m_value.ident) { case CSS_VAL_ALL: return PE_ALL; case CSS_VAL_NONE: return PE_NONE; case CSS_VAL_VISIBLEPAINTED: return PE_VISIBLE_PAINTED; case CSS_VAL_VISIBLEFILL: return PE_VISIBLE_FILL; case CSS_VAL_VISIBLESTROKE: return PE_VISIBLE_STROKE; case CSS_VAL_VISIBLE: return PE_VISIBLE; case CSS_VAL_PAINTED: return PE_PAINTED; case CSS_VAL_FILL: return PE_FILL; case CSS_VAL_STROKE: return PE_STROKE; } ASSERT_NOT_REACHED(); return PE_ALL; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EShapeRendering e) : m_type(CSS_IDENT) { switch (e) { case IR_AUTO: m_value.ident = CSS_VAL_AUTO; break; case IR_OPTIMIZESPEED: m_value.ident = CSS_VAL_OPTIMIZESPEED; break; case SR_CRISPEDGES: m_value.ident = CSS_VAL_CRISPEDGES; break; case SR_GEOMETRICPRECISION: m_value.ident = CSS_VAL_GEOMETRICPRECISION; break; } } template<> inline CSSPrimitiveValue::operator EShapeRendering() const { switch (m_value.ident) { case CSS_VAL_AUTO: return SR_AUTO; case CSS_VAL_OPTIMIZESPEED: return SR_OPTIMIZESPEED; case CSS_VAL_CRISPEDGES: return SR_CRISPEDGES; case CSS_VAL_GEOMETRICPRECISION: return SR_GEOMETRICPRECISION; } ASSERT_NOT_REACHED(); return SR_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAnchor e) : m_type(CSS_IDENT) { switch (e) { case TA_START: m_value.ident = CSS_VAL_START; break; case TA_MIDDLE: m_value.ident = CSS_VAL_MIDDLE; break; case TA_END: m_value.ident = CSS_VAL_END; break; } } template<> inline CSSPrimitiveValue::operator ETextAnchor() const { switch (m_value.ident) { case CSS_VAL_START: return TA_START; case CSS_VAL_MIDDLE: return TA_MIDDLE; case CSS_VAL_END: return TA_END; } ASSERT_NOT_REACHED(); return TA_START; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextRendering e) : m_type(CSS_IDENT) { switch (e) { case TR_AUTO: m_value.ident = CSS_VAL_AUTO; break; case TR_OPTIMIZESPEED: m_value.ident = CSS_VAL_OPTIMIZESPEED; break; case TR_OPTIMIZELEGIBILITY: m_value.ident = CSS_VAL_OPTIMIZELEGIBILITY; break; case TR_GEOMETRICPRECISION: m_value.ident = CSS_VAL_GEOMETRICPRECISION; break; } } template<> inline CSSPrimitiveValue::operator ETextRendering() const { switch (m_value.ident) { case CSS_VAL_AUTO: return TR_AUTO; case CSS_VAL_OPTIMIZESPEED: return TR_OPTIMIZESPEED; case CSS_VAL_OPTIMIZELEGIBILITY: return TR_OPTIMIZELEGIBILITY; case CSS_VAL_GEOMETRICPRECISION: return TR_GEOMETRICPRECISION; } ASSERT_NOT_REACHED(); return TR_AUTO; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWritingMode e) : m_type(CSS_IDENT) { switch (e) { case WM_LRTB: m_value.ident = CSS_VAL_LR_TB; break; case WM_LR: m_value.ident = CSS_VAL_LR; break; case WM_RLTB: m_value.ident = CSS_VAL_RL_TB; break; case WM_RL: m_value.ident = CSS_VAL_RL; break; case WM_TBRL: m_value.ident = CSS_VAL_TB_RL; break; case WM_TB: m_value.ident = CSS_VAL_TB; break; } } template<> inline CSSPrimitiveValue::operator EWritingMode() const { return (EWritingMode)(m_value.ident - CSS_VAL_LR_TB); } #endif } #endif