/* * Copyright (C) 2007 Alexey Proskuryakov . * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved. * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) * Copyright (C) 2009 Jeff Schiller * Copyright (C) Research In Motion Limited 2010. 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 "ColorSpace.h" #include "CSSPrimitiveValue.h" #include "CSSValueKeywords.h" #include "FontSmoothingMode.h" #include "GraphicsTypes.h" #include "Path.h" #include "RenderStyleConstants.h" #include "SVGRenderStyleDefs.h" #include "TextDirection.h" #include "TextOrientation.h" #include "TextRenderingMode.h" #include "ThemeTypes.h" #include "UnicodeBidi.h" namespace WebCore { template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderStyle e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case BNONE: m_value.ident = CSSValueNone; break; case BHIDDEN: m_value.ident = CSSValueHidden; break; case INSET: m_value.ident = CSSValueInset; break; case GROOVE: m_value.ident = CSSValueGroove; break; case RIDGE: m_value.ident = CSSValueRidge; break; case OUTSET: m_value.ident = CSSValueOutset; break; case DOTTED: m_value.ident = CSSValueDotted; break; case DASHED: m_value.ident = CSSValueDashed; break; case SOLID: m_value.ident = CSSValueSolid; break; case DOUBLE: m_value.ident = CSSValueDouble; break; } } template<> inline CSSPrimitiveValue::operator EBorderStyle() const { return (EBorderStyle)(m_value.ident - CSSValueNone); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CompositeOperator e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CompositeClear: m_value.ident = CSSValueClear; break; case CompositeCopy: m_value.ident = CSSValueCopy; break; case CompositeSourceOver: m_value.ident = CSSValueSourceOver; break; case CompositeSourceIn: m_value.ident = CSSValueSourceIn; break; case CompositeSourceOut: m_value.ident = CSSValueSourceOut; break; case CompositeSourceAtop: m_value.ident = CSSValueSourceAtop; break; case CompositeDestinationOver: m_value.ident = CSSValueDestinationOver; break; case CompositeDestinationIn: m_value.ident = CSSValueDestinationIn; break; case CompositeDestinationOut: m_value.ident = CSSValueDestinationOut; break; case CompositeDestinationAtop: m_value.ident = CSSValueDestinationAtop; break; case CompositeXOR: m_value.ident = CSSValueXor; break; case CompositePlusDarker: m_value.ident = CSSValuePlusDarker; break; case CompositeHighlight: m_value.ident = CSSValueHighlight; break; case CompositePlusLighter: m_value.ident = CSSValuePlusLighter; break; } } template<> inline CSSPrimitiveValue::operator CompositeOperator() const { switch (m_value.ident) { case CSSValueClear: return CompositeClear; case CSSValueCopy: return CompositeCopy; case CSSValueSourceOver: return CompositeSourceOver; case CSSValueSourceIn: return CompositeSourceIn; case CSSValueSourceOut: return CompositeSourceOut; case CSSValueSourceAtop: return CompositeSourceAtop; case CSSValueDestinationOver: return CompositeDestinationOver; case CSSValueDestinationIn: return CompositeDestinationIn; case CSSValueDestinationOut: return CompositeDestinationOut; case CSSValueDestinationAtop: return CompositeDestinationAtop; case CSSValueXor: return CompositeXOR; case CSSValuePlusDarker: return CompositePlusDarker; case CSSValueHighlight: return CompositeHighlight; case CSSValuePlusLighter: return CompositePlusLighter; default: ASSERT_NOT_REACHED(); return CompositeClear; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case NoControlPart: m_value.ident = CSSValueNone; break; case CheckboxPart: m_value.ident = CSSValueCheckbox; break; case RadioPart: m_value.ident = CSSValueRadio; break; case PushButtonPart: m_value.ident = CSSValuePushButton; break; case SquareButtonPart: m_value.ident = CSSValueSquareButton; break; case ButtonPart: m_value.ident = CSSValueButton; break; case ButtonBevelPart: m_value.ident = CSSValueButtonBevel; break; case DefaultButtonPart: m_value.ident = CSSValueDefaultButton; break; case InnerSpinButtonPart: m_value.ident = CSSValueInnerSpinButton; break; case ListboxPart: m_value.ident = CSSValueListbox; break; case ListButtonPart: #if ENABLE(DATALIST) m_value.ident = CSSValueListButton; #endif break; case ListItemPart: m_value.ident = CSSValueListitem; break; case MediaFullscreenButtonPart: m_value.ident = CSSValueMediaFullscreenButton; break; case MediaPlayButtonPart: m_value.ident = CSSValueMediaPlayButton; break; case MediaMuteButtonPart: m_value.ident = CSSValueMediaMuteButton; break; case MediaSeekBackButtonPart: m_value.ident = CSSValueMediaSeekBackButton; break; case MediaSeekForwardButtonPart: m_value.ident = CSSValueMediaSeekForwardButton; break; case MediaRewindButtonPart: m_value.ident = CSSValueMediaRewindButton; break; case MediaReturnToRealtimeButtonPart: m_value.ident = CSSValueMediaReturnToRealtimeButton; break; case MediaToggleClosedCaptionsButtonPart: m_value.ident = CSSValueMediaToggleClosedCaptionsButton; break; case MediaSliderPart: m_value.ident = CSSValueMediaSlider; break; case MediaSliderThumbPart: m_value.ident = CSSValueMediaSliderthumb; break; case MediaVolumeSliderContainerPart: m_value.ident = CSSValueMediaVolumeSliderContainer; break; case MediaVolumeSliderPart: m_value.ident = CSSValueMediaVolumeSlider; break; case MediaVolumeSliderMuteButtonPart: m_value.ident = CSSValueMediaVolumeSliderMuteButton; break; case MediaVolumeSliderThumbPart: m_value.ident = CSSValueMediaVolumeSliderthumb; break; case MediaControlsBackgroundPart: m_value.ident = CSSValueMediaControlsBackground; break; case MediaControlsFullscreenBackgroundPart: m_value.ident = CSSValueMediaControlsFullscreenBackground; break; case MediaCurrentTimePart: m_value.ident = CSSValueMediaCurrentTimeDisplay; break; case MediaTimeRemainingPart: m_value.ident = CSSValueMediaTimeRemainingDisplay; break; case MenulistPart: m_value.ident = CSSValueMenulist; break; case MenulistButtonPart: m_value.ident = CSSValueMenulistButton; break; case MenulistTextPart: m_value.ident = CSSValueMenulistText; break; case MenulistTextFieldPart: m_value.ident = CSSValueMenulistTextfield; break; case MeterPart: m_value.ident = CSSValueMeter; break; case RelevancyLevelIndicatorPart: m_value.ident = CSSValueRelevancyLevelIndicator; break; case ContinuousCapacityLevelIndicatorPart: m_value.ident = CSSValueContinuousCapacityLevelIndicator; break; case DiscreteCapacityLevelIndicatorPart: m_value.ident = CSSValueDiscreteCapacityLevelIndicator; break; case RatingLevelIndicatorPart: m_value.ident = CSSValueRatingLevelIndicator; break; case OuterSpinButtonPart: m_value.ident = CSSValueOuterSpinButton; break; case ProgressBarPart: #if ENABLE(PROGRESS_TAG) m_value.ident = CSSValueProgressBar; #endif break; case ProgressBarValuePart: #if ENABLE(PROGRESS_TAG) m_value.ident = CSSValueProgressBarValue; #endif break; case SliderHorizontalPart: m_value.ident = CSSValueSliderHorizontal; break; case SliderVerticalPart: m_value.ident = CSSValueSliderVertical; break; case SliderThumbHorizontalPart: m_value.ident = CSSValueSliderthumbHorizontal; break; case SliderThumbVerticalPart: m_value.ident = CSSValueSliderthumbVertical; break; case CaretPart: m_value.ident = CSSValueCaret; break; case SearchFieldPart: m_value.ident = CSSValueSearchfield; break; case SearchFieldDecorationPart: m_value.ident = CSSValueSearchfieldDecoration; break; case SearchFieldResultsDecorationPart: m_value.ident = CSSValueSearchfieldResultsDecoration; break; case SearchFieldResultsButtonPart: m_value.ident = CSSValueSearchfieldResultsButton; break; case SearchFieldCancelButtonPart: m_value.ident = CSSValueSearchfieldCancelButton; break; case TextFieldPart: m_value.ident = CSSValueTextfield; break; case TextAreaPart: m_value.ident = CSSValueTextarea; break; case CapsLockIndicatorPart: m_value.ident = CSSValueCapsLockIndicator; break; case InputSpeechButtonPart: #if ENABLE(INPUT_SPEECH) m_value.ident = CSSValueWebkitInputSpeechButton; #endif break; } } template<> inline CSSPrimitiveValue::operator ControlPart() const { if (m_value.ident == CSSValueNone) return NoControlPart; else return ControlPart(m_value.ident - CSSValueCheckbox + 1); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillAttachment e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case ScrollBackgroundAttachment: m_value.ident = CSSValueScroll; break; case LocalBackgroundAttachment: m_value.ident = CSSValueLocal; break; case FixedBackgroundAttachment: m_value.ident = CSSValueFixed; break; } } template<> inline CSSPrimitiveValue::operator EFillAttachment() const { switch (m_value.ident) { case CSSValueScroll: return ScrollBackgroundAttachment; case CSSValueLocal: return LocalBackgroundAttachment; case CSSValueFixed: return FixedBackgroundAttachment; default: ASSERT_NOT_REACHED(); return ScrollBackgroundAttachment; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillBox e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case BorderFillBox: m_value.ident = CSSValueBorderBox; break; case PaddingFillBox: m_value.ident = CSSValuePaddingBox; break; case ContentFillBox: m_value.ident = CSSValueContentBox; break; case TextFillBox: m_value.ident = CSSValueText; break; } } template<> inline CSSPrimitiveValue::operator EFillBox() const { switch (m_value.ident) { case CSSValueBorder: case CSSValueBorderBox: return BorderFillBox; case CSSValuePadding: case CSSValuePaddingBox: return PaddingFillBox; case CSSValueContent: case CSSValueContentBox: return ContentFillBox; case CSSValueText: case CSSValueWebkitText: return TextFillBox; default: ASSERT_NOT_REACHED(); return BorderFillBox; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillRepeat e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case RepeatFill: m_value.ident = CSSValueRepeat; break; case NoRepeatFill: m_value.ident = CSSValueNoRepeat; break; case RoundFill: m_value.ident = CSSValueRound; break; case SpaceFill: m_value.ident = CSSValueSpace; break; } } template<> inline CSSPrimitiveValue::operator EFillRepeat() const { switch (m_value.ident) { case CSSValueRepeat: return RepeatFill; case CSSValueNoRepeat: return NoRepeatFill; case CSSValueRound: return RoundFill; case CSSValueSpace: return SpaceFill; default: ASSERT_NOT_REACHED(); return RepeatFill; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxAlignment e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case BSTRETCH: m_value.ident = CSSValueStretch; break; case BSTART: m_value.ident = CSSValueStart; break; case BCENTER: m_value.ident = CSSValueCenter; break; case BEND: m_value.ident = CSSValueEnd; break; case BBASELINE: m_value.ident = CSSValueBaseline; break; case BJUSTIFY: m_value.ident = CSSValueJustify; break; } } template<> inline CSSPrimitiveValue::operator EBoxAlignment() const { switch (m_value.ident) { case CSSValueStretch: return BSTRETCH; case CSSValueStart: return BSTART; case CSSValueEnd: return BEND; case CSSValueCenter: return BCENTER; case CSSValueBaseline: return BBASELINE; case CSSValueJustify: return BJUSTIFY; default: ASSERT_NOT_REACHED(); return BSTRETCH; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDirection e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case BNORMAL: m_value.ident = CSSValueNormal; break; case BREVERSE: m_value.ident = CSSValueReverse; break; } } template<> inline CSSPrimitiveValue::operator EBoxDirection() const { switch (m_value.ident) { case CSSValueNormal: return BNORMAL; case CSSValueReverse: return BREVERSE; default: ASSERT_NOT_REACHED(); return BNORMAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxLines e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case SINGLE: m_value.ident = CSSValueSingle; break; case MULTIPLE: m_value.ident = CSSValueMultiple; break; } } template<> inline CSSPrimitiveValue::operator EBoxLines() const { switch (m_value.ident) { case CSSValueSingle: return SINGLE; case CSSValueMultiple: return MULTIPLE; default: ASSERT_NOT_REACHED(); return SINGLE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxOrient e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case HORIZONTAL: m_value.ident = CSSValueHorizontal; break; case VERTICAL: m_value.ident = CSSValueVertical; break; } } template<> inline CSSPrimitiveValue::operator EBoxOrient() const { switch (m_value.ident) { case CSSValueHorizontal: case CSSValueInlineAxis: return HORIZONTAL; case CSSValueVertical: case CSSValueBlockAxis: return VERTICAL; default: ASSERT_NOT_REACHED(); return HORIZONTAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECaptionSide e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CAPLEFT: m_value.ident = CSSValueLeft; break; case CAPRIGHT: m_value.ident = CSSValueRight; break; case CAPTOP: m_value.ident = CSSValueTop; break; case CAPBOTTOM: m_value.ident = CSSValueBottom; break; } } template<> inline CSSPrimitiveValue::operator ECaptionSide() const { switch (m_value.ident) { case CSSValueLeft: return CAPLEFT; case CSSValueRight: return CAPRIGHT; case CSSValueTop: return CAPTOP; case CSSValueBottom: return CAPBOTTOM; default: ASSERT_NOT_REACHED(); return CAPTOP; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EClear e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CNONE: m_value.ident = CSSValueNone; break; case CLEFT: m_value.ident = CSSValueLeft; break; case CRIGHT: m_value.ident = CSSValueRight; break; case CBOTH: m_value.ident = CSSValueBoth; break; } } template<> inline CSSPrimitiveValue::operator EClear() const { switch (m_value.ident) { case CSSValueNone: return CNONE; case CSSValueLeft: return CLEFT; case CSSValueRight: return CRIGHT; case CSSValueBoth: return CBOTH; default: ASSERT_NOT_REACHED(); return CNONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECursor e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CURSOR_AUTO: m_value.ident = CSSValueAuto; break; case CURSOR_CROSS: m_value.ident = CSSValueCrosshair; break; case CURSOR_DEFAULT: m_value.ident = CSSValueDefault; break; case CURSOR_POINTER: m_value.ident = CSSValuePointer; break; case CURSOR_MOVE: m_value.ident = CSSValueMove; break; case CURSOR_CELL: m_value.ident = CSSValueCell; break; case CURSOR_VERTICAL_TEXT: m_value.ident = CSSValueVerticalText; break; case CURSOR_CONTEXT_MENU: m_value.ident = CSSValueContextMenu; break; case CURSOR_ALIAS: m_value.ident = CSSValueAlias; break; case CURSOR_COPY: m_value.ident = CSSValueCopy; break; case CURSOR_NONE: m_value.ident = CSSValueNone; break; case CURSOR_PROGRESS: m_value.ident = CSSValueProgress; break; case CURSOR_NO_DROP: m_value.ident = CSSValueNoDrop; break; case CURSOR_NOT_ALLOWED: m_value.ident = CSSValueNotAllowed; break; case CURSOR_WEBKIT_ZOOM_IN: m_value.ident = CSSValueWebkitZoomIn; break; case CURSOR_WEBKIT_ZOOM_OUT: m_value.ident = CSSValueWebkitZoomOut; break; case CURSOR_E_RESIZE: m_value.ident = CSSValueEResize; break; case CURSOR_NE_RESIZE: m_value.ident = CSSValueNeResize; break; case CURSOR_NW_RESIZE: m_value.ident = CSSValueNwResize; break; case CURSOR_N_RESIZE: m_value.ident = CSSValueNResize; break; case CURSOR_SE_RESIZE: m_value.ident = CSSValueSeResize; break; case CURSOR_SW_RESIZE: m_value.ident = CSSValueSwResize; break; case CURSOR_S_RESIZE: m_value.ident = CSSValueSResize; break; case CURSOR_W_RESIZE: m_value.ident = CSSValueWResize; break; case CURSOR_EW_RESIZE: m_value.ident = CSSValueEwResize; break; case CURSOR_NS_RESIZE: m_value.ident = CSSValueNsResize; break; case CURSOR_NESW_RESIZE: m_value.ident = CSSValueNeswResize; break; case CURSOR_NWSE_RESIZE: m_value.ident = CSSValueNwseResize; break; case CURSOR_COL_RESIZE: m_value.ident = CSSValueColResize; break; case CURSOR_ROW_RESIZE: m_value.ident = CSSValueRowResize; break; case CURSOR_TEXT: m_value.ident = CSSValueText; break; case CURSOR_WAIT: m_value.ident = CSSValueWait; break; case CURSOR_HELP: m_value.ident = CSSValueHelp; break; case CURSOR_ALL_SCROLL: m_value.ident = CSSValueAllScroll; break; case CURSOR_WEBKIT_GRAB: m_value.ident = CSSValueWebkitGrab; break; case CURSOR_WEBKIT_GRABBING: m_value.ident = CSSValueWebkitGrabbing; break; } } template<> inline CSSPrimitiveValue::operator ECursor() const { if (m_value.ident == CSSValueCopy) return CURSOR_COPY; if (m_value.ident == CSSValueNone) return CURSOR_NONE; return static_cast(m_value.ident - CSSValueAuto); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDisplay e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case INLINE: m_value.ident = CSSValueInline; break; case BLOCK: m_value.ident = CSSValueBlock; break; case LIST_ITEM: m_value.ident = CSSValueListItem; break; case RUN_IN: m_value.ident = CSSValueRunIn; break; case COMPACT: m_value.ident = CSSValueCompact; break; case INLINE_BLOCK: m_value.ident = CSSValueInlineBlock; break; case TABLE: m_value.ident = CSSValueTable; break; case INLINE_TABLE: m_value.ident = CSSValueInlineTable; break; case TABLE_ROW_GROUP: m_value.ident = CSSValueTableRowGroup; break; case TABLE_HEADER_GROUP: m_value.ident = CSSValueTableHeaderGroup; break; case TABLE_FOOTER_GROUP: m_value.ident = CSSValueTableFooterGroup; break; case TABLE_ROW: m_value.ident = CSSValueTableRow; break; case TABLE_COLUMN_GROUP: m_value.ident = CSSValueTableColumnGroup; break; case TABLE_COLUMN: m_value.ident = CSSValueTableColumn; break; case TABLE_CELL: m_value.ident = CSSValueTableCell; break; case TABLE_CAPTION: m_value.ident = CSSValueTableCaption; break; #if ENABLE(WCSS) case WAP_MARQUEE: m_value.ident = CSSValueWapMarquee; break; #endif case BOX: m_value.ident = CSSValueWebkitBox; break; case INLINE_BOX: m_value.ident = CSSValueWebkitInlineBox; break; case NONE: m_value.ident = CSSValueNone; break; } } template<> inline CSSPrimitiveValue::operator EDisplay() const { if (m_value.ident == CSSValueNone) return NONE; return static_cast(m_value.ident - CSSValueInline); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EEmptyCell e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case SHOW: m_value.ident = CSSValueShow; break; case HIDE: m_value.ident = CSSValueHide; break; } } template<> inline CSSPrimitiveValue::operator EEmptyCell() const { switch (m_value.ident) { case CSSValueShow: return SHOW; case CSSValueHide: return HIDE; default: ASSERT_NOT_REACHED(); return SHOW; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case FNONE: m_value.ident = CSSValueNone; break; case FLEFT: m_value.ident = CSSValueLeft; break; case FRIGHT: m_value.ident = CSSValueRight; break; } } template<> inline CSSPrimitiveValue::operator EFloat() const { switch (m_value.ident) { case CSSValueLeft: return FLEFT; case CSSValueRight: return FRIGHT; case CSSValueNone: case CSSValueCenter: // Non-standard CSS value return FNONE; default: ASSERT_NOT_REACHED(); return FNONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EKHTMLLineBreak e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case LBNORMAL: m_value.ident = CSSValueNormal; break; case AFTER_WHITE_SPACE: m_value.ident = CSSValueAfterWhiteSpace; break; } } template<> inline CSSPrimitiveValue::operator EKHTMLLineBreak() const { switch (m_value.ident) { case CSSValueAfterWhiteSpace: return AFTER_WHITE_SPACE; case CSSValueNormal: return LBNORMAL; default: ASSERT_NOT_REACHED(); return LBNORMAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStylePosition e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case OUTSIDE: m_value.ident = CSSValueOutside; break; case INSIDE: m_value.ident = CSSValueInside; break; } } template<> inline CSSPrimitiveValue::operator EListStylePosition() const { return (EListStylePosition)(m_value.ident - CSSValueOutside); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStyleType e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case Afar: m_value.ident = CSSValueAfar; break; case Amharic: m_value.ident = CSSValueAmharic; break; case AmharicAbegede: m_value.ident = CSSValueAmharicAbegede; break; case ArabicIndic: m_value.ident = CSSValueArabicIndic; break; case Armenian: m_value.ident = CSSValueArmenian; break; case Asterisks: m_value.ident = CSSValueAsterisks; break; case BinaryListStyle: m_value.ident = CSSValueBinary; break; case Bengali: m_value.ident = CSSValueBengali; break; case Cambodian: m_value.ident = CSSValueCambodian; break; case Circle: m_value.ident = CSSValueCircle; break; case CjkEarthlyBranch: m_value.ident = CSSValueCjkEarthlyBranch; break; case CjkHeavenlyStem: m_value.ident = CSSValueCjkHeavenlyStem; break; case CJKIdeographic: m_value.ident = CSSValueCjkIdeographic; break; case DecimalLeadingZero: m_value.ident = CSSValueDecimalLeadingZero; break; case DecimalListStyle: m_value.ident = CSSValueDecimal; break; case Devanagari: m_value.ident = CSSValueDevanagari; break; case Disc: m_value.ident = CSSValueDisc; break; case Ethiopic: m_value.ident = CSSValueEthiopic; break; case EthiopicAbegede: m_value.ident = CSSValueEthiopicAbegede; break; case EthiopicAbegedeAmEt: m_value.ident = CSSValueEthiopicAbegedeAmEt; break; case EthiopicAbegedeGez: m_value.ident = CSSValueEthiopicAbegedeGez; break; case EthiopicAbegedeTiEr: m_value.ident = CSSValueEthiopicAbegedeTiEr; break; case EthiopicAbegedeTiEt: m_value.ident = CSSValueEthiopicAbegedeTiEt; break; case EthiopicHalehameAaEr: m_value.ident = CSSValueEthiopicHalehameAaEr; break; case EthiopicHalehameAaEt: m_value.ident = CSSValueEthiopicHalehameAaEt; break; case EthiopicHalehameAmEt: m_value.ident = CSSValueEthiopicHalehameAmEt; break; case EthiopicHalehameGez: m_value.ident = CSSValueEthiopicHalehameGez; break; case EthiopicHalehameOmEt: m_value.ident = CSSValueEthiopicHalehameOmEt; break; case EthiopicHalehameSidEt: m_value.ident = CSSValueEthiopicHalehameSidEt; break; case EthiopicHalehameSoEt: m_value.ident = CSSValueEthiopicHalehameSoEt; break; case EthiopicHalehameTiEr: m_value.ident = CSSValueEthiopicHalehameTiEr; break; case EthiopicHalehameTiEt: m_value.ident = CSSValueEthiopicHalehameTiEt; break; case EthiopicHalehameTig: m_value.ident = CSSValueEthiopicHalehameTig; break; case Footnotes: m_value.ident = CSSValueFootnotes; break; case Georgian: m_value.ident = CSSValueGeorgian; break; case Gujarati: m_value.ident = CSSValueGujarati; break; case Gurmukhi: m_value.ident = CSSValueGurmukhi; break; case Hangul: m_value.ident = CSSValueHangul; break; case HangulConsonant: m_value.ident = CSSValueHangulConsonant; break; case Hebrew: m_value.ident = CSSValueHebrew; break; case Hiragana: m_value.ident = CSSValueHiragana; break; case HiraganaIroha: m_value.ident = CSSValueHiraganaIroha; break; case Kannada: m_value.ident = CSSValueKannada; break; case Katakana: m_value.ident = CSSValueKatakana; break; case KatakanaIroha: m_value.ident = CSSValueKatakanaIroha; break; case Khmer: m_value.ident = CSSValueKhmer; break; case Lao: m_value.ident = CSSValueLao; break; case LowerAlpha: m_value.ident = CSSValueLowerAlpha; break; case LowerArmenian: m_value.ident = CSSValueLowerArmenian; break; case LowerGreek: m_value.ident = CSSValueLowerGreek; break; case LowerHexadecimal: m_value.ident = CSSValueLowerHexadecimal; break; case LowerLatin: m_value.ident = CSSValueLowerLatin; break; case LowerNorwegian: m_value.ident = CSSValueLowerNorwegian; break; case LowerRoman: m_value.ident = CSSValueLowerRoman; break; case Malayalam: m_value.ident = CSSValueMalayalam; break; case Mongolian: m_value.ident = CSSValueMongolian; break; case Myanmar: m_value.ident = CSSValueMyanmar; break; case NoneListStyle: m_value.ident = CSSValueNone; break; case Octal: m_value.ident = CSSValueOctal; break; case Oriya: m_value.ident = CSSValueOriya; break; case Oromo: m_value.ident = CSSValueOromo; break; case Persian: m_value.ident = CSSValuePersian; break; case Sidama: m_value.ident = CSSValueSidama; break; case Somali: m_value.ident = CSSValueSomali; break; case Square: m_value.ident = CSSValueSquare; break; case Telugu: m_value.ident = CSSValueTelugu; break; case Thai: m_value.ident = CSSValueThai; break; case Tibetan: m_value.ident = CSSValueTibetan; break; case Tigre: m_value.ident = CSSValueTigre; break; case TigrinyaEr: m_value.ident = CSSValueTigrinyaEr; break; case TigrinyaErAbegede: m_value.ident = CSSValueTigrinyaErAbegede; break; case TigrinyaEt: m_value.ident = CSSValueTigrinyaEt; break; case TigrinyaEtAbegede: m_value.ident = CSSValueTigrinyaEtAbegede; break; case UpperAlpha: m_value.ident = CSSValueUpperAlpha; break; case UpperArmenian: m_value.ident = CSSValueUpperArmenian; break; case UpperGreek: m_value.ident = CSSValueUpperGreek; break; case UpperHexadecimal: m_value.ident = CSSValueUpperHexadecimal; break; case UpperLatin: m_value.ident = CSSValueUpperLatin; break; case UpperNorwegian: m_value.ident = CSSValueUpperNorwegian; break; case UpperRoman: m_value.ident = CSSValueUpperRoman; break; case Urdu: m_value.ident = CSSValueUrdu; break; } } template<> inline CSSPrimitiveValue::operator EListStyleType() const { switch (m_value.ident) { case CSSValueNone: return NoneListStyle; default: return static_cast(m_value.ident - CSSValueDisc); } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarginCollapse e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case MCOLLAPSE: m_value.ident = CSSValueCollapse; break; case MSEPARATE: m_value.ident = CSSValueSeparate; break; case MDISCARD: m_value.ident = CSSValueDiscard; break; } } template<> inline CSSPrimitiveValue::operator EMarginCollapse() const { switch (m_value.ident) { case CSSValueCollapse: return MCOLLAPSE; case CSSValueSeparate: return MSEPARATE; case CSSValueDiscard: return MDISCARD; default: ASSERT_NOT_REACHED(); return MCOLLAPSE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeBehavior e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case MNONE: m_value.ident = CSSValueNone; break; case MSCROLL: m_value.ident = CSSValueScroll; break; case MSLIDE: m_value.ident = CSSValueSlide; break; case MALTERNATE: m_value.ident = CSSValueAlternate; break; } } template<> inline CSSPrimitiveValue::operator EMarqueeBehavior() const { switch (m_value.ident) { case CSSValueNone: return MNONE; case CSSValueScroll: return MSCROLL; case CSSValueSlide: return MSLIDE; case CSSValueAlternate: return MALTERNATE; default: ASSERT_NOT_REACHED(); return MNONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeDirection e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case MFORWARD: m_value.ident = CSSValueForwards; break; case MBACKWARD: m_value.ident = CSSValueBackwards; break; case MAUTO: m_value.ident = CSSValueAuto; break; case MUP: m_value.ident = CSSValueUp; break; case MDOWN: m_value.ident = CSSValueDown; break; case MLEFT: m_value.ident = CSSValueLeft; break; case MRIGHT: m_value.ident = CSSValueRight; break; } } template<> inline CSSPrimitiveValue::operator EMarqueeDirection() const { switch (m_value.ident) { case CSSValueForwards: return MFORWARD; case CSSValueBackwards: return MBACKWARD; case CSSValueAuto: return MAUTO; case CSSValueAhead: case CSSValueUp: // We don't support vertical languages, so AHEAD just maps to UP. return MUP; case CSSValueReverse: case CSSValueDown: // REVERSE just maps to DOWN, since we don't do vertical text. return MDOWN; case CSSValueLeft: return MLEFT; case CSSValueRight: return MRIGHT; default: ASSERT_NOT_REACHED(); return MAUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMatchNearestMailBlockquoteColor e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case BCNORMAL: m_value.ident = CSSValueNormal; break; case MATCH: m_value.ident = CSSValueMatch; break; } } template<> inline CSSPrimitiveValue::operator EMatchNearestMailBlockquoteColor() const { switch (m_value.ident) { case CSSValueNormal: return BCNORMAL; case CSSValueMatch: return MATCH; default: ASSERT_NOT_REACHED(); return BCNORMAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ENBSPMode e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case NBNORMAL: m_value.ident = CSSValueNormal; break; case SPACE: m_value.ident = CSSValueSpace; break; } } template<> inline CSSPrimitiveValue::operator ENBSPMode() const { switch (m_value.ident) { case CSSValueSpace: return SPACE; case CSSValueNormal: return NBNORMAL; default: ASSERT_NOT_REACHED(); return NBNORMAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case OVISIBLE: m_value.ident = CSSValueVisible; break; case OHIDDEN: m_value.ident = CSSValueHidden; break; case OSCROLL: m_value.ident = CSSValueScroll; break; case OAUTO: m_value.ident = CSSValueAuto; break; case OMARQUEE: m_value.ident = CSSValueWebkitMarquee; break; case OOVERLAY: m_value.ident = CSSValueOverlay; break; } } template<> inline CSSPrimitiveValue::operator EOverflow() const { switch (m_value.ident) { case CSSValueVisible: return OVISIBLE; case CSSValueHidden: return OHIDDEN; case CSSValueScroll: return OSCROLL; case CSSValueAuto: return OAUTO; case CSSValueWebkitMarquee: return OMARQUEE; case CSSValueOverlay: return OOVERLAY; default: ASSERT_NOT_REACHED(); return OVISIBLE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPageBreak e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case PBAUTO: m_value.ident = CSSValueAuto; break; case PBALWAYS: m_value.ident = CSSValueAlways; break; case PBAVOID: m_value.ident = CSSValueAvoid; break; } } template<> inline CSSPrimitiveValue::operator EPageBreak() const { switch (m_value.ident) { case CSSValueAuto: return PBAUTO; case CSSValueLeft: case CSSValueRight: case CSSValueAlways: return PBALWAYS; // CSS2.1: "Conforming user agents may map left/right to always." case CSSValueAvoid: return PBAVOID; default: ASSERT_NOT_REACHED(); return PBAUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPosition e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case StaticPosition: m_value.ident = CSSValueStatic; break; case RelativePosition: m_value.ident = CSSValueRelative; break; case AbsolutePosition: m_value.ident = CSSValueAbsolute; break; case FixedPosition: m_value.ident = CSSValueFixed; break; } } template<> inline CSSPrimitiveValue::operator EPosition() const { switch (m_value.ident) { case CSSValueStatic: return StaticPosition; case CSSValueRelative: return RelativePosition; case CSSValueAbsolute: return AbsolutePosition; case CSSValueFixed: return FixedPosition; default: ASSERT_NOT_REACHED(); return StaticPosition; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EResize e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case RESIZE_BOTH: m_value.ident = CSSValueBoth; break; case RESIZE_HORIZONTAL: m_value.ident = CSSValueHorizontal; break; case RESIZE_VERTICAL: m_value.ident = CSSValueVertical; break; case RESIZE_NONE: m_value.ident = CSSValueNone; break; } } template<> inline CSSPrimitiveValue::operator EResize() const { switch (m_value.ident) { case CSSValueBoth: return RESIZE_BOTH; case CSSValueHorizontal: return RESIZE_HORIZONTAL; case CSSValueVertical: return RESIZE_VERTICAL; case CSSValueAuto: ASSERT_NOT_REACHED(); // Depends on settings, thus should be handled by the caller. return RESIZE_NONE; case CSSValueNone: return RESIZE_NONE; default: ASSERT_NOT_REACHED(); return RESIZE_NONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETableLayout e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TAUTO: m_value.ident = CSSValueAuto; break; case TFIXED: m_value.ident = CSSValueFixed; break; } } template<> inline CSSPrimitiveValue::operator ETableLayout() const { switch (m_value.ident) { case CSSValueFixed: return TFIXED; case CSSValueAuto: return TAUTO; default: ASSERT_NOT_REACHED(); return TAUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAlign e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TAAUTO: m_value.ident = CSSValueWebkitAuto; break; case TASTART: m_value.ident = CSSValueStart; break; case TAEND: m_value.ident = CSSValueEnd; break; case LEFT: m_value.ident = CSSValueLeft; break; case RIGHT: m_value.ident = CSSValueRight; break; case CENTER: m_value.ident = CSSValueCenter; break; case JUSTIFY: m_value.ident = CSSValueJustify; break; case WEBKIT_LEFT: m_value.ident = CSSValueWebkitLeft; break; case WEBKIT_RIGHT: m_value.ident = CSSValueWebkitRight; break; case WEBKIT_CENTER: m_value.ident = CSSValueWebkitCenter; break; } } template<> inline CSSPrimitiveValue::operator ETextAlign() const { switch (m_value.ident) { case CSSValueStart: return TASTART; case CSSValueEnd: return TAEND; default: return static_cast(m_value.ident - CSSValueWebkitAuto); } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextSecurity e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TSNONE: m_value.ident = CSSValueNone; break; case TSDISC: m_value.ident = CSSValueDisc; break; case TSCIRCLE: m_value.ident = CSSValueCircle; break; case TSSQUARE: m_value.ident = CSSValueSquare; break; } } template<> inline CSSPrimitiveValue::operator ETextSecurity() const { switch (m_value.ident) { case CSSValueNone: return TSNONE; case CSSValueDisc: return TSDISC; case CSSValueCircle: return TSCIRCLE; case CSSValueSquare: return TSSQUARE; default: ASSERT_NOT_REACHED(); return TSNONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextTransform e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CAPITALIZE: m_value.ident = CSSValueCapitalize; break; case UPPERCASE: m_value.ident = CSSValueUppercase; break; case LOWERCASE: m_value.ident = CSSValueLowercase; break; case TTNONE: m_value.ident = CSSValueNone; break; } } template<> inline CSSPrimitiveValue::operator ETextTransform() const { switch (m_value.ident) { case CSSValueCapitalize: return CAPITALIZE; case CSSValueUppercase: return UPPERCASE; case CSSValueLowercase: return LOWERCASE; case CSSValueNone: return TTNONE; default: ASSERT_NOT_REACHED(); return TTNONE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUnicodeBidi e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case UBNormal: m_value.ident = CSSValueNormal; break; case Embed: m_value.ident = CSSValueEmbed; break; case Override: m_value.ident = CSSValueBidiOverride; break; case Isolate: m_value.ident = CSSValueWebkitIsolate; } } template<> inline CSSPrimitiveValue::operator EUnicodeBidi() const { switch (m_value.ident) { case CSSValueNormal: return UBNormal; case CSSValueEmbed: return Embed; case CSSValueBidiOverride: return Override; case CSSValueWebkitIsolate: return Isolate; default: ASSERT_NOT_REACHED(); return UBNormal; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserDrag e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case DRAG_AUTO: m_value.ident = CSSValueAuto; break; case DRAG_NONE: m_value.ident = CSSValueNone; break; case DRAG_ELEMENT: m_value.ident = CSSValueElement; break; } } template<> inline CSSPrimitiveValue::operator EUserDrag() const { switch (m_value.ident) { case CSSValueAuto: return DRAG_AUTO; case CSSValueNone: return DRAG_NONE; case CSSValueElement: return DRAG_ELEMENT; default: ASSERT_NOT_REACHED(); return DRAG_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserModify e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case READ_ONLY: m_value.ident = CSSValueReadOnly; break; case READ_WRITE: m_value.ident = CSSValueReadWrite; break; case READ_WRITE_PLAINTEXT_ONLY: m_value.ident = CSSValueReadWritePlaintextOnly; break; } } template<> inline CSSPrimitiveValue::operator EUserModify() const { return static_cast(m_value.ident - CSSValueReadOnly); } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserSelect e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case SELECT_NONE: m_value.ident = CSSValueNone; break; case SELECT_TEXT: m_value.ident = CSSValueText; break; } } template<> inline CSSPrimitiveValue::operator EUserSelect() const { switch (m_value.ident) { case CSSValueAuto: return SELECT_TEXT; case CSSValueNone: return SELECT_NONE; case CSSValueText: return SELECT_TEXT; default: ASSERT_NOT_REACHED(); return SELECT_TEXT; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVisibility e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case VISIBLE: m_value.ident = CSSValueVisible; break; case HIDDEN: m_value.ident = CSSValueHidden; break; case COLLAPSE: m_value.ident = CSSValueCollapse; break; } } template<> inline CSSPrimitiveValue::operator EVisibility() const { switch (m_value.ident) { case CSSValueHidden: return HIDDEN; case CSSValueVisible: return VISIBLE; case CSSValueCollapse: return COLLAPSE; default: ASSERT_NOT_REACHED(); return VISIBLE; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWhiteSpace e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case NORMAL: m_value.ident = CSSValueNormal; break; case PRE: m_value.ident = CSSValuePre; break; case PRE_WRAP: m_value.ident = CSSValuePreWrap; break; case PRE_LINE: m_value.ident = CSSValuePreLine; break; case NOWRAP: m_value.ident = CSSValueNowrap; break; case KHTML_NOWRAP: m_value.ident = CSSValueWebkitNowrap; break; } } template<> inline CSSPrimitiveValue::operator EWhiteSpace() const { switch (m_value.ident) { case CSSValueWebkitNowrap: return KHTML_NOWRAP; case CSSValueNowrap: return NOWRAP; case CSSValuePre: return PRE; case CSSValuePreWrap: return PRE_WRAP; case CSSValuePreLine: return PRE_LINE; case CSSValueNormal: return NORMAL; default: ASSERT_NOT_REACHED(); return NORMAL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordBreak e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case NormalWordBreak: m_value.ident = CSSValueNormal; break; case BreakAllWordBreak: m_value.ident = CSSValueBreakAll; break; case BreakWordBreak: m_value.ident = CSSValueBreakWord; break; } } template<> inline CSSPrimitiveValue::operator EWordBreak() const { switch (m_value.ident) { case CSSValueBreakAll: return BreakAllWordBreak; case CSSValueBreakWord: return BreakWordBreak; case CSSValueNormal: return NormalWordBreak; default: ASSERT_NOT_REACHED(); return NormalWordBreak; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordWrap e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case NormalWordWrap: m_value.ident = CSSValueNormal; break; case BreakWordWrap: m_value.ident = CSSValueBreakWord; break; } } template<> inline CSSPrimitiveValue::operator EWordWrap() const { switch (m_value.ident) { case CSSValueBreakWord: return BreakWordWrap; case CSSValueNormal: return NormalWordWrap; default: ASSERT_NOT_REACHED(); return NormalWordWrap; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextDirection e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case LTR: m_value.ident = CSSValueLtr; break; case RTL: m_value.ident = CSSValueRtl; break; } } template<> inline CSSPrimitiveValue::operator TextDirection() const { switch (m_value.ident) { case CSSValueLtr: return LTR; case CSSValueRtl: return RTL; default: ASSERT_NOT_REACHED(); return LTR; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WritingMode e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TopToBottomWritingMode: m_value.ident = CSSValueHorizontalTb; break; case RightToLeftWritingMode: m_value.ident = CSSValueVerticalRl; break; case LeftToRightWritingMode: m_value.ident = CSSValueVerticalLr; break; case BottomToTopWritingMode: m_value.ident = CSSValueHorizontalBt; break; } } template<> inline CSSPrimitiveValue::operator WritingMode() const { switch (m_value.ident) { case CSSValueHorizontalTb: return TopToBottomWritingMode; case CSSValueVerticalRl: return RightToLeftWritingMode; case CSSValueVerticalLr: return LeftToRightWritingMode; case CSSValueHorizontalBt: return BottomToTopWritingMode; default: ASSERT_NOT_REACHED(); return TopToBottomWritingMode; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextCombine e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TextCombineNone: m_value.ident = CSSValueNone; break; case TextCombineHorizontal: m_value.ident = CSSValueHorizontal; break; } } template<> inline CSSPrimitiveValue::operator TextCombine() const { switch (m_value.ident) { case CSSValueNone: return TextCombineNone; case CSSValueHorizontal: return TextCombineHorizontal; default: ASSERT_NOT_REACHED(); return TextCombineNone; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisPosition position) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (position) { case TextEmphasisPositionOver: m_value.ident = CSSValueOver; break; case TextEmphasisPositionUnder: m_value.ident = CSSValueUnder; break; } } template<> inline CSSPrimitiveValue::operator TextEmphasisPosition() const { switch (m_value.ident) { case CSSValueOver: return TextEmphasisPositionOver; case CSSValueUnder: return TextEmphasisPositionUnder; default: ASSERT_NOT_REACHED(); return TextEmphasisPositionOver; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisFill fill) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (fill) { case TextEmphasisFillFilled: m_value.ident = CSSValueFilled; break; case TextEmphasisFillOpen: m_value.ident = CSSValueOpen; break; } } template<> inline CSSPrimitiveValue::operator TextEmphasisFill() const { switch (m_value.ident) { case CSSValueFilled: return TextEmphasisFillFilled; case CSSValueOpen: return TextEmphasisFillOpen; default: ASSERT_NOT_REACHED(); return TextEmphasisFillFilled; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisMark mark) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (mark) { case TextEmphasisMarkDot: m_value.ident = CSSValueDot; break; case TextEmphasisMarkCircle: m_value.ident = CSSValueCircle; break; case TextEmphasisMarkDoubleCircle: m_value.ident = CSSValueDoubleCircle; break; case TextEmphasisMarkTriangle: m_value.ident = CSSValueTriangle; break; case TextEmphasisMarkSesame: m_value.ident = CSSValueSesame; break; case TextEmphasisMarkNone: case TextEmphasisMarkAuto: case TextEmphasisMarkCustom: ASSERT_NOT_REACHED(); m_value.ident = CSSValueNone; break; } } template<> inline CSSPrimitiveValue::operator TextEmphasisMark() const { switch (m_value.ident) { case CSSValueNone: return TextEmphasisMarkNone; case CSSValueDot: return TextEmphasisMarkDot; case CSSValueCircle: return TextEmphasisMarkCircle; case CSSValueDoubleCircle: return TextEmphasisMarkDoubleCircle; case CSSValueTriangle: return TextEmphasisMarkTriangle; case CSSValueSesame: return TextEmphasisMarkSesame; default: ASSERT_NOT_REACHED(); return TextEmphasisMarkNone; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOrientation e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TextOrientationVerticalRight: m_value.ident = CSSValueVerticalRight; break; case TextOrientationUpright: m_value.ident = CSSValueUpright; break; } } template<> inline CSSPrimitiveValue::operator TextOrientation() const { switch (m_value.ident) { case CSSValueVerticalRight: return TextOrientationVerticalRight; case CSSValueUpright: return TextOrientationUpright; default: ASSERT_NOT_REACHED(); return TextOrientationVerticalRight; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPointerEvents e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case PE_NONE: m_value.ident = CSSValueNone; break; case PE_STROKE: m_value.ident = CSSValueStroke; break; case PE_FILL: m_value.ident = CSSValueFill; break; case PE_PAINTED: m_value.ident = CSSValuePainted; break; case PE_VISIBLE: m_value.ident = CSSValueVisible; break; case PE_VISIBLE_STROKE: m_value.ident = CSSValueVisiblestroke; break; case PE_VISIBLE_FILL: m_value.ident = CSSValueVisiblefill; break; case PE_VISIBLE_PAINTED: m_value.ident = CSSValueVisiblepainted; break; case PE_AUTO: m_value.ident = CSSValueAuto; break; case PE_ALL: m_value.ident = CSSValueAll; break; } } template<> inline CSSPrimitiveValue::operator EPointerEvents() const { switch (m_value.ident) { case CSSValueAll: return PE_ALL; case CSSValueAuto: return PE_AUTO; case CSSValueNone: return PE_NONE; case CSSValueVisiblepainted: return PE_VISIBLE_PAINTED; case CSSValueVisiblefill: return PE_VISIBLE_FILL; case CSSValueVisiblestroke: return PE_VISIBLE_STROKE; case CSSValueVisible: return PE_VISIBLE; case CSSValuePainted: return PE_PAINTED; case CSSValueFill: return PE_FILL; case CSSValueStroke: return PE_STROKE; default: ASSERT_NOT_REACHED(); return PE_ALL; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmoothingMode smoothing) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (smoothing) { case AutoSmoothing: m_value.ident = CSSValueAuto; return; case NoSmoothing: m_value.ident = CSSValueNone; return; case Antialiased: m_value.ident = CSSValueAntialiased; return; case SubpixelAntialiased: m_value.ident = CSSValueSubpixelAntialiased; return; } ASSERT_NOT_REACHED(); m_value.ident = CSSValueAuto; } template<> inline CSSPrimitiveValue::operator FontSmoothingMode() const { switch (m_value.ident) { case CSSValueAuto: return AutoSmoothing; case CSSValueNone: return NoSmoothing; case CSSValueAntialiased: return Antialiased; case CSSValueSubpixelAntialiased: return SubpixelAntialiased; } ASSERT_NOT_REACHED(); return AutoSmoothing; } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextRenderingMode e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case AutoTextRendering: m_value.ident = CSSValueAuto; break; case OptimizeSpeed: m_value.ident = CSSValueOptimizespeed; break; case OptimizeLegibility: m_value.ident = CSSValueOptimizelegibility; break; case GeometricPrecision: m_value.ident = CSSValueGeometricprecision; break; } } template<> inline CSSPrimitiveValue::operator TextRenderingMode() const { switch (m_value.ident) { case CSSValueAuto: return AutoTextRendering; case CSSValueOptimizespeed: return OptimizeSpeed; case CSSValueOptimizelegibility: return OptimizeLegibility; case CSSValueGeometricprecision: return GeometricPrecision; default: ASSERT_NOT_REACHED(); return AutoTextRendering; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ColorSpace space) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (space) { case ColorSpaceDeviceRGB: m_value.ident = CSSValueDefault; break; case ColorSpaceSRGB: m_value.ident = CSSValueSrgb; break; case ColorSpaceLinearRGB: // CSS color correction does not support linearRGB yet. ASSERT_NOT_REACHED(); m_value.ident = CSSValueDefault; break; } } template<> inline CSSPrimitiveValue::operator ColorSpace() const { switch (m_value.ident) { case CSSValueDefault: return ColorSpaceDeviceRGB; case CSSValueSrgb: return ColorSpaceSRGB; default: ASSERT_NOT_REACHED(); return ColorSpaceDeviceRGB; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Hyphens hyphens) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (hyphens) { case HyphensNone: m_value.ident = CSSValueNone; break; case HyphensManual: m_value.ident = CSSValueManual; break; case HyphensAuto: m_value.ident = CSSValueAuto; break; } } template<> inline CSSPrimitiveValue::operator Hyphens() const { switch (m_value.ident) { case CSSValueNone: return HyphensNone; case CSSValueManual: return HyphensManual; case CSSValueAuto: return HyphensAuto; default: ASSERT_NOT_REACHED(); return HyphensAuto; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ESpeak e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case SpeakNone: m_value.ident = CSSValueNone; break; case SpeakNormal: m_value.ident = CSSValueNormal; break; case SpeakSpellOut: m_value.ident = CSSValueSpellOut; break; case SpeakDigits: m_value.ident = CSSValueDigits; break; case SpeakLiteralPunctuation: m_value.ident = CSSValueLiteralPunctuation; break; case SpeakNoPunctuation: m_value.ident = CSSValueNoPunctuation; break; } } template<> inline CSSPrimitiveValue::operator ESpeak() const { switch (m_value.ident) { case CSSValueNone: return SpeakNone; case CSSValueNormal: return SpeakNormal; case CSSValueSpellOut: return SpeakSpellOut; case CSSValueDigits: return SpeakDigits; case CSSValueLiteralPunctuation: return SpeakLiteralPunctuation; case CSSValueNoPunctuation: return SpeakNoPunctuation; default: ASSERT_NOT_REACHED(); return SpeakNormal; } } #if ENABLE(SVG) template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineCap e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case ButtCap: m_value.ident = CSSValueButt; break; case RoundCap: m_value.ident = CSSValueRound; break; case SquareCap: m_value.ident = CSSValueSquare; break; } } template<> inline CSSPrimitiveValue::operator LineCap() const { switch (m_value.ident) { case CSSValueButt: return ButtCap; case CSSValueRound: return RoundCap; case CSSValueSquare: return SquareCap; default: ASSERT_NOT_REACHED(); return ButtCap; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineJoin e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case MiterJoin: m_value.ident = CSSValueMiter; break; case RoundJoin: m_value.ident = CSSValueRound; break; case BevelJoin: m_value.ident = CSSValueBevel; break; } } template<> inline CSSPrimitiveValue::operator LineJoin() const { switch (m_value.ident) { case CSSValueMiter: return MiterJoin; case CSSValueRound: return RoundJoin; case CSSValueBevel: return BevelJoin; default: ASSERT_NOT_REACHED(); return MiterJoin; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WindRule e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case RULE_NONZERO: m_value.ident = CSSValueNonzero; break; case RULE_EVENODD: m_value.ident = CSSValueEvenodd; break; } } template<> inline CSSPrimitiveValue::operator WindRule() const { switch (m_value.ident) { case CSSValueNonzero: return RULE_NONZERO; case CSSValueEvenodd: return RULE_EVENODD; default: ASSERT_NOT_REACHED(); return RULE_NONZERO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignmentBaseline e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case AB_AUTO: m_value.ident = CSSValueAuto; break; case AB_BASELINE: m_value.ident = CSSValueBaseline; break; case AB_BEFORE_EDGE: m_value.ident = CSSValueBeforeEdge; break; case AB_TEXT_BEFORE_EDGE: m_value.ident = CSSValueTextBeforeEdge; break; case AB_MIDDLE: m_value.ident = CSSValueMiddle; break; case AB_CENTRAL: m_value.ident = CSSValueCentral; break; case AB_AFTER_EDGE: m_value.ident = CSSValueAfterEdge; break; case AB_TEXT_AFTER_EDGE: m_value.ident = CSSValueTextAfterEdge; break; case AB_IDEOGRAPHIC: m_value.ident = CSSValueIdeographic; break; case AB_ALPHABETIC: m_value.ident = CSSValueAlphabetic; break; case AB_HANGING: m_value.ident = CSSValueHanging; break; case AB_MATHEMATICAL: m_value.ident = CSSValueMathematical; break; } } template<> inline CSSPrimitiveValue::operator EAlignmentBaseline() const { switch (m_value.ident) { case CSSValueAuto: return AB_AUTO; case CSSValueBaseline: return AB_BASELINE; case CSSValueBeforeEdge: return AB_BEFORE_EDGE; case CSSValueTextBeforeEdge: return AB_TEXT_BEFORE_EDGE; case CSSValueMiddle: return AB_MIDDLE; case CSSValueCentral: return AB_CENTRAL; case CSSValueAfterEdge: return AB_AFTER_EDGE; case CSSValueTextAfterEdge: return AB_TEXT_AFTER_EDGE; case CSSValueIdeographic: return AB_IDEOGRAPHIC; case CSSValueAlphabetic: return AB_ALPHABETIC; case CSSValueHanging: return AB_HANGING; case CSSValueMathematical: return AB_MATHEMATICAL; default: ASSERT_NOT_REACHED(); return AB_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorInterpolation e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CI_AUTO: m_value.ident = CSSValueAuto; break; case CI_SRGB: m_value.ident = CSSValueSrgb; break; case CI_LINEARRGB: m_value.ident = CSSValueLinearrgb; break; } } template<> inline CSSPrimitiveValue::operator EColorInterpolation() const { switch (m_value.ident) { case CSSValueSrgb: return CI_SRGB; case CSSValueLinearrgb: return CI_LINEARRGB; case CSSValueAuto: return CI_AUTO; default: ASSERT_NOT_REACHED(); return CI_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorRendering e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case CR_AUTO: m_value.ident = CSSValueAuto; break; case CR_OPTIMIZESPEED: m_value.ident = CSSValueOptimizespeed; break; case CR_OPTIMIZEQUALITY: m_value.ident = CSSValueOptimizequality; break; } } template<> inline CSSPrimitiveValue::operator EColorRendering() const { switch (m_value.ident) { case CSSValueOptimizespeed: return CR_OPTIMIZESPEED; case CSSValueOptimizequality: return CR_OPTIMIZEQUALITY; case CSSValueAuto: return CR_AUTO; default: ASSERT_NOT_REACHED(); return CR_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDominantBaseline e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case DB_AUTO: m_value.ident = CSSValueAuto; break; case DB_USE_SCRIPT: m_value.ident = CSSValueUseScript; break; case DB_NO_CHANGE: m_value.ident = CSSValueNoChange; break; case DB_RESET_SIZE: m_value.ident = CSSValueResetSize; break; case DB_CENTRAL: m_value.ident = CSSValueCentral; break; case DB_MIDDLE: m_value.ident = CSSValueMiddle; break; case DB_TEXT_BEFORE_EDGE: m_value.ident = CSSValueTextBeforeEdge; break; case DB_TEXT_AFTER_EDGE: m_value.ident = CSSValueTextAfterEdge; break; case DB_IDEOGRAPHIC: m_value.ident = CSSValueIdeographic; break; case DB_ALPHABETIC: m_value.ident = CSSValueAlphabetic; break; case DB_HANGING: m_value.ident = CSSValueHanging; break; case DB_MATHEMATICAL: m_value.ident = CSSValueMathematical; break; } } template<> inline CSSPrimitiveValue::operator EDominantBaseline() const { switch (m_value.ident) { case CSSValueAuto: return DB_AUTO; case CSSValueUseScript: return DB_USE_SCRIPT; case CSSValueNoChange: return DB_NO_CHANGE; case CSSValueResetSize: return DB_RESET_SIZE; case CSSValueIdeographic: return DB_IDEOGRAPHIC; case CSSValueAlphabetic: return DB_ALPHABETIC; case CSSValueHanging: return DB_HANGING; case CSSValueMathematical: return DB_MATHEMATICAL; case CSSValueCentral: return DB_CENTRAL; case CSSValueMiddle: return DB_MIDDLE; case CSSValueTextAfterEdge: return DB_TEXT_AFTER_EDGE; case CSSValueTextBeforeEdge: return DB_TEXT_BEFORE_EDGE; default: ASSERT_NOT_REACHED(); return DB_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case IR_AUTO: m_value.ident = CSSValueAuto; break; case IR_OPTIMIZESPEED: m_value.ident = CSSValueOptimizespeed; break; case IR_OPTIMIZEQUALITY: m_value.ident = CSSValueOptimizequality; break; } } template<> inline CSSPrimitiveValue::operator EImageRendering() const { switch (m_value.ident) { case CSSValueAuto: return IR_AUTO; case CSSValueOptimizespeed: return IR_OPTIMIZESPEED; case CSSValueOptimizequality: return IR_OPTIMIZEQUALITY; default: ASSERT_NOT_REACHED(); return IR_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EShapeRendering e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case IR_AUTO: m_value.ident = CSSValueAuto; break; case IR_OPTIMIZESPEED: m_value.ident = CSSValueOptimizespeed; break; case SR_CRISPEDGES: m_value.ident = CSSValueCrispedges; break; case SR_GEOMETRICPRECISION: m_value.ident = CSSValueGeometricprecision; break; } } template<> inline CSSPrimitiveValue::operator EShapeRendering() const { switch (m_value.ident) { case CSSValueAuto: return SR_AUTO; case CSSValueOptimizespeed: return SR_OPTIMIZESPEED; case CSSValueCrispedges: return SR_CRISPEDGES; case CSSValueGeometricprecision: return SR_GEOMETRICPRECISION; default: ASSERT_NOT_REACHED(); return SR_AUTO; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAnchor e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case TA_START: m_value.ident = CSSValueStart; break; case TA_MIDDLE: m_value.ident = CSSValueMiddle; break; case TA_END: m_value.ident = CSSValueEnd; break; } } template<> inline CSSPrimitiveValue::operator ETextAnchor() const { switch (m_value.ident) { case CSSValueStart: return TA_START; case CSSValueMiddle: return TA_MIDDLE; case CSSValueEnd: return TA_END; default: ASSERT_NOT_REACHED(); return TA_START; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(SVGWritingMode e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case WM_LRTB: m_value.ident = CSSValueLrTb; break; case WM_LR: m_value.ident = CSSValueLr; break; case WM_RLTB: m_value.ident = CSSValueRlTb; break; case WM_RL: m_value.ident = CSSValueRl; break; case WM_TBRL: m_value.ident = CSSValueTbRl; break; case WM_TB: m_value.ident = CSSValueTb; break; } } template<> inline CSSPrimitiveValue::operator SVGWritingMode() const { switch (m_value.ident) { case CSSValueLrTb: return WM_LRTB; case CSSValueLr: return WM_LR; case CSSValueRlTb: return WM_RLTB; case CSSValueRl: return WM_RL; case CSSValueTbRl: return WM_TBRL; case CSSValueTb: return WM_TB; default: ASSERT_NOT_REACHED(); return WM_LRTB; } } template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVectorEffect e) : m_type(CSS_IDENT) , m_hasCachedCSSText(false) { switch (e) { case VE_NONE: m_value.ident = CSSValueNone; break; case VE_NON_SCALING_STROKE: m_value.ident = CSSValueNonScalingStroke; break; } } template<> inline CSSPrimitiveValue::operator EVectorEffect() const { switch (m_value.ident) { case CSSValueNone: return VE_NONE; case CSSValueNonScalingStroke: return VE_NON_SCALING_STROKE; default: ASSERT_NOT_REACHED(); return VE_NONE; } } #endif } #endif