diff options
Diffstat (limited to 'WebCore/css/CSSPrimitiveValueMappings.h')
-rw-r--r-- | WebCore/css/CSSPrimitiveValueMappings.h | 2212 |
1 files changed, 2212 insertions, 0 deletions
diff --git a/WebCore/css/CSSPrimitiveValueMappings.h b/WebCore/css/CSSPrimitiveValueMappings.h new file mode 100644 index 0000000..3feb19f --- /dev/null +++ b/WebCore/css/CSSPrimitiveValueMappings.h @@ -0,0 +1,2212 @@ +/* + * Copyright (C) 2007 Alexey Proskuryakov <ap@nypop.com>. + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * 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; + default: + 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 MediaFullscreenButtonAppearance: + m_value.ident = CSS_VAL_MEDIA_FULLSCREEN_BUTTON; + break; + case MediaPlayButtonAppearance: + m_value.ident = CSS_VAL_MEDIA_PLAY_BUTTON; + break; + case MediaMuteButtonAppearance: + m_value.ident = CSS_VAL_MEDIA_MUTE_BUTTON; + break; + case MediaSeekBackButtonAppearance: + m_value.ident = CSS_VAL_MEDIA_SEEK_BACK_BUTTON; + break; + case MediaSeekForwardButtonAppearance: + m_value.ident = CSS_VAL_MEDIA_SEEK_FORWARD_BUTTON; + break; + case MediaSliderAppearance: + m_value.ident = CSS_VAL_MEDIA_SLIDER; + break; + case MediaSliderThumbAppearance: + m_value.ident = CSS_VAL_MEDIA_SLIDERTHUMB; + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + if (m_value.ident == CSS_VAL_NONE) + return CURSOR_NONE; + return static_cast<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; + return static_cast<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; + default: + 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; + default: + 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; + default: + 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 static_cast<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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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 static_cast<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; + default: + 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; + default: + 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; + default: + 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; + default: + 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 static_cast<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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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; + default: + 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 static_cast<EWritingMode>(m_value.ident - CSS_VAL_LR_TB); +} + +#endif + +} + +#endif |