blob: e33f7c69e77b4c58a03543185b7a97a7f3b88557 [file] [log] [blame]
/*
* 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;
}
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 DefaultButtonAppearance:
m_value.ident = CSS_VAL_DEFAULT_BUTTON;
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;
}
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