2 * Copyright (C) 2007 Alexey Proskuryakov <ap@nypop.com>.
3 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
5 * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com>
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #ifndef CSSPrimitiveValueMappings_h
31 #define CSSPrimitiveValueMappings_h
33 #include "core/CSSValueKeywords.h"
34 #include "core/css/CSSCalculationValue.h"
35 #include "core/css/CSSPrimitiveValue.h"
36 #include "core/css/CSSReflectionDirection.h"
37 #include "core/css/CSSToLengthConversionData.h"
38 #include "core/rendering/style/LineClampValue.h"
39 #include "core/rendering/style/RenderStyleConstants.h"
40 #include "core/rendering/style/SVGRenderStyleDefs.h"
41 #include "platform/Length.h"
42 #include "platform/ThemeTypes.h"
43 #include "platform/fonts/FontDescription.h"
44 #include "platform/fonts/FontSmoothingMode.h"
45 #include "platform/fonts/TextRenderingMode.h"
46 #include "platform/graphics/GraphicsTypes.h"
47 #include "platform/graphics/Path.h"
48 #include "platform/scroll/ScrollableArea.h"
49 #include "platform/text/TextDirection.h"
50 #include "platform/text/UnicodeBidi.h"
51 #include "platform/text/WritingMode.h"
52 #include "wtf/MathExtras.h"
56 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(short i)
57 : CSSValue(PrimitiveClass)
59 m_primitiveUnitType = CSS_NUMBER;
60 m_value.num = static_cast<double>(i);
63 template<> inline CSSPrimitiveValue::operator short() const
66 return clampTo<short>(getDoubleValue());
69 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(unsigned short i)
70 : CSSValue(PrimitiveClass)
72 m_primitiveUnitType = CSS_NUMBER;
73 m_value.num = static_cast<double>(i);
76 template<> inline CSSPrimitiveValue::operator unsigned short() const
79 return clampTo<unsigned short>(getDoubleValue());
82 template<> inline CSSPrimitiveValue::operator int() const
85 return clampTo<int>(getDoubleValue());
88 template<> inline CSSPrimitiveValue::operator unsigned() const
91 return clampTo<unsigned>(getDoubleValue());
95 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(float i)
96 : CSSValue(PrimitiveClass)
98 m_primitiveUnitType = CSS_NUMBER;
99 m_value.num = static_cast<double>(i);
102 template<> inline CSSPrimitiveValue::operator float() const
105 return clampTo<float>(getDoubleValue());
108 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineClampValue i)
109 : CSSValue(PrimitiveClass)
111 m_primitiveUnitType = i.isPercentage() ? CSS_PERCENTAGE : CSS_NUMBER;
112 m_value.num = static_cast<double>(i.value());
115 template<> inline CSSPrimitiveValue::operator LineClampValue() const
117 if (m_primitiveUnitType == CSS_NUMBER)
118 return LineClampValue(clampTo<int>(m_value.num), LineClampLineCount);
120 if (m_primitiveUnitType == CSS_PERCENTAGE)
121 return LineClampValue(clampTo<int>(m_value.num), LineClampPercentage);
123 ASSERT_NOT_REACHED();
124 return LineClampValue();
127 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CSSReflectionDirection e)
128 : CSSValue(PrimitiveClass)
130 m_primitiveUnitType = CSS_VALUE_ID;
132 case ReflectionAbove:
133 m_value.valueID = CSSValueAbove;
135 case ReflectionBelow:
136 m_value.valueID = CSSValueBelow;
139 m_value.valueID = CSSValueLeft;
141 case ReflectionRight:
142 m_value.valueID = CSSValueRight;
146 template<> inline CSSPrimitiveValue::operator CSSReflectionDirection() const
149 switch (m_value.valueID) {
151 return ReflectionAbove;
153 return ReflectionBelow;
155 return ReflectionLeft;
157 return ReflectionRight;
162 ASSERT_NOT_REACHED();
163 return ReflectionBelow;
166 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ColumnFill columnFill)
167 : CSSValue(PrimitiveClass)
169 m_primitiveUnitType = CSS_VALUE_ID;
170 switch (columnFill) {
172 m_value.valueID = CSSValueAuto;
174 case ColumnFillBalance:
175 m_value.valueID = CSSValueBalance;
180 template<> inline CSSPrimitiveValue::operator ColumnFill() const
182 if (m_primitiveUnitType == CSS_VALUE_ID) {
183 if (m_value.valueID == CSSValueBalance)
184 return ColumnFillBalance;
185 if (m_value.valueID == CSSValueAuto)
186 return ColumnFillAuto;
188 ASSERT_NOT_REACHED();
189 return ColumnFillBalance;
192 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ColumnSpan columnSpan)
193 : CSSValue(PrimitiveClass)
195 m_primitiveUnitType = CSS_VALUE_ID;
196 switch (columnSpan) {
198 m_value.valueID = CSSValueAll;
201 m_value.valueID = CSSValueNone;
206 template<> inline CSSPrimitiveValue::operator ColumnSpan() const
208 // Map 1 to none for compatibility reasons.
209 if (m_primitiveUnitType == CSS_NUMBER && m_value.num == 1)
210 return ColumnSpanNone;
213 switch (m_value.valueID) {
215 return ColumnSpanAll;
217 return ColumnSpanNone;
222 ASSERT_NOT_REACHED();
223 return ColumnSpanNone;
227 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(PrintColorAdjust value)
228 : CSSValue(PrimitiveClass)
230 m_primitiveUnitType = CSS_VALUE_ID;
232 case PrintColorAdjustExact:
233 m_value.valueID = CSSValueExact;
235 case PrintColorAdjustEconomy:
236 m_value.valueID = CSSValueEconomy;
241 template<> inline CSSPrimitiveValue::operator PrintColorAdjust() const
244 switch (m_value.valueID) {
245 case CSSValueEconomy:
246 return PrintColorAdjustEconomy;
248 return PrintColorAdjustExact;
253 ASSERT_NOT_REACHED();
254 return PrintColorAdjustEconomy;
258 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderStyle e)
259 : CSSValue(PrimitiveClass)
261 m_primitiveUnitType = CSS_VALUE_ID;
264 m_value.valueID = CSSValueNone;
267 m_value.valueID = CSSValueHidden;
270 m_value.valueID = CSSValueInset;
273 m_value.valueID = CSSValueGroove;
276 m_value.valueID = CSSValueRidge;
279 m_value.valueID = CSSValueOutset;
282 m_value.valueID = CSSValueDotted;
285 m_value.valueID = CSSValueDashed;
288 m_value.valueID = CSSValueSolid;
291 m_value.valueID = CSSValueDouble;
296 template<> inline CSSPrimitiveValue::operator EBorderStyle() const
299 if (m_value.valueID == CSSValueAuto) // Valid for CSS outline-style
301 return (EBorderStyle)(m_value.valueID - CSSValueNone);
304 template<> inline CSSPrimitiveValue::operator OutlineIsAuto() const
306 if (m_value.valueID == CSSValueAuto)
311 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CompositeOperator e)
312 : CSSValue(PrimitiveClass)
314 m_primitiveUnitType = CSS_VALUE_ID;
317 m_value.valueID = CSSValueClear;
320 m_value.valueID = CSSValueCopy;
322 case CompositeSourceOver:
323 m_value.valueID = CSSValueSourceOver;
325 case CompositeSourceIn:
326 m_value.valueID = CSSValueSourceIn;
328 case CompositeSourceOut:
329 m_value.valueID = CSSValueSourceOut;
331 case CompositeSourceAtop:
332 m_value.valueID = CSSValueSourceAtop;
334 case CompositeDestinationOver:
335 m_value.valueID = CSSValueDestinationOver;
337 case CompositeDestinationIn:
338 m_value.valueID = CSSValueDestinationIn;
340 case CompositeDestinationOut:
341 m_value.valueID = CSSValueDestinationOut;
343 case CompositeDestinationAtop:
344 m_value.valueID = CSSValueDestinationAtop;
347 m_value.valueID = CSSValueXor;
349 case CompositePlusDarker:
350 m_value.valueID = CSSValuePlusDarker;
352 case CompositePlusLighter:
353 m_value.valueID = CSSValuePlusLighter;
355 case CompositeDifference:
356 ASSERT_NOT_REACHED();
361 template<> inline CSSPrimitiveValue::operator CompositeOperator() const
364 switch (m_value.valueID) {
366 return CompositeClear;
368 return CompositeCopy;
369 case CSSValueSourceOver:
370 return CompositeSourceOver;
371 case CSSValueSourceIn:
372 return CompositeSourceIn;
373 case CSSValueSourceOut:
374 return CompositeSourceOut;
375 case CSSValueSourceAtop:
376 return CompositeSourceAtop;
377 case CSSValueDestinationOver:
378 return CompositeDestinationOver;
379 case CSSValueDestinationIn:
380 return CompositeDestinationIn;
381 case CSSValueDestinationOut:
382 return CompositeDestinationOut;
383 case CSSValueDestinationAtop:
384 return CompositeDestinationAtop;
387 case CSSValuePlusDarker:
388 return CompositePlusDarker;
389 case CSSValuePlusLighter:
390 return CompositePlusLighter;
395 ASSERT_NOT_REACHED();
396 return CompositeClear;
399 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
400 : CSSValue(PrimitiveClass)
402 m_primitiveUnitType = CSS_VALUE_ID;
405 m_value.valueID = CSSValueNone;
408 m_value.valueID = CSSValueCheckbox;
411 m_value.valueID = CSSValueRadio;
414 m_value.valueID = CSSValuePushButton;
416 case SquareButtonPart:
417 m_value.valueID = CSSValueSquareButton;
420 m_value.valueID = CSSValueButton;
422 case ButtonBevelPart:
423 m_value.valueID = CSSValueButtonBevel;
425 case InnerSpinButtonPart:
426 m_value.valueID = CSSValueInnerSpinButton;
429 m_value.valueID = CSSValueListbox;
432 m_value.valueID = CSSValueListitem;
434 case MediaEnterFullscreenButtonPart:
435 m_value.valueID = CSSValueMediaEnterFullscreenButton;
437 case MediaExitFullscreenButtonPart:
438 m_value.valueID = CSSValueMediaExitFullscreenButton;
440 case MediaPlayButtonPart:
441 m_value.valueID = CSSValueMediaPlayButton;
443 case MediaOverlayPlayButtonPart:
444 m_value.valueID = CSSValueMediaOverlayPlayButton;
446 case MediaMuteButtonPart:
447 m_value.valueID = CSSValueMediaMuteButton;
449 case MediaToggleClosedCaptionsButtonPart:
450 m_value.valueID = CSSValueMediaToggleClosedCaptionsButton;
452 case MediaCastOffButtonPart:
453 m_value.valueID = CSSValueInternalMediaCastOffButton;
455 case MediaOverlayCastOffButtonPart:
456 m_value.valueID = CSSValueInternalMediaOverlayCastOffButton;
458 case MediaSliderPart:
459 m_value.valueID = CSSValueMediaSlider;
461 case MediaSliderThumbPart:
462 m_value.valueID = CSSValueMediaSliderthumb;
464 case MediaVolumeSliderContainerPart:
465 m_value.valueID = CSSValueMediaVolumeSliderContainer;
467 case MediaVolumeSliderPart:
468 m_value.valueID = CSSValueMediaVolumeSlider;
470 case MediaVolumeSliderThumbPart:
471 m_value.valueID = CSSValueMediaVolumeSliderthumb;
473 case MediaControlsBackgroundPart:
474 m_value.valueID = CSSValueMediaControlsBackground;
476 case MediaControlsFullscreenBackgroundPart:
477 m_value.valueID = CSSValueMediaControlsFullscreenBackground;
479 case MediaFullScreenVolumeSliderPart:
480 m_value.valueID = CSSValueMediaFullscreenVolumeSlider;
482 case MediaFullScreenVolumeSliderThumbPart:
483 m_value.valueID = CSSValueMediaFullscreenVolumeSliderThumb;
485 case MediaCurrentTimePart:
486 m_value.valueID = CSSValueMediaCurrentTimeDisplay;
488 case MediaTimeRemainingPart:
489 m_value.valueID = CSSValueMediaTimeRemainingDisplay;
492 m_value.valueID = CSSValueMenulist;
494 case MenulistButtonPart:
495 m_value.valueID = CSSValueMenulistButton;
497 case MenulistTextPart:
498 m_value.valueID = CSSValueMenulistText;
500 case MenulistTextFieldPart:
501 m_value.valueID = CSSValueMenulistTextfield;
504 m_value.valueID = CSSValueMeter;
506 case RelevancyLevelIndicatorPart:
507 m_value.valueID = CSSValueRelevancyLevelIndicator;
509 case ContinuousCapacityLevelIndicatorPart:
510 m_value.valueID = CSSValueContinuousCapacityLevelIndicator;
512 case DiscreteCapacityLevelIndicatorPart:
513 m_value.valueID = CSSValueDiscreteCapacityLevelIndicator;
515 case RatingLevelIndicatorPart:
516 m_value.valueID = CSSValueRatingLevelIndicator;
518 case ProgressBarPart:
519 m_value.valueID = CSSValueProgressBar;
521 case ProgressBarValuePart:
522 m_value.valueID = CSSValueProgressBarValue;
524 case SliderHorizontalPart:
525 m_value.valueID = CSSValueSliderHorizontal;
527 case SliderVerticalPart:
528 m_value.valueID = CSSValueSliderVertical;
530 case SliderThumbHorizontalPart:
531 m_value.valueID = CSSValueSliderthumbHorizontal;
533 case SliderThumbVerticalPart:
534 m_value.valueID = CSSValueSliderthumbVertical;
537 m_value.valueID = CSSValueCaret;
539 case SearchFieldPart:
540 m_value.valueID = CSSValueSearchfield;
542 case SearchFieldDecorationPart:
543 m_value.valueID = CSSValueSearchfieldDecoration;
545 case SearchFieldResultsDecorationPart:
546 m_value.valueID = CSSValueSearchfieldResultsDecoration;
548 case SearchFieldCancelButtonPart:
549 m_value.valueID = CSSValueSearchfieldCancelButton;
552 m_value.valueID = CSSValueTextfield;
555 m_value.valueID = CSSValueTextarea;
557 case CapsLockIndicatorPart:
558 m_value.valueID = CSSValueCapsLockIndicator;
563 template<> inline CSSPrimitiveValue::operator ControlPart() const
566 if (m_value.valueID == CSSValueNone)
567 return NoControlPart;
568 return ControlPart(m_value.valueID - CSSValueCheckbox + 1);
571 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBackfaceVisibility e)
572 : CSSValue(PrimitiveClass)
574 m_primitiveUnitType = CSS_VALUE_ID;
576 case BackfaceVisibilityVisible:
577 m_value.valueID = CSSValueVisible;
579 case BackfaceVisibilityHidden:
580 m_value.valueID = CSSValueHidden;
585 template<> inline CSSPrimitiveValue::operator EBackfaceVisibility() const
588 switch (m_value.valueID) {
589 case CSSValueVisible:
590 return BackfaceVisibilityVisible;
592 return BackfaceVisibilityHidden;
597 ASSERT_NOT_REACHED();
598 return BackfaceVisibilityHidden;
602 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillAttachment e)
603 : CSSValue(PrimitiveClass)
605 m_primitiveUnitType = CSS_VALUE_ID;
607 case ScrollBackgroundAttachment:
608 m_value.valueID = CSSValueScroll;
610 case LocalBackgroundAttachment:
611 m_value.valueID = CSSValueLocal;
613 case FixedBackgroundAttachment:
614 m_value.valueID = CSSValueFixed;
619 template<> inline CSSPrimitiveValue::operator EFillAttachment() const
622 switch (m_value.valueID) {
624 return ScrollBackgroundAttachment;
626 return LocalBackgroundAttachment;
628 return FixedBackgroundAttachment;
633 ASSERT_NOT_REACHED();
634 return ScrollBackgroundAttachment;
637 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillBox e)
638 : CSSValue(PrimitiveClass)
640 m_primitiveUnitType = CSS_VALUE_ID;
643 m_value.valueID = CSSValueBorderBox;
646 m_value.valueID = CSSValuePaddingBox;
649 m_value.valueID = CSSValueContentBox;
652 m_value.valueID = CSSValueText;
657 template<> inline CSSPrimitiveValue::operator EFillBox() const
660 switch (m_value.valueID) {
662 case CSSValueBorderBox:
663 return BorderFillBox;
664 case CSSValuePadding:
665 case CSSValuePaddingBox:
666 return PaddingFillBox;
667 case CSSValueContent:
668 case CSSValueContentBox:
669 return ContentFillBox;
671 case CSSValueWebkitText:
677 ASSERT_NOT_REACHED();
678 return BorderFillBox;
681 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillRepeat e)
682 : CSSValue(PrimitiveClass)
684 m_primitiveUnitType = CSS_VALUE_ID;
687 m_value.valueID = CSSValueRepeat;
690 m_value.valueID = CSSValueNoRepeat;
693 m_value.valueID = CSSValueRound;
696 m_value.valueID = CSSValueSpace;
701 template<> inline CSSPrimitiveValue::operator EFillRepeat() const
704 switch (m_value.valueID) {
707 case CSSValueNoRepeat:
717 ASSERT_NOT_REACHED();
721 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxPack e)
722 : CSSValue(PrimitiveClass)
724 m_primitiveUnitType = CSS_VALUE_ID;
727 m_value.valueID = CSSValueStart;
730 m_value.valueID = CSSValueCenter;
733 m_value.valueID = CSSValueEnd;
736 m_value.valueID = CSSValueJustify;
741 template<> inline CSSPrimitiveValue::operator EBoxPack() const
744 switch (m_value.valueID) {
751 case CSSValueJustify:
757 ASSERT_NOT_REACHED();
761 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxAlignment e)
762 : CSSValue(PrimitiveClass)
764 m_primitiveUnitType = CSS_VALUE_ID;
767 m_value.valueID = CSSValueStretch;
770 m_value.valueID = CSSValueStart;
773 m_value.valueID = CSSValueCenter;
776 m_value.valueID = CSSValueEnd;
779 m_value.valueID = CSSValueBaseline;
784 template<> inline CSSPrimitiveValue::operator EBoxAlignment() const
787 switch (m_value.valueID) {
788 case CSSValueStretch:
796 case CSSValueBaseline:
802 ASSERT_NOT_REACHED();
806 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDecorationBreak e)
807 : CSSValue(PrimitiveClass)
809 m_primitiveUnitType = CSS_VALUE_ID;
812 m_value.valueID = CSSValueSlice;
815 m_value.valueID = CSSValueClone;
820 template<> inline CSSPrimitiveValue::operator EBoxDecorationBreak() const
823 switch (m_value.valueID) {
832 ASSERT_NOT_REACHED();
836 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BackgroundEdgeOrigin e)
837 : CSSValue(PrimitiveClass)
839 m_primitiveUnitType = CSS_VALUE_ID;
842 m_value.valueID = CSSValueTop;
845 m_value.valueID = CSSValueRight;
848 m_value.valueID = CSSValueBottom;
851 m_value.valueID = CSSValueLeft;
856 template<> inline CSSPrimitiveValue::operator BackgroundEdgeOrigin() const
859 switch (m_value.valueID) {
872 ASSERT_NOT_REACHED();
876 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxSizing e)
877 : CSSValue(PrimitiveClass)
879 m_primitiveUnitType = CSS_VALUE_ID;
882 m_value.valueID = CSSValueBorderBox;
885 m_value.valueID = CSSValueContentBox;
890 template<> inline CSSPrimitiveValue::operator EBoxSizing() const
893 switch (m_value.valueID) {
894 case CSSValueBorderBox:
896 case CSSValueContentBox:
902 ASSERT_NOT_REACHED();
906 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDirection e)
907 : CSSValue(PrimitiveClass)
909 m_primitiveUnitType = CSS_VALUE_ID;
912 m_value.valueID = CSSValueNormal;
915 m_value.valueID = CSSValueReverse;
920 template<> inline CSSPrimitiveValue::operator EBoxDirection() const
923 switch (m_value.valueID) {
926 case CSSValueReverse:
932 ASSERT_NOT_REACHED();
936 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxLines e)
937 : CSSValue(PrimitiveClass)
939 m_primitiveUnitType = CSS_VALUE_ID;
942 m_value.valueID = CSSValueSingle;
945 m_value.valueID = CSSValueMultiple;
950 template<> inline CSSPrimitiveValue::operator EBoxLines() const
953 switch (m_value.valueID) {
956 case CSSValueMultiple:
962 ASSERT_NOT_REACHED();
966 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxOrient e)
967 : CSSValue(PrimitiveClass)
969 m_primitiveUnitType = CSS_VALUE_ID;
972 m_value.valueID = CSSValueHorizontal;
975 m_value.valueID = CSSValueVertical;
980 template<> inline CSSPrimitiveValue::operator EBoxOrient() const
983 switch (m_value.valueID) {
984 case CSSValueHorizontal:
985 case CSSValueInlineAxis:
987 case CSSValueVertical:
988 case CSSValueBlockAxis:
994 ASSERT_NOT_REACHED();
998 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECaptionSide e)
999 : CSSValue(PrimitiveClass)
1001 m_primitiveUnitType = CSS_VALUE_ID;
1004 m_value.valueID = CSSValueLeft;
1007 m_value.valueID = CSSValueRight;
1010 m_value.valueID = CSSValueTop;
1013 m_value.valueID = CSSValueBottom;
1018 template<> inline CSSPrimitiveValue::operator ECaptionSide() const
1020 ASSERT(isValueID());
1021 switch (m_value.valueID) {
1028 case CSSValueBottom:
1034 ASSERT_NOT_REACHED();
1038 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EClear e)
1039 : CSSValue(PrimitiveClass)
1041 m_primitiveUnitType = CSS_VALUE_ID;
1044 m_value.valueID = CSSValueNone;
1047 m_value.valueID = CSSValueLeft;
1050 m_value.valueID = CSSValueRight;
1053 m_value.valueID = CSSValueBoth;
1058 template<> inline CSSPrimitiveValue::operator EClear() const
1060 ASSERT(isValueID());
1061 switch (m_value.valueID) {
1074 ASSERT_NOT_REACHED();
1078 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECursor e)
1079 : CSSValue(PrimitiveClass)
1081 m_primitiveUnitType = CSS_VALUE_ID;
1084 m_value.valueID = CSSValueAuto;
1087 m_value.valueID = CSSValueCrosshair;
1089 case CURSOR_DEFAULT:
1090 m_value.valueID = CSSValueDefault;
1092 case CURSOR_POINTER:
1093 m_value.valueID = CSSValuePointer;
1096 m_value.valueID = CSSValueMove;
1099 m_value.valueID = CSSValueCell;
1101 case CURSOR_VERTICAL_TEXT:
1102 m_value.valueID = CSSValueVerticalText;
1104 case CURSOR_CONTEXT_MENU:
1105 m_value.valueID = CSSValueContextMenu;
1108 m_value.valueID = CSSValueAlias;
1111 m_value.valueID = CSSValueCopy;
1114 m_value.valueID = CSSValueNone;
1116 case CURSOR_PROGRESS:
1117 m_value.valueID = CSSValueProgress;
1119 case CURSOR_NO_DROP:
1120 m_value.valueID = CSSValueNoDrop;
1122 case CURSOR_NOT_ALLOWED:
1123 m_value.valueID = CSSValueNotAllowed;
1125 case CURSOR_ZOOM_IN:
1126 m_value.valueID = CSSValueZoomIn;
1128 case CURSOR_ZOOM_OUT:
1129 m_value.valueID = CSSValueZoomOut;
1131 case CURSOR_E_RESIZE:
1132 m_value.valueID = CSSValueEResize;
1134 case CURSOR_NE_RESIZE:
1135 m_value.valueID = CSSValueNeResize;
1137 case CURSOR_NW_RESIZE:
1138 m_value.valueID = CSSValueNwResize;
1140 case CURSOR_N_RESIZE:
1141 m_value.valueID = CSSValueNResize;
1143 case CURSOR_SE_RESIZE:
1144 m_value.valueID = CSSValueSeResize;
1146 case CURSOR_SW_RESIZE:
1147 m_value.valueID = CSSValueSwResize;
1149 case CURSOR_S_RESIZE:
1150 m_value.valueID = CSSValueSResize;
1152 case CURSOR_W_RESIZE:
1153 m_value.valueID = CSSValueWResize;
1155 case CURSOR_EW_RESIZE:
1156 m_value.valueID = CSSValueEwResize;
1158 case CURSOR_NS_RESIZE:
1159 m_value.valueID = CSSValueNsResize;
1161 case CURSOR_NESW_RESIZE:
1162 m_value.valueID = CSSValueNeswResize;
1164 case CURSOR_NWSE_RESIZE:
1165 m_value.valueID = CSSValueNwseResize;
1167 case CURSOR_COL_RESIZE:
1168 m_value.valueID = CSSValueColResize;
1170 case CURSOR_ROW_RESIZE:
1171 m_value.valueID = CSSValueRowResize;
1174 m_value.valueID = CSSValueText;
1177 m_value.valueID = CSSValueWait;
1180 m_value.valueID = CSSValueHelp;
1182 case CURSOR_ALL_SCROLL:
1183 m_value.valueID = CSSValueAllScroll;
1185 case CURSOR_WEBKIT_GRAB:
1186 m_value.valueID = CSSValueWebkitGrab;
1188 case CURSOR_WEBKIT_GRABBING:
1189 m_value.valueID = CSSValueWebkitGrabbing;
1194 template<> inline CSSPrimitiveValue::operator ECursor() const
1196 ASSERT(isValueID());
1197 switch (m_value.valueID) {
1200 case CSSValueWebkitZoomIn:
1201 return CURSOR_ZOOM_IN;
1202 case CSSValueWebkitZoomOut:
1203 return CURSOR_ZOOM_OUT;
1207 return static_cast<ECursor>(m_value.valueID - CSSValueAuto);
1211 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDisplay e)
1212 : CSSValue(PrimitiveClass)
1214 m_primitiveUnitType = CSS_VALUE_ID;
1217 m_value.valueID = CSSValueInline;
1220 m_value.valueID = CSSValueBlock;
1223 m_value.valueID = CSSValueListItem;
1226 m_value.valueID = CSSValueInlineBlock;
1229 m_value.valueID = CSSValueTable;
1232 m_value.valueID = CSSValueInlineTable;
1234 case TABLE_ROW_GROUP:
1235 m_value.valueID = CSSValueTableRowGroup;
1237 case TABLE_HEADER_GROUP:
1238 m_value.valueID = CSSValueTableHeaderGroup;
1240 case TABLE_FOOTER_GROUP:
1241 m_value.valueID = CSSValueTableFooterGroup;
1244 m_value.valueID = CSSValueTableRow;
1246 case TABLE_COLUMN_GROUP:
1247 m_value.valueID = CSSValueTableColumnGroup;
1250 m_value.valueID = CSSValueTableColumn;
1253 m_value.valueID = CSSValueTableCell;
1256 m_value.valueID = CSSValueTableCaption;
1259 m_value.valueID = CSSValueWebkitBox;
1262 m_value.valueID = CSSValueWebkitInlineBox;
1265 m_value.valueID = CSSValueFlex;
1268 m_value.valueID = CSSValueInlineFlex;
1271 m_value.valueID = CSSValueGrid;
1274 m_value.valueID = CSSValueInlineGrid;
1277 m_value.valueID = CSSValueNone;
1282 template<> inline CSSPrimitiveValue::operator EDisplay() const
1284 ASSERT(isValueID());
1285 if (m_value.valueID == CSSValueNone)
1288 if (m_value.valueID == CSSValueWebkitFlex)
1290 if (m_value.valueID == CSSValueWebkitInlineFlex)
1293 EDisplay display = static_cast<EDisplay>(m_value.valueID - CSSValueInline);
1294 ASSERT(display >= INLINE && display <= NONE);
1298 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EEmptyCell e)
1299 : CSSValue(PrimitiveClass)
1301 m_primitiveUnitType = CSS_VALUE_ID;
1304 m_value.valueID = CSSValueShow;
1307 m_value.valueID = CSSValueHide;
1312 template<> inline CSSPrimitiveValue::operator EEmptyCell() const
1314 ASSERT(isValueID());
1315 switch (m_value.valueID) {
1324 ASSERT_NOT_REACHED();
1328 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EJustifyContent e)
1329 : CSSValue(PrimitiveClass)
1331 m_primitiveUnitType = CSS_VALUE_ID;
1333 case JustifyFlexStart:
1334 m_value.valueID = CSSValueFlexStart;
1336 case JustifyFlexEnd:
1337 m_value.valueID = CSSValueFlexEnd;
1340 m_value.valueID = CSSValueCenter;
1342 case JustifySpaceBetween:
1343 m_value.valueID = CSSValueSpaceBetween;
1345 case JustifySpaceAround:
1346 m_value.valueID = CSSValueSpaceAround;
1351 template<> inline CSSPrimitiveValue::operator EJustifyContent() const
1353 ASSERT(isValueID());
1354 switch (m_value.valueID) {
1355 case CSSValueFlexStart:
1356 return JustifyFlexStart;
1357 case CSSValueFlexEnd:
1358 return JustifyFlexEnd;
1359 case CSSValueCenter:
1360 return JustifyCenter;
1361 case CSSValueSpaceBetween:
1362 return JustifySpaceBetween;
1363 case CSSValueSpaceAround:
1364 return JustifySpaceAround;
1369 ASSERT_NOT_REACHED();
1370 return JustifyFlexStart;
1373 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexDirection e)
1374 : CSSValue(PrimitiveClass)
1376 m_primitiveUnitType = CSS_VALUE_ID;
1379 m_value.valueID = CSSValueRow;
1381 case FlowRowReverse:
1382 m_value.valueID = CSSValueRowReverse;
1385 m_value.valueID = CSSValueColumn;
1387 case FlowColumnReverse:
1388 m_value.valueID = CSSValueColumnReverse;
1393 template<> inline CSSPrimitiveValue::operator EFlexDirection() const
1395 ASSERT(isValueID());
1396 switch (m_value.valueID) {
1399 case CSSValueRowReverse:
1400 return FlowRowReverse;
1401 case CSSValueColumn:
1403 case CSSValueColumnReverse:
1404 return FlowColumnReverse;
1409 ASSERT_NOT_REACHED();
1413 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignContent e)
1414 : CSSValue(PrimitiveClass)
1416 m_primitiveUnitType = CSS_VALUE_ID;
1418 case AlignContentFlexStart:
1419 m_value.valueID = CSSValueFlexStart;
1421 case AlignContentFlexEnd:
1422 m_value.valueID = CSSValueFlexEnd;
1424 case AlignContentCenter:
1425 m_value.valueID = CSSValueCenter;
1427 case AlignContentSpaceBetween:
1428 m_value.valueID = CSSValueSpaceBetween;
1430 case AlignContentSpaceAround:
1431 m_value.valueID = CSSValueSpaceAround;
1433 case AlignContentStretch:
1434 m_value.valueID = CSSValueStretch;
1439 template<> inline CSSPrimitiveValue::operator EAlignContent() const
1441 ASSERT(isValueID());
1442 switch (m_value.valueID) {
1443 case CSSValueFlexStart:
1444 return AlignContentFlexStart;
1445 case CSSValueFlexEnd:
1446 return AlignContentFlexEnd;
1447 case CSSValueCenter:
1448 return AlignContentCenter;
1449 case CSSValueSpaceBetween:
1450 return AlignContentSpaceBetween;
1451 case CSSValueSpaceAround:
1452 return AlignContentSpaceAround;
1453 case CSSValueStretch:
1454 return AlignContentStretch;
1459 ASSERT_NOT_REACHED();
1460 return AlignContentStretch;
1463 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexWrap e)
1464 : CSSValue(PrimitiveClass)
1466 m_primitiveUnitType = CSS_VALUE_ID;
1469 m_value.valueID = CSSValueNowrap;
1472 m_value.valueID = CSSValueWrap;
1474 case FlexWrapReverse:
1475 m_value.valueID = CSSValueWrapReverse;
1480 template<> inline CSSPrimitiveValue::operator EFlexWrap() const
1482 ASSERT(isValueID());
1483 switch (m_value.valueID) {
1484 case CSSValueNowrap:
1488 case CSSValueWrapReverse:
1489 return FlexWrapReverse;
1494 ASSERT_NOT_REACHED();
1498 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e)
1499 : CSSValue(PrimitiveClass)
1501 m_primitiveUnitType = CSS_VALUE_ID;
1504 m_value.valueID = CSSValueNone;
1507 m_value.valueID = CSSValueLeft;
1510 m_value.valueID = CSSValueRight;
1515 template<> inline CSSPrimitiveValue::operator EFloat() const
1517 ASSERT(isValueID());
1518 switch (m_value.valueID) {
1524 case CSSValueCenter: // Non-standard CSS value.
1530 ASSERT_NOT_REACHED();
1534 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineBreak e)
1535 : CSSValue(PrimitiveClass)
1537 m_primitiveUnitType = CSS_VALUE_ID;
1540 m_value.valueID = CSSValueAuto;
1542 case LineBreakLoose:
1543 m_value.valueID = CSSValueLoose;
1545 case LineBreakNormal:
1546 m_value.valueID = CSSValueNormal;
1548 case LineBreakStrict:
1549 m_value.valueID = CSSValueStrict;
1551 case LineBreakAfterWhiteSpace:
1552 m_value.valueID = CSSValueAfterWhiteSpace;
1557 template<> inline CSSPrimitiveValue::operator LineBreak() const
1559 ASSERT(isValueID());
1560 switch (m_value.valueID) {
1562 return LineBreakAuto;
1564 return LineBreakLoose;
1565 case CSSValueNormal:
1566 return LineBreakNormal;
1567 case CSSValueStrict:
1568 return LineBreakStrict;
1569 case CSSValueAfterWhiteSpace:
1570 return LineBreakAfterWhiteSpace;
1575 ASSERT_NOT_REACHED();
1576 return LineBreakAuto;
1579 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStylePosition e)
1580 : CSSValue(PrimitiveClass)
1582 m_primitiveUnitType = CSS_VALUE_ID;
1585 m_value.valueID = CSSValueOutside;
1588 m_value.valueID = CSSValueInside;
1593 template<> inline CSSPrimitiveValue::operator EListStylePosition() const
1595 ASSERT(isValueID());
1596 switch (m_value.valueID) {
1597 case CSSValueOutside:
1599 case CSSValueInside:
1605 ASSERT_NOT_REACHED();
1609 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStyleType e)
1610 : CSSValue(PrimitiveClass)
1612 m_primitiveUnitType = CSS_VALUE_ID;
1615 m_value.valueID = CSSValueAfar;
1618 m_value.valueID = CSSValueAmharic;
1620 case AmharicAbegede:
1621 m_value.valueID = CSSValueAmharicAbegede;
1624 m_value.valueID = CSSValueArabicIndic;
1627 m_value.valueID = CSSValueArmenian;
1630 m_value.valueID = CSSValueAsterisks;
1632 case BinaryListStyle:
1633 m_value.valueID = CSSValueBinary;
1636 m_value.valueID = CSSValueBengali;
1639 m_value.valueID = CSSValueCambodian;
1642 m_value.valueID = CSSValueCircle;
1644 case CjkEarthlyBranch:
1645 m_value.valueID = CSSValueCjkEarthlyBranch;
1647 case CjkHeavenlyStem:
1648 m_value.valueID = CSSValueCjkHeavenlyStem;
1650 case CJKIdeographic:
1651 m_value.valueID = CSSValueCjkIdeographic;
1653 case DecimalLeadingZero:
1654 m_value.valueID = CSSValueDecimalLeadingZero;
1656 case DecimalListStyle:
1657 m_value.valueID = CSSValueDecimal;
1660 m_value.valueID = CSSValueDevanagari;
1663 m_value.valueID = CSSValueDisc;
1666 m_value.valueID = CSSValueEthiopic;
1668 case EthiopicAbegede:
1669 m_value.valueID = CSSValueEthiopicAbegede;
1671 case EthiopicAbegedeAmEt:
1672 m_value.valueID = CSSValueEthiopicAbegedeAmEt;
1674 case EthiopicAbegedeGez:
1675 m_value.valueID = CSSValueEthiopicAbegedeGez;
1677 case EthiopicAbegedeTiEr:
1678 m_value.valueID = CSSValueEthiopicAbegedeTiEr;
1680 case EthiopicAbegedeTiEt:
1681 m_value.valueID = CSSValueEthiopicAbegedeTiEt;
1683 case EthiopicHalehameAaEr:
1684 m_value.valueID = CSSValueEthiopicHalehameAaEr;
1686 case EthiopicHalehameAaEt:
1687 m_value.valueID = CSSValueEthiopicHalehameAaEt;
1689 case EthiopicHalehameAmEt:
1690 m_value.valueID = CSSValueEthiopicHalehameAmEt;
1692 case EthiopicHalehameGez:
1693 m_value.valueID = CSSValueEthiopicHalehameGez;
1695 case EthiopicHalehameOmEt:
1696 m_value.valueID = CSSValueEthiopicHalehameOmEt;
1698 case EthiopicHalehameSidEt:
1699 m_value.valueID = CSSValueEthiopicHalehameSidEt;
1701 case EthiopicHalehameSoEt:
1702 m_value.valueID = CSSValueEthiopicHalehameSoEt;
1704 case EthiopicHalehameTiEr:
1705 m_value.valueID = CSSValueEthiopicHalehameTiEr;
1707 case EthiopicHalehameTiEt:
1708 m_value.valueID = CSSValueEthiopicHalehameTiEt;
1710 case EthiopicHalehameTig:
1711 m_value.valueID = CSSValueEthiopicHalehameTig;
1714 m_value.valueID = CSSValueFootnotes;
1717 m_value.valueID = CSSValueGeorgian;
1720 m_value.valueID = CSSValueGujarati;
1723 m_value.valueID = CSSValueGurmukhi;
1726 m_value.valueID = CSSValueHangul;
1728 case HangulConsonant:
1729 m_value.valueID = CSSValueHangulConsonant;
1732 m_value.valueID = CSSValueHebrew;
1735 m_value.valueID = CSSValueHiragana;
1738 m_value.valueID = CSSValueHiraganaIroha;
1741 m_value.valueID = CSSValueKannada;
1744 m_value.valueID = CSSValueKatakana;
1747 m_value.valueID = CSSValueKatakanaIroha;
1750 m_value.valueID = CSSValueKhmer;
1753 m_value.valueID = CSSValueLao;
1756 m_value.valueID = CSSValueLowerAlpha;
1759 m_value.valueID = CSSValueLowerArmenian;
1762 m_value.valueID = CSSValueLowerGreek;
1764 case LowerHexadecimal:
1765 m_value.valueID = CSSValueLowerHexadecimal;
1768 m_value.valueID = CSSValueLowerLatin;
1770 case LowerNorwegian:
1771 m_value.valueID = CSSValueLowerNorwegian;
1774 m_value.valueID = CSSValueLowerRoman;
1777 m_value.valueID = CSSValueMalayalam;
1780 m_value.valueID = CSSValueMongolian;
1783 m_value.valueID = CSSValueMyanmar;
1786 m_value.valueID = CSSValueNone;
1789 m_value.valueID = CSSValueOctal;
1792 m_value.valueID = CSSValueOriya;
1795 m_value.valueID = CSSValueOromo;
1798 m_value.valueID = CSSValuePersian;
1801 m_value.valueID = CSSValueSidama;
1804 m_value.valueID = CSSValueSomali;
1807 m_value.valueID = CSSValueSquare;
1810 m_value.valueID = CSSValueTelugu;
1813 m_value.valueID = CSSValueThai;
1816 m_value.valueID = CSSValueTibetan;
1819 m_value.valueID = CSSValueTigre;
1822 m_value.valueID = CSSValueTigrinyaEr;
1824 case TigrinyaErAbegede:
1825 m_value.valueID = CSSValueTigrinyaErAbegede;
1828 m_value.valueID = CSSValueTigrinyaEt;
1830 case TigrinyaEtAbegede:
1831 m_value.valueID = CSSValueTigrinyaEtAbegede;
1834 m_value.valueID = CSSValueUpperAlpha;
1837 m_value.valueID = CSSValueUpperArmenian;
1840 m_value.valueID = CSSValueUpperGreek;
1842 case UpperHexadecimal:
1843 m_value.valueID = CSSValueUpperHexadecimal;
1846 m_value.valueID = CSSValueUpperLatin;
1848 case UpperNorwegian:
1849 m_value.valueID = CSSValueUpperNorwegian;
1852 m_value.valueID = CSSValueUpperRoman;
1855 m_value.valueID = CSSValueUrdu;
1860 template<> inline CSSPrimitiveValue::operator EListStyleType() const
1862 ASSERT(isValueID());
1863 switch (m_value.valueID) {
1865 return NoneListStyle;
1867 return static_cast<EListStyleType>(m_value.valueID - CSSValueDisc);
1871 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarginCollapse e)
1872 : CSSValue(PrimitiveClass)
1874 m_primitiveUnitType = CSS_VALUE_ID;
1877 m_value.valueID = CSSValueCollapse;
1880 m_value.valueID = CSSValueSeparate;
1883 m_value.valueID = CSSValueDiscard;
1888 template<> inline CSSPrimitiveValue::operator EMarginCollapse() const
1890 ASSERT(isValueID());
1891 switch (m_value.valueID) {
1892 case CSSValueCollapse:
1894 case CSSValueSeparate:
1896 case CSSValueDiscard:
1902 ASSERT_NOT_REACHED();
1906 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeBehavior e)
1907 : CSSValue(PrimitiveClass)
1909 m_primitiveUnitType = CSS_VALUE_ID;
1912 m_value.valueID = CSSValueNone;
1915 m_value.valueID = CSSValueScroll;
1918 m_value.valueID = CSSValueSlide;
1921 m_value.valueID = CSSValueAlternate;
1926 template<> inline CSSPrimitiveValue::operator EMarqueeBehavior() const
1928 ASSERT(isValueID());
1929 switch (m_value.valueID) {
1932 case CSSValueScroll:
1936 case CSSValueAlternate:
1942 ASSERT_NOT_REACHED();
1946 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeDirection e)
1947 : CSSValue(PrimitiveClass)
1949 m_primitiveUnitType = CSS_VALUE_ID;
1952 m_value.valueID = CSSValueForwards;
1955 m_value.valueID = CSSValueBackwards;
1958 m_value.valueID = CSSValueAuto;
1961 m_value.valueID = CSSValueUp;
1964 m_value.valueID = CSSValueDown;
1967 m_value.valueID = CSSValueLeft;
1970 m_value.valueID = CSSValueRight;
1975 template<> inline CSSPrimitiveValue::operator EMarqueeDirection() const
1977 ASSERT(isValueID());
1978 switch (m_value.valueID) {
1979 case CSSValueForwards:
1981 case CSSValueBackwards:
1986 case CSSValueUp: // We don't support vertical languages, so AHEAD just maps to UP.
1988 case CSSValueReverse:
1989 case CSSValueDown: // REVERSE just maps to DOWN, since we don't do vertical text.
1999 ASSERT_NOT_REACHED();
2003 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e)
2004 : CSSValue(PrimitiveClass)
2006 m_primitiveUnitType = CSS_VALUE_ID;
2009 m_value.valueID = CSSValueVisible;
2012 m_value.valueID = CSSValueHidden;
2015 m_value.valueID = CSSValueScroll;
2018 m_value.valueID = CSSValueAuto;
2021 m_value.valueID = CSSValueOverlay;
2024 m_value.valueID = CSSValueWebkitPagedX;
2027 m_value.valueID = CSSValueWebkitPagedY;
2032 template<> inline CSSPrimitiveValue::operator EOverflow() const
2034 ASSERT(isValueID());
2035 switch (m_value.valueID) {
2036 case CSSValueVisible:
2038 case CSSValueHidden:
2040 case CSSValueScroll:
2044 case CSSValueOverlay:
2046 case CSSValueWebkitPagedX:
2048 case CSSValueWebkitPagedY:
2054 ASSERT_NOT_REACHED();
2058 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPageBreak e)
2059 : CSSValue(PrimitiveClass)
2061 m_primitiveUnitType = CSS_VALUE_ID;
2064 m_value.valueID = CSSValueAuto;
2067 m_value.valueID = CSSValueAlways;
2070 m_value.valueID = CSSValueAvoid;
2075 template<> inline CSSPrimitiveValue::operator EPageBreak() const
2077 ASSERT(isValueID());
2078 switch (m_value.valueID) {
2083 case CSSValueAlways:
2084 return PBALWAYS; // CSS2.1: "Conforming user agents may map left/right to always."
2091 ASSERT_NOT_REACHED();
2095 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPosition e)
2096 : CSSValue(PrimitiveClass)
2098 m_primitiveUnitType = CSS_VALUE_ID;
2100 case StaticPosition:
2101 m_value.valueID = CSSValueStatic;
2103 case RelativePosition:
2104 m_value.valueID = CSSValueRelative;
2106 case AbsolutePosition:
2107 m_value.valueID = CSSValueAbsolute;
2110 m_value.valueID = CSSValueFixed;
2115 template<> inline CSSPrimitiveValue::operator EPosition() const
2117 ASSERT(isValueID());
2118 switch (m_value.valueID) {
2119 case CSSValueStatic:
2120 return StaticPosition;
2121 case CSSValueRelative:
2122 return RelativePosition;
2123 case CSSValueAbsolute:
2124 return AbsolutePosition;
2126 return FixedPosition;
2131 ASSERT_NOT_REACHED();
2132 return StaticPosition;
2135 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EResize e)
2136 : CSSValue(PrimitiveClass)
2138 m_primitiveUnitType = CSS_VALUE_ID;
2141 m_value.valueID = CSSValueBoth;
2143 case RESIZE_HORIZONTAL:
2144 m_value.valueID = CSSValueHorizontal;
2146 case RESIZE_VERTICAL:
2147 m_value.valueID = CSSValueVertical;
2150 m_value.valueID = CSSValueNone;
2155 template<> inline CSSPrimitiveValue::operator EResize() const
2157 ASSERT(isValueID());
2158 switch (m_value.valueID) {
2161 case CSSValueHorizontal:
2162 return RESIZE_HORIZONTAL;
2163 case CSSValueVertical:
2164 return RESIZE_VERTICAL;
2166 ASSERT_NOT_REACHED(); // Depends on settings, thus should be handled by the caller.
2174 ASSERT_NOT_REACHED();
2178 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETableLayout e)
2179 : CSSValue(PrimitiveClass)
2181 m_primitiveUnitType = CSS_VALUE_ID;
2184 m_value.valueID = CSSValueAuto;
2187 m_value.valueID = CSSValueFixed;
2192 template<> inline CSSPrimitiveValue::operator ETableLayout() const
2194 ASSERT(isValueID());
2195 switch (m_value.valueID) {
2204 ASSERT_NOT_REACHED();
2208 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAlign e)
2209 : CSSValue(PrimitiveClass)
2211 m_primitiveUnitType = CSS_VALUE_ID;
2214 m_value.valueID = CSSValueStart;
2217 m_value.valueID = CSSValueEnd;
2220 m_value.valueID = CSSValueLeft;
2223 m_value.valueID = CSSValueRight;
2226 m_value.valueID = CSSValueCenter;
2229 m_value.valueID = CSSValueJustify;
2232 m_value.valueID = CSSValueWebkitLeft;
2235 m_value.valueID = CSSValueWebkitRight;
2238 m_value.valueID = CSSValueWebkitCenter;
2243 template<> inline CSSPrimitiveValue::operator ETextAlign() const
2245 ASSERT(isValueID());
2246 switch (m_value.valueID) {
2247 case CSSValueWebkitAuto: // Legacy -webkit-auto. Eqiuvalent to start.
2253 return static_cast<ETextAlign>(m_value.valueID - CSSValueLeft);
2257 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextAlignLast e)
2258 : CSSValue(PrimitiveClass)
2260 m_primitiveUnitType = CSS_VALUE_ID;
2262 case TextAlignLastStart:
2263 m_value.valueID = CSSValueStart;
2265 case TextAlignLastEnd:
2266 m_value.valueID = CSSValueEnd;
2268 case TextAlignLastLeft:
2269 m_value.valueID = CSSValueLeft;
2271 case TextAlignLastRight:
2272 m_value.valueID = CSSValueRight;
2274 case TextAlignLastCenter:
2275 m_value.valueID = CSSValueCenter;
2277 case TextAlignLastJustify:
2278 m_value.valueID = CSSValueJustify;
2280 case TextAlignLastAuto:
2281 m_value.valueID = CSSValueAuto;
2286 template<> inline CSSPrimitiveValue::operator TextAlignLast() const
2288 ASSERT(isValueID());
2289 switch (m_value.valueID) {
2291 return TextAlignLastAuto;
2293 return TextAlignLastStart;
2295 return TextAlignLastEnd;
2297 return TextAlignLastLeft;
2299 return TextAlignLastRight;
2300 case CSSValueCenter:
2301 return TextAlignLastCenter;
2302 case CSSValueJustify:
2303 return TextAlignLastJustify;
2308 ASSERT_NOT_REACHED();
2309 return TextAlignLastAuto;
2312 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextJustify e)
2313 : CSSValue(PrimitiveClass)
2315 m_primitiveUnitType = CSS_VALUE_ID;
2317 case TextJustifyAuto:
2318 m_value.valueID = CSSValueAuto;
2320 case TextJustifyNone:
2321 m_value.valueID = CSSValueNone;
2323 case TextJustifyInterWord:
2324 m_value.valueID = CSSValueInterWord;
2326 case TextJustifyDistribute:
2327 m_value.valueID = CSSValueDistribute;
2332 template<> inline CSSPrimitiveValue::operator TextJustify() const
2334 switch (m_value.valueID) {
2336 return TextJustifyAuto;
2338 return TextJustifyNone;
2339 case CSSValueInterWord:
2340 return TextJustifyInterWord;
2341 case CSSValueDistribute:
2342 return TextJustifyDistribute;
2347 ASSERT_NOT_REACHED();
2348 return TextJustifyAuto;
2351 template<> inline CSSPrimitiveValue::operator TextDecoration() const
2353 ASSERT(isValueID());
2354 switch (m_value.valueID) {
2356 return TextDecorationNone;
2357 case CSSValueUnderline:
2358 return TextDecorationUnderline;
2359 case CSSValueOverline:
2360 return TextDecorationOverline;
2361 case CSSValueLineThrough:
2362 return TextDecorationLineThrough;
2364 return TextDecorationBlink;
2369 ASSERT_NOT_REACHED();
2370 return TextDecorationNone;
2373 template<> inline CSSPrimitiveValue::operator TextDecorationStyle() const
2375 ASSERT(isValueID());
2376 switch (m_value.valueID) {
2378 return TextDecorationStyleSolid;
2379 case CSSValueDouble:
2380 return TextDecorationStyleDouble;
2381 case CSSValueDotted:
2382 return TextDecorationStyleDotted;
2383 case CSSValueDashed:
2384 return TextDecorationStyleDashed;
2386 return TextDecorationStyleWavy;
2391 ASSERT_NOT_REACHED();
2392 return TextDecorationStyleSolid;
2395 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextUnderlinePosition e)
2396 : CSSValue(PrimitiveClass)
2398 m_primitiveUnitType = CSS_VALUE_ID;
2400 case TextUnderlinePositionAuto:
2401 m_value.valueID = CSSValueAuto;
2403 case TextUnderlinePositionUnder:
2404 m_value.valueID = CSSValueUnder;
2408 // FIXME: Implement support for 'under left' and 'under right' values.
2411 template<> inline CSSPrimitiveValue::operator TextUnderlinePosition() const
2413 ASSERT(isValueID());
2414 switch (m_value.valueID) {
2416 return TextUnderlinePositionAuto;
2418 return TextUnderlinePositionUnder;
2423 // FIXME: Implement support for 'under left' and 'under right' values.
2425 ASSERT_NOT_REACHED();
2426 return TextUnderlinePositionAuto;
2429 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextSecurity e)
2430 : CSSValue(PrimitiveClass)
2432 m_primitiveUnitType = CSS_VALUE_ID;
2435 m_value.valueID = CSSValueNone;
2438 m_value.valueID = CSSValueDisc;
2441 m_value.valueID = CSSValueCircle;
2444 m_value.valueID = CSSValueSquare;
2449 template<> inline CSSPrimitiveValue::operator ETextSecurity() const
2451 ASSERT(isValueID());
2452 switch (m_value.valueID) {
2457 case CSSValueCircle:
2459 case CSSValueSquare:
2465 ASSERT_NOT_REACHED();
2469 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextTransform e)
2470 : CSSValue(PrimitiveClass)
2472 m_primitiveUnitType = CSS_VALUE_ID;
2475 m_value.valueID = CSSValueCapitalize;
2478 m_value.valueID = CSSValueUppercase;
2481 m_value.valueID = CSSValueLowercase;
2484 m_value.valueID = CSSValueNone;
2489 template<> inline CSSPrimitiveValue::operator ETextTransform() const
2491 ASSERT(isValueID());
2492 switch (m_value.valueID) {
2493 case CSSValueCapitalize:
2495 case CSSValueUppercase:
2497 case CSSValueLowercase:
2505 ASSERT_NOT_REACHED();
2509 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUnicodeBidi e)
2510 : CSSValue(PrimitiveClass)
2512 m_primitiveUnitType = CSS_VALUE_ID;
2515 m_value.valueID = CSSValueNormal;
2518 m_value.valueID = CSSValueEmbed;
2521 m_value.valueID = CSSValueBidiOverride;
2524 m_value.valueID = CSSValueWebkitIsolate;
2526 case IsolateOverride:
2527 m_value.valueID = CSSValueWebkitIsolateOverride;
2530 m_value.valueID = CSSValueWebkitPlaintext;
2535 template<> inline CSSPrimitiveValue::operator EUnicodeBidi() const
2537 ASSERT(isValueID());
2538 switch (m_value.valueID) {
2539 case CSSValueNormal:
2543 case CSSValueBidiOverride:
2545 case CSSValueWebkitIsolate:
2547 case CSSValueWebkitIsolateOverride:
2548 return IsolateOverride;
2549 case CSSValueWebkitPlaintext:
2555 ASSERT_NOT_REACHED();
2559 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserDrag e)
2560 : CSSValue(PrimitiveClass)
2562 m_primitiveUnitType = CSS_VALUE_ID;
2565 m_value.valueID = CSSValueAuto;
2568 m_value.valueID = CSSValueNone;
2571 m_value.valueID = CSSValueElement;
2578 template<> inline CSSPrimitiveValue::operator EUserDrag() const
2580 ASSERT(isValueID());
2581 switch (m_value.valueID) {
2586 case CSSValueElement:
2587 return DRAG_ELEMENT;
2592 ASSERT_NOT_REACHED();
2596 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserModify e)
2597 : CSSValue(PrimitiveClass)
2599 m_primitiveUnitType = CSS_VALUE_ID;
2602 m_value.valueID = CSSValueReadOnly;
2605 m_value.valueID = CSSValueReadWrite;
2607 case READ_WRITE_PLAINTEXT_ONLY:
2608 m_value.valueID = CSSValueReadWritePlaintextOnly;
2613 template<> inline CSSPrimitiveValue::operator EUserModify() const
2615 ASSERT(isValueID());
2616 switch (m_value.valueID) {
2617 case CSSValueReadOnly:
2619 case CSSValueReadWrite:
2621 case CSSValueReadWritePlaintextOnly:
2622 return READ_WRITE_PLAINTEXT_ONLY;
2627 ASSERT_NOT_REACHED();
2631 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserSelect e)
2632 : CSSValue(PrimitiveClass)
2634 m_primitiveUnitType = CSS_VALUE_ID;
2637 m_value.valueID = CSSValueNone;
2640 m_value.valueID = CSSValueText;
2643 m_value.valueID = CSSValueAll;
2648 template<> inline CSSPrimitiveValue::operator EUserSelect() const
2650 ASSERT(isValueID());
2651 switch (m_value.valueID) {
2664 ASSERT_NOT_REACHED();
2668 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVerticalAlign a)
2669 : CSSValue(PrimitiveClass)
2671 m_primitiveUnitType = CSS_VALUE_ID;
2674 m_value.valueID = CSSValueTop;
2677 m_value.valueID = CSSValueBottom;
2680 m_value.valueID = CSSValueMiddle;
2683 m_value.valueID = CSSValueBaseline;
2686 m_value.valueID = CSSValueTextBottom;
2689 m_value.valueID = CSSValueTextTop;
2692 m_value.valueID = CSSValueSub;
2695 m_value.valueID = CSSValueSuper;
2697 case BASELINE_MIDDLE:
2698 m_value.valueID = CSSValueWebkitBaselineMiddle;
2701 m_value.valueID = CSSValueInvalid;
2705 template<> inline CSSPrimitiveValue::operator EVerticalAlign() const
2707 ASSERT(isValueID());
2708 switch (m_value.valueID) {
2711 case CSSValueBottom:
2713 case CSSValueMiddle:
2715 case CSSValueBaseline:
2717 case CSSValueTextBottom:
2719 case CSSValueTextTop:
2725 case CSSValueWebkitBaselineMiddle:
2726 return BASELINE_MIDDLE;
2731 ASSERT_NOT_REACHED();
2735 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVisibility e)
2736 : CSSValue(PrimitiveClass)
2738 m_primitiveUnitType = CSS_VALUE_ID;
2741 m_value.valueID = CSSValueVisible;
2744 m_value.valueID = CSSValueHidden;
2747 m_value.valueID = CSSValueCollapse;
2752 template<> inline CSSPrimitiveValue::operator EVisibility() const
2754 ASSERT(isValueID());
2755 switch (m_value.valueID) {
2756 case CSSValueHidden:
2758 case CSSValueVisible:
2760 case CSSValueCollapse:
2766 ASSERT_NOT_REACHED();
2770 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWhiteSpace e)
2771 : CSSValue(PrimitiveClass)
2773 m_primitiveUnitType = CSS_VALUE_ID;
2776 m_value.valueID = CSSValueNormal;
2779 m_value.valueID = CSSValuePre;
2782 m_value.valueID = CSSValuePreWrap;
2785 m_value.valueID = CSSValuePreLine;
2788 m_value.valueID = CSSValueNowrap;
2791 m_value.valueID = CSSValueWebkitNowrap;
2796 template<> inline CSSPrimitiveValue::operator EWhiteSpace() const
2798 ASSERT(isValueID());
2799 switch (m_value.valueID) {
2800 case CSSValueWebkitNowrap:
2801 return KHTML_NOWRAP;
2802 case CSSValueNowrap:
2806 case CSSValuePreWrap:
2808 case CSSValuePreLine:
2810 case CSSValueNormal:
2816 ASSERT_NOT_REACHED();
2820 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordBreak e)
2821 : CSSValue(PrimitiveClass)
2823 m_primitiveUnitType = CSS_VALUE_ID;
2825 case NormalWordBreak:
2826 m_value.valueID = CSSValueNormal;
2828 case BreakAllWordBreak:
2829 m_value.valueID = CSSValueBreakAll;
2831 case BreakWordBreak:
2832 m_value.valueID = CSSValueBreakWord;
2837 template<> inline CSSPrimitiveValue::operator EWordBreak() const
2839 ASSERT(isValueID());
2840 switch (m_value.valueID) {
2841 case CSSValueBreakAll:
2842 return BreakAllWordBreak;
2843 case CSSValueBreakWord:
2844 return BreakWordBreak;
2845 case CSSValueNormal:
2846 return NormalWordBreak;
2851 ASSERT_NOT_REACHED();
2852 return NormalWordBreak;
2855 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflowWrap e)
2856 : CSSValue(PrimitiveClass)
2858 m_primitiveUnitType = CSS_VALUE_ID;
2860 case NormalOverflowWrap:
2861 m_value.valueID = CSSValueNormal;
2863 case BreakOverflowWrap:
2864 m_value.valueID = CSSValueBreakWord;
2869 template<> inline CSSPrimitiveValue::operator EOverflowWrap() const
2871 ASSERT(isValueID());
2872 switch (m_value.valueID) {
2873 case CSSValueBreakWord:
2874 return BreakOverflowWrap;
2875 case CSSValueNormal:
2876 return NormalOverflowWrap;
2881 ASSERT_NOT_REACHED();
2882 return NormalOverflowWrap;
2885 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextDirection e)
2886 : CSSValue(PrimitiveClass)
2888 m_primitiveUnitType = CSS_VALUE_ID;
2891 m_value.valueID = CSSValueLtr;
2894 m_value.valueID = CSSValueRtl;
2899 template<> inline CSSPrimitiveValue::operator TextDirection() const
2901 ASSERT(isValueID());
2902 switch (m_value.valueID) {
2911 ASSERT_NOT_REACHED();
2915 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WritingMode e)
2916 : CSSValue(PrimitiveClass)
2918 m_primitiveUnitType = CSS_VALUE_ID;
2920 case TopToBottomWritingMode:
2921 m_value.valueID = CSSValueHorizontalTb;
2923 case RightToLeftWritingMode:
2924 m_value.valueID = CSSValueVerticalRl;
2926 case LeftToRightWritingMode:
2927 m_value.valueID = CSSValueVerticalLr;
2929 case BottomToTopWritingMode:
2930 m_value.valueID = CSSValueHorizontalBt;
2935 template<> inline CSSPrimitiveValue::operator WritingMode() const
2937 ASSERT(isValueID());
2938 switch (m_value.valueID) {
2939 case CSSValueHorizontalTb:
2940 return TopToBottomWritingMode;
2941 case CSSValueVerticalRl:
2942 return RightToLeftWritingMode;
2943 case CSSValueVerticalLr:
2944 return LeftToRightWritingMode;
2945 case CSSValueHorizontalBt:
2946 return BottomToTopWritingMode;
2951 ASSERT_NOT_REACHED();
2952 return TopToBottomWritingMode;
2955 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextCombine e)
2956 : CSSValue(PrimitiveClass)
2958 m_primitiveUnitType = CSS_VALUE_ID;
2960 case TextCombineNone:
2961 m_value.valueID = CSSValueNone;
2963 case TextCombineHorizontal:
2964 m_value.valueID = CSSValueHorizontal;
2969 template<> inline CSSPrimitiveValue::operator TextCombine() const
2971 ASSERT(isValueID());
2972 switch (m_value.valueID) {
2974 return TextCombineNone;
2975 case CSSValueHorizontal:
2976 return TextCombineHorizontal;
2981 ASSERT_NOT_REACHED();
2982 return TextCombineNone;
2985 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(RubyPosition position)
2986 : CSSValue(PrimitiveClass)
2988 m_primitiveUnitType = CSS_VALUE_ID;
2990 case RubyPositionBefore:
2991 m_value.valueID = CSSValueBefore;
2993 case RubyPositionAfter:
2994 m_value.valueID = CSSValueAfter;
2999 template<> inline CSSPrimitiveValue::operator RubyPosition() const
3001 ASSERT(isValueID());
3002 switch (m_value.valueID) {
3003 case CSSValueBefore:
3004 return RubyPositionBefore;
3006 return RubyPositionAfter;
3011 ASSERT_NOT_REACHED();
3012 return RubyPositionBefore;
3015 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisPosition position)
3016 : CSSValue(PrimitiveClass)
3018 m_primitiveUnitType = CSS_VALUE_ID;
3020 case TextEmphasisPositionOver:
3021 m_value.valueID = CSSValueOver;
3023 case TextEmphasisPositionUnder:
3024 m_value.valueID = CSSValueUnder;
3029 template<> inline CSSPrimitiveValue::operator TextEmphasisPosition() const
3031 ASSERT(isValueID());
3032 switch (m_value.valueID) {
3034 return TextEmphasisPositionOver;
3036 return TextEmphasisPositionUnder;
3041 ASSERT_NOT_REACHED();
3042 return TextEmphasisPositionOver;
3045 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOverflow overflow)
3046 : CSSValue(PrimitiveClass)
3048 m_primitiveUnitType = CSS_VALUE_ID;
3050 case TextOverflowClip:
3051 m_value.valueID = CSSValueClip;
3053 case TextOverflowEllipsis:
3054 m_value.valueID = CSSValueEllipsis;
3059 template<> inline CSSPrimitiveValue::operator TextOverflow() const
3061 ASSERT(isValueID());
3062 switch (m_value.valueID) {
3064 return TextOverflowClip;
3065 case CSSValueEllipsis:
3066 return TextOverflowEllipsis;
3071 ASSERT_NOT_REACHED();
3072 return TextOverflowClip;
3075 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisFill fill)
3076 : CSSValue(PrimitiveClass)
3078 m_primitiveUnitType = CSS_VALUE_ID;
3080 case TextEmphasisFillFilled:
3081 m_value.valueID = CSSValueFilled;
3083 case TextEmphasisFillOpen:
3084 m_value.valueID = CSSValueOpen;
3089 template<> inline CSSPrimitiveValue::operator TextEmphasisFill() const
3091 ASSERT(isValueID());
3092 switch (m_value.valueID) {
3093 case CSSValueFilled:
3094 return TextEmphasisFillFilled;
3096 return TextEmphasisFillOpen;
3101 ASSERT_NOT_REACHED();
3102 return TextEmphasisFillFilled;
3105 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisMark mark)
3106 : CSSValue(PrimitiveClass)
3108 m_primitiveUnitType = CSS_VALUE_ID;
3110 case TextEmphasisMarkDot:
3111 m_value.valueID = CSSValueDot;
3113 case TextEmphasisMarkCircle:
3114 m_value.valueID = CSSValueCircle;
3116 case TextEmphasisMarkDoubleCircle:
3117 m_value.valueID = CSSValueDoubleCircle;
3119 case TextEmphasisMarkTriangle:
3120 m_value.valueID = CSSValueTriangle;
3122 case TextEmphasisMarkSesame:
3123 m_value.valueID = CSSValueSesame;
3125 case TextEmphasisMarkNone:
3126 case TextEmphasisMarkAuto:
3127 case TextEmphasisMarkCustom:
3128 ASSERT_NOT_REACHED();
3129 m_value.valueID = CSSValueNone;
3134 template<> inline CSSPrimitiveValue::operator TextEmphasisMark() const
3136 ASSERT(isValueID());
3137 switch (m_value.valueID) {
3139 return TextEmphasisMarkNone;
3141 return TextEmphasisMarkDot;
3142 case CSSValueCircle:
3143 return TextEmphasisMarkCircle;
3144 case CSSValueDoubleCircle:
3145 return TextEmphasisMarkDoubleCircle;
3146 case CSSValueTriangle:
3147 return TextEmphasisMarkTriangle;
3148 case CSSValueSesame:
3149 return TextEmphasisMarkSesame;
3154 ASSERT_NOT_REACHED();
3155 return TextEmphasisMarkNone;
3158 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOrientation e)
3159 : CSSValue(PrimitiveClass)
3161 m_primitiveUnitType = CSS_VALUE_ID;
3163 case TextOrientationSideways:
3164 m_value.valueID = CSSValueSideways;
3166 case TextOrientationSidewaysRight:
3167 m_value.valueID = CSSValueSidewaysRight;
3169 case TextOrientationVerticalRight:
3170 m_value.valueID = CSSValueVerticalRight;
3172 case TextOrientationUpright:
3173 m_value.valueID = CSSValueUpright;
3178 template<> inline CSSPrimitiveValue::operator TextOrientation() const
3180 ASSERT(isValueID());
3181 switch (m_value.valueID) {
3182 case CSSValueSideways:
3183 return TextOrientationSideways;
3184 case CSSValueSidewaysRight:
3185 return TextOrientationSidewaysRight;
3186 case CSSValueVerticalRight:
3187 return TextOrientationVerticalRight;
3188 case CSSValueUpright:
3189 return TextOrientationUpright;
3194 ASSERT_NOT_REACHED();
3195 return TextOrientationVerticalRight;
3198 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPointerEvents e)
3199 : CSSValue(PrimitiveClass)
3201 m_primitiveUnitType = CSS_VALUE_ID;
3204 m_value.valueID = CSSValueNone;
3207 m_value.valueID = CSSValueStroke;
3210 m_value.valueID = CSSValueFill;
3213 m_value.valueID = CSSValuePainted;
3216 m_value.valueID = CSSValueVisible;
3218 case PE_VISIBLE_STROKE:
3219 m_value.valueID = CSSValueVisiblestroke;
3221 case PE_VISIBLE_FILL:
3222 m_value.valueID = CSSValueVisiblefill;
3224 case PE_VISIBLE_PAINTED:
3225 m_value.valueID = CSSValueVisiblepainted;
3228 m_value.valueID = CSSValueAuto;
3231 m_value.valueID = CSSValueAll;
3233 case PE_BOUNDINGBOX:
3234 m_value.valueID = CSSValueBoundingBox;
3239 template<> inline CSSPrimitiveValue::operator EPointerEvents() const
3241 ASSERT(isValueID());
3242 switch (m_value.valueID) {
3249 case CSSValueVisiblepainted:
3250 return PE_VISIBLE_PAINTED;
3251 case CSSValueVisiblefill:
3252 return PE_VISIBLE_FILL;
3253 case CSSValueVisiblestroke:
3254 return PE_VISIBLE_STROKE;
3255 case CSSValueVisible:
3257 case CSSValuePainted:
3261 case CSSValueStroke:
3263 case CSSValueBoundingBox:
3264 return PE_BOUNDINGBOX;
3269 ASSERT_NOT_REACHED();
3273 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontDescription::Kerning kerning)
3274 : CSSValue(PrimitiveClass)
3276 m_primitiveUnitType = CSS_VALUE_ID;
3278 case FontDescription::AutoKerning:
3279 m_value.valueID = CSSValueAuto;
3281 case FontDescription::NormalKerning:
3282 m_value.valueID = CSSValueNormal;
3284 case FontDescription::NoneKerning:
3285 m_value.valueID = CSSValueNone;
3289 ASSERT_NOT_REACHED();
3290 m_value.valueID = CSSValueAuto;
3293 template<> inline CSSPrimitiveValue::operator FontDescription::Kerning() const
3295 ASSERT(isValueID());
3296 switch (m_value.valueID) {
3298 return FontDescription::AutoKerning;
3299 case CSSValueNormal:
3300 return FontDescription::NormalKerning;
3302 return FontDescription::NoneKerning;
3307 ASSERT_NOT_REACHED();
3308 return FontDescription::AutoKerning;
3311 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ObjectFit fit)
3312 : CSSValue(PrimitiveClass)
3314 m_primitiveUnitType = CSS_VALUE_ID;
3317 m_value.valueID = CSSValueFill;
3319 case ObjectFitContain:
3320 m_value.valueID = CSSValueContain;
3322 case ObjectFitCover:
3323 m_value.valueID = CSSValueCover;
3326 m_value.valueID = CSSValueNone;
3328 case ObjectFitScaleDown:
3329 m_value.valueID = CSSValueScaleDown;
3334 template<> inline CSSPrimitiveValue::operator ObjectFit() const
3336 switch (m_value.valueID) {
3338 return ObjectFitFill;
3339 case CSSValueContain:
3340 return ObjectFitContain;
3342 return ObjectFitCover;
3344 return ObjectFitNone;
3345 case CSSValueScaleDown:
3346 return ObjectFitScaleDown;
3348 ASSERT_NOT_REACHED();
3349 return ObjectFitFill;
3353 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillSizeType fillSize)
3354 : CSSValue(PrimitiveClass)
3356 m_primitiveUnitType = CSS_VALUE_ID;
3359 m_value.valueID = CSSValueContain;
3362 m_value.valueID = CSSValueCover;
3365 m_value.valueID = CSSValueNone;
3369 ASSERT_NOT_REACHED();
3373 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmoothingMode smoothing)
3374 : CSSValue(PrimitiveClass)
3376 m_primitiveUnitType = CSS_VALUE_ID;
3377 switch (smoothing) {
3379 m_value.valueID = CSSValueAuto;
3382 m_value.valueID = CSSValueNone;
3385 m_value.valueID = CSSValueAntialiased;
3387 case SubpixelAntialiased:
3388 m_value.valueID = CSSValueSubpixelAntialiased;
3392 ASSERT_NOT_REACHED();
3393 m_value.valueID = CSSValueAuto;
3396 template<> inline CSSPrimitiveValue::operator FontSmoothingMode() const
3398 ASSERT(isValueID());
3399 switch (m_value.valueID) {
3401 return AutoSmoothing;
3404 case CSSValueAntialiased:
3406 case CSSValueSubpixelAntialiased:
3407 return SubpixelAntialiased;
3412 ASSERT_NOT_REACHED();
3413 return AutoSmoothing;
3416 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontWeight weight)
3417 : CSSValue(PrimitiveClass)
3419 m_primitiveUnitType = CSS_VALUE_ID;
3422 m_value.valueID = CSSValue900;
3425 m_value.valueID = CSSValue800;
3428 m_value.valueID = CSSValueBold;
3431 m_value.valueID = CSSValue600;
3434 m_value.valueID = CSSValue500;
3437 m_value.valueID = CSSValueNormal;
3440 m_value.valueID = CSSValue300;
3443 m_value.valueID = CSSValue200;
3446 m_value.valueID = CSSValue100;
3450 ASSERT_NOT_REACHED();
3451 m_value.valueID = CSSValueNormal;
3454 template<> inline CSSPrimitiveValue::operator FontWeight() const
3456 ASSERT(isValueID());
3457 switch (m_value.valueID) {
3459 return FontWeightBold;
3460 case CSSValueNormal:
3461 return FontWeightNormal;
3463 return FontWeight900;
3465 return FontWeight800;
3467 return FontWeight700;
3469 return FontWeight600;
3471 return FontWeight500;
3473 return FontWeight400;
3475 return FontWeight300;
3477 return FontWeight200;
3479 return FontWeight100;
3484 ASSERT_NOT_REACHED();
3485 return FontWeightNormal;
3488 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontStyle italic)
3489 : CSSValue(PrimitiveClass)
3491 m_primitiveUnitType = CSS_VALUE_ID;
3493 case FontStyleNormal:
3494 m_value.valueID = CSSValueNormal;
3496 case FontStyleItalic:
3497 m_value.valueID = CSSValueItalic;
3501 ASSERT_NOT_REACHED();
3502 m_value.valueID = CSSValueNormal;
3505 template<> inline CSSPrimitiveValue::operator FontStyle() const
3507 ASSERT(isValueID());
3508 switch (m_value.valueID) {
3509 case CSSValueOblique:
3510 // FIXME: oblique is the same as italic for the moment...
3511 case CSSValueItalic:
3512 return FontStyleItalic;
3513 case CSSValueNormal:
3514 return FontStyleNormal;
3518 ASSERT_NOT_REACHED();
3519 return FontStyleNormal;
3522 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontStretch stretch)
3523 : CSSValue(PrimitiveClass)
3525 m_primitiveUnitType = CSS_VALUE_ID;
3527 case FontStretchUltraCondensed:
3528 m_value.valueID = CSSValueUltraCondensed;
3530 case FontStretchExtraCondensed:
3531 m_value.valueID = CSSValueExtraCondensed;
3533 case FontStretchCondensed:
3534 m_value.valueID = CSSValueCondensed;
3536 case FontStretchSemiCondensed:
3537 m_value.valueID = CSSValueSemiCondensed;
3539 case FontStretchNormal:
3540 m_value.valueID = CSSValueNormal;
3542 case FontStretchSemiExpanded:
3543 m_value.valueID = CSSValueSemiExpanded;
3545 case FontStretchExpanded:
3546 m_value.valueID = CSSValueExpanded;
3548 case FontStretchExtraExpanded:
3549 m_value.valueID = CSSValueExtraExpanded;
3551 case FontStretchUltraExpanded:
3552 m_value.valueID = CSSValueUltraExpanded;
3556 ASSERT_NOT_REACHED();
3557 m_value.valueID = CSSValueNormal;
3560 template<> inline CSSPrimitiveValue::operator FontStretch() const
3562 ASSERT(isValueID());
3563 switch (m_value.valueID) {
3564 case CSSValueUltraCondensed:
3565 return FontStretchUltraCondensed;
3566 case CSSValueExtraCondensed:
3567 return FontStretchExtraCondensed;
3568 case CSSValueCondensed:
3569 return FontStretchCondensed;
3570 case CSSValueSemiCondensed:
3571 return FontStretchSemiCondensed;
3572 case CSSValueNormal:
3573 return FontStretchNormal;
3574 case CSSValueSemiExpanded:
3575 return FontStretchSemiExpanded;
3576 case CSSValueExpanded:
3577 return FontStretchExpanded;
3578 case CSSValueExtraExpanded:
3579 return FontStretchExtraExpanded;
3580 case CSSValueUltraExpanded:
3581 return FontStretchUltraExpanded;
3586 ASSERT_NOT_REACHED();
3587 return FontStretchNormal;
3590 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontVariant smallCaps)
3591 : CSSValue(PrimitiveClass)
3593 m_primitiveUnitType = CSS_VALUE_ID;
3594 switch (smallCaps) {
3595 case FontVariantNormal:
3596 m_value.valueID = CSSValueNormal;
3598 case FontVariantSmallCaps:
3599 m_value.valueID = CSSValueSmallCaps;
3603 ASSERT_NOT_REACHED();
3604 m_value.valueID = CSSValueNormal;
3607 template<> inline CSSPrimitiveValue::operator FontVariant() const
3609 ASSERT(isValueID());
3610 switch (m_value.valueID) {
3611 case CSSValueSmallCaps:
3612 return FontVariantSmallCaps;
3613 case CSSValueNormal:
3614 return FontVariantNormal;
3618 ASSERT_NOT_REACHED();
3619 return FontVariantNormal;
3622 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextRenderingMode e)
3623 : CSSValue(PrimitiveClass)
3625 m_primitiveUnitType = CSS_VALUE_ID;
3627 case AutoTextRendering:
3628 m_value.valueID = CSSValueAuto;
3631 m_value.valueID = CSSValueOptimizespeed;
3633 case OptimizeLegibility:
3634 m_value.valueID = CSSValueOptimizelegibility;
3636 case GeometricPrecision:
3637 m_value.valueID = CSSValueGeometricprecision;
3642 template<> inline CSSPrimitiveValue::operator TextRenderingMode() const
3644 ASSERT(isValueID());
3645 switch (m_value.valueID) {
3647 return AutoTextRendering;
3648 case CSSValueOptimizespeed:
3649 return OptimizeSpeed;
3650 case CSSValueOptimizelegibility:
3651 return OptimizeLegibility;
3652 case CSSValueGeometricprecision:
3653 return GeometricPrecision;
3658 ASSERT_NOT_REACHED();
3659 return AutoTextRendering;
3662 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ESpeak e)
3663 : CSSValue(PrimitiveClass)
3665 m_primitiveUnitType = CSS_VALUE_ID;
3668 m_value.valueID = CSSValueNone;
3671 m_value.valueID = CSSValueNormal;
3674 m_value.valueID = CSSValueSpellOut;
3677 m_value.valueID = CSSValueDigits;
3679 case SpeakLiteralPunctuation:
3680 m_value.valueID = CSSValueLiteralPunctuation;
3682 case SpeakNoPunctuation:
3683 m_value.valueID = CSSValueNoPunctuation;
3688 template<> inline CSSPrimitiveValue::operator Order() const
3690 ASSERT(isValueID());
3691 switch (m_value.valueID) {
3692 case CSSValueLogical:
3693 return LogicalOrder;
3694 case CSSValueVisual:
3700 ASSERT_NOT_REACHED();
3701 return LogicalOrder;
3704 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Order e)
3705 : CSSValue(PrimitiveClass)
3707 m_primitiveUnitType = CSS_VALUE_ID;
3710 m_value.valueID = CSSValueLogical;
3713 m_value.valueID = CSSValueVisual;
3718 template<> inline CSSPrimitiveValue::operator ESpeak() const
3720 ASSERT(isValueID());
3721 switch (m_value.valueID) {
3724 case CSSValueNormal:
3726 case CSSValueSpellOut:
3727 return SpeakSpellOut;
3728 case CSSValueDigits:
3730 case CSSValueLiteralPunctuation:
3731 return SpeakLiteralPunctuation;
3732 case CSSValueNoPunctuation:
3733 return SpeakNoPunctuation;
3738 ASSERT_NOT_REACHED();
3742 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(blink::WebBlendMode blendMode)
3743 : CSSValue(PrimitiveClass)
3745 m_primitiveUnitType = CSS_VALUE_ID;
3746 switch (blendMode) {
3747 case blink::WebBlendModeNormal:
3748 m_value.valueID = CSSValueNormal;
3750 case blink::WebBlendModeMultiply:
3751 m_value.valueID = CSSValueMultiply;
3753 case blink::WebBlendModeScreen:
3754 m_value.valueID = CSSValueScreen;
3756 case blink::WebBlendModeOverlay:
3757 m_value.valueID = CSSValueOverlay;
3759 case blink::WebBlendModeDarken:
3760 m_value.valueID = CSSValueDarken;
3762 case blink::WebBlendModeLighten:
3763 m_value.valueID = CSSValueLighten;
3765 case blink::WebBlendModeColorDodge:
3766 m_value.valueID = CSSValueColorDodge;
3768 case blink::WebBlendModeColorBurn:
3769 m_value.valueID = CSSValueColorBurn;
3771 case blink::WebBlendModeHardLight:
3772 m_value.valueID = CSSValueHardLight;
3774 case blink::WebBlendModeSoftLight:
3775 m_value.valueID = CSSValueSoftLight;
3777 case blink::WebBlendModeDifference:
3778 m_value.valueID = CSSValueDifference;
3780 case blink::WebBlendModeExclusion:
3781 m_value.valueID = CSSValueExclusion;
3783 case blink::WebBlendModeHue:
3784 m_value.valueID = CSSValueHue;
3786 case blink::WebBlendModeSaturation:
3787 m_value.valueID = CSSValueSaturation;
3789 case blink::WebBlendModeColor:
3790 m_value.valueID = CSSValueColor;
3792 case blink::WebBlendModeLuminosity:
3793 m_value.valueID = CSSValueLuminosity;
3798 template<> inline CSSPrimitiveValue::operator blink::WebBlendMode() const
3800 ASSERT(isValueID());
3801 switch (m_value.valueID) {
3802 case CSSValueNormal:
3803 return blink::WebBlendModeNormal;
3804 case CSSValueMultiply:
3805 return blink::WebBlendModeMultiply;
3806 case CSSValueScreen:
3807 return blink::WebBlendModeScreen;
3808 case CSSValueOverlay:
3809 return blink::WebBlendModeOverlay;
3810 case CSSValueDarken:
3811 return blink::WebBlendModeDarken;
3812 case CSSValueLighten:
3813 return blink::WebBlendModeLighten;
3814 case CSSValueColorDodge:
3815 return blink::WebBlendModeColorDodge;
3816 case CSSValueColorBurn:
3817 return blink::WebBlendModeColorBurn;
3818 case CSSValueHardLight:
3819 return blink::WebBlendModeHardLight;
3820 case CSSValueSoftLight:
3821 return blink::WebBlendModeSoftLight;
3822 case CSSValueDifference:
3823 return blink::WebBlendModeDifference;
3824 case CSSValueExclusion:
3825 return blink::WebBlendModeExclusion;
3827 return blink::WebBlendModeHue;
3828 case CSSValueSaturation:
3829 return blink::WebBlendModeSaturation;
3831 return blink::WebBlendModeColor;
3832 case CSSValueLuminosity:
3833 return blink::WebBlendModeLuminosity;
3838 ASSERT_NOT_REACHED();
3839 return blink::WebBlendModeNormal;
3842 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineCap e)
3843 : CSSValue(PrimitiveClass)
3845 m_primitiveUnitType = CSS_VALUE_ID;
3848 m_value.valueID = CSSValueButt;
3851 m_value.valueID = CSSValueRound;
3854 m_value.valueID = CSSValueSquare;
3859 template<> inline CSSPrimitiveValue::operator LineCap() const
3861 ASSERT(isValueID());
3862 switch (m_value.valueID) {
3867 case CSSValueSquare:
3873 ASSERT_NOT_REACHED();
3877 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineJoin e)
3878 : CSSValue(PrimitiveClass)
3880 m_primitiveUnitType = CSS_VALUE_ID;
3883 m_value.valueID = CSSValueMiter;
3886 m_value.valueID = CSSValueRound;
3889 m_value.valueID = CSSValueBevel;
3894 template<> inline CSSPrimitiveValue::operator LineJoin() const
3896 ASSERT(isValueID());
3897 switch (m_value.valueID) {
3908 ASSERT_NOT_REACHED();
3912 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WindRule e)
3913 : CSSValue(PrimitiveClass)
3915 m_primitiveUnitType = CSS_VALUE_ID;
3918 m_value.valueID = CSSValueNonzero;
3921 m_value.valueID = CSSValueEvenodd;
3926 template<> inline CSSPrimitiveValue::operator WindRule() const
3928 ASSERT(isValueID());
3929 switch (m_value.valueID) {
3930 case CSSValueNonzero:
3931 return RULE_NONZERO;
3932 case CSSValueEvenodd:
3933 return RULE_EVENODD;
3938 ASSERT_NOT_REACHED();
3939 return RULE_NONZERO;
3943 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignmentBaseline e)
3944 : CSSValue(PrimitiveClass)
3946 m_primitiveUnitType = CSS_VALUE_ID;
3949 m_value.valueID = CSSValueAuto;
3952 m_value.valueID = CSSValueBaseline;
3954 case AB_BEFORE_EDGE:
3955 m_value.valueID = CSSValueBeforeEdge;
3957 case AB_TEXT_BEFORE_EDGE:
3958 m_value.valueID = CSSValueTextBeforeEdge;
3961 m_value.valueID = CSSValueMiddle;
3964 m_value.valueID = CSSValueCentral;
3967 m_value.valueID = CSSValueAfterEdge;
3969 case AB_TEXT_AFTER_EDGE:
3970 m_value.valueID = CSSValueTextAfterEdge;
3972 case AB_IDEOGRAPHIC:
3973 m_value.valueID = CSSValueIdeographic;
3976 m_value.valueID = CSSValueAlphabetic;
3979 m_value.valueID = CSSValueHanging;
3981 case AB_MATHEMATICAL:
3982 m_value.valueID = CSSValueMathematical;
3987 template<> inline CSSPrimitiveValue::operator EAlignmentBaseline() const
3989 ASSERT(isValueID());
3990 switch (m_value.valueID) {
3993 case CSSValueBaseline:
3995 case CSSValueBeforeEdge:
3996 return AB_BEFORE_EDGE;
3997 case CSSValueTextBeforeEdge:
3998 return AB_TEXT_BEFORE_EDGE;
3999 case CSSValueMiddle:
4001 case CSSValueCentral:
4003 case CSSValueAfterEdge:
4004 return AB_AFTER_EDGE;
4005 case CSSValueTextAfterEdge:
4006 return AB_TEXT_AFTER_EDGE;
4007 case CSSValueIdeographic:
4008 return AB_IDEOGRAPHIC;
4009 case CSSValueAlphabetic:
4010 return AB_ALPHABETIC;
4011 case CSSValueHanging:
4013 case CSSValueMathematical:
4014 return AB_MATHEMATICAL;
4019 ASSERT_NOT_REACHED();
4023 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderCollapse e)
4024 : CSSValue(PrimitiveClass)
4026 m_primitiveUnitType = CSS_VALUE_ID;
4029 m_value.valueID = CSSValueSeparate;
4032 m_value.valueID = CSSValueCollapse;
4037 template<> inline CSSPrimitiveValue::operator EBorderCollapse() const
4039 ASSERT(isValueID());
4040 switch (m_value.valueID) {
4041 case CSSValueSeparate:
4043 case CSSValueCollapse:
4049 ASSERT_NOT_REACHED();
4053 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderFit e)
4054 : CSSValue(PrimitiveClass)
4056 m_primitiveUnitType = CSS_VALUE_ID;
4058 case BorderFitBorder:
4059 m_value.valueID = CSSValueBorder;
4061 case BorderFitLines:
4062 m_value.valueID = CSSValueLines;
4067 template<> inline CSSPrimitiveValue::operator EBorderFit() const
4069 ASSERT(isValueID());
4070 switch (m_value.valueID) {
4071 case CSSValueBorder:
4072 return BorderFitBorder;
4074 return BorderFitLines;
4079 ASSERT_NOT_REACHED();
4080 return BorderFitLines;
4083 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering e)
4084 : CSSValue(PrimitiveClass)
4086 m_primitiveUnitType = CSS_VALUE_ID;
4088 case ImageRenderingAuto:
4089 m_value.valueID = CSSValueAuto;
4091 case ImageRenderingOptimizeSpeed:
4092 m_value.valueID = CSSValueOptimizespeed;
4094 case ImageRenderingOptimizeQuality:
4095 m_value.valueID = CSSValueOptimizequality;
4097 case ImageRenderingPixelated:
4098 m_value.valueID = CSSValuePixelated;
4100 case ImageRenderingOptimizeContrast:
4101 m_value.valueID = CSSValueWebkitOptimizeContrast;
4106 template<> inline CSSPrimitiveValue::operator EImageRendering() const
4108 ASSERT(isValueID());
4109 switch (m_value.valueID) {
4111 return ImageRenderingAuto;
4112 case CSSValueOptimizespeed:
4113 return ImageRenderingOptimizeSpeed;
4114 case CSSValueOptimizequality:
4115 return ImageRenderingOptimizeQuality;
4116 case CSSValuePixelated:
4117 return ImageRenderingPixelated;
4118 case CSSValueWebkitOptimizeContrast:
4119 return ImageRenderingOptimizeContrast;
4124 ASSERT_NOT_REACHED();
4125 return ImageRenderingAuto;
4128 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETransformStyle3D e)
4129 : CSSValue(PrimitiveClass)
4131 m_primitiveUnitType = CSS_VALUE_ID;
4133 case TransformStyle3DFlat:
4134 m_value.valueID = CSSValueFlat;
4136 case TransformStyle3DPreserve3D:
4137 m_value.valueID = CSSValuePreserve3d;
4142 template<> inline CSSPrimitiveValue::operator ETransformStyle3D() const
4144 ASSERT(isValueID());
4145 switch (m_value.valueID) {
4147 return TransformStyle3DFlat;
4148 case CSSValuePreserve3d:
4149 return TransformStyle3DPreserve3D;
4154 ASSERT_NOT_REACHED();
4155 return TransformStyle3DFlat;
4158 enum LengthConversion {
4160 FixedConversion = 1 << 0,
4161 AutoConversion = 1 << 1,
4162 PercentConversion = 1 << 2,
4165 template<int supported> Length CSSPrimitiveValue::convertToLength(const CSSToLengthConversionData& conversionData)
4167 if ((supported & FixedConversion) && isLength())
4168 return computeLength<Length>(conversionData);
4169 if ((supported & PercentConversion) && isPercentage())
4170 return Length(getDoubleValue(), Percent);
4171 if ((supported & AutoConversion) && getValueID() == CSSValueAuto)
4172 return Length(Auto);
4173 if ((supported & FixedConversion) && (supported & PercentConversion) && isCalculated())
4174 return Length(cssCalcValue()->toCalcValue(conversionData));
4175 ASSERT_NOT_REACHED();
4176 return Length(0, Fixed);
4179 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBufferedRendering e)
4180 : CSSValue(PrimitiveClass)
4182 m_primitiveUnitType = CSS_VALUE_ID;
4185 m_value.valueID = CSSValueAuto;
4188 m_value.valueID = CSSValueDynamic;
4191 m_value.valueID = CSSValueStatic;
4196 template<> inline CSSPrimitiveValue::operator EBufferedRendering() const
4198 ASSERT(isValueID());
4199 switch (m_value.valueID) {
4202 case CSSValueDynamic:
4204 case CSSValueStatic:
4210 ASSERT_NOT_REACHED();
4214 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorInterpolation e)
4215 : CSSValue(PrimitiveClass)
4217 m_primitiveUnitType = CSS_VALUE_ID;
4220 m_value.valueID = CSSValueAuto;
4223 m_value.valueID = CSSValueSrgb;
4226 m_value.valueID = CSSValueLinearrgb;
4231 template<> inline CSSPrimitiveValue::operator EColorInterpolation() const
4233 ASSERT(isValueID());
4234 switch (m_value.valueID) {
4237 case CSSValueLinearrgb:
4238 return CI_LINEARRGB;
4245 ASSERT_NOT_REACHED();
4249 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorRendering e)
4250 : CSSValue(PrimitiveClass)
4252 m_primitiveUnitType = CSS_VALUE_ID;
4255 m_value.valueID = CSSValueAuto;
4257 case CR_OPTIMIZESPEED:
4258 m_value.valueID = CSSValueOptimizespeed;
4260 case CR_OPTIMIZEQUALITY:
4261 m_value.valueID = CSSValueOptimizequality;
4266 template<> inline CSSPrimitiveValue::operator EColorRendering() const
4268 ASSERT(isValueID());
4269 switch (m_value.valueID) {
4270 case CSSValueOptimizespeed:
4271 return CR_OPTIMIZESPEED;
4272 case CSSValueOptimizequality:
4273 return CR_OPTIMIZEQUALITY;
4280 ASSERT_NOT_REACHED();
4284 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDominantBaseline e)
4285 : CSSValue(PrimitiveClass)
4287 m_primitiveUnitType = CSS_VALUE_ID;
4290 m_value.valueID = CSSValueAuto;
4293 m_value.valueID = CSSValueUseScript;
4296 m_value.valueID = CSSValueNoChange;
4299 m_value.valueID = CSSValueResetSize;
4302 m_value.valueID = CSSValueCentral;
4305 m_value.valueID = CSSValueMiddle;
4307 case DB_TEXT_BEFORE_EDGE:
4308 m_value.valueID = CSSValueTextBeforeEdge;
4310 case DB_TEXT_AFTER_EDGE:
4311 m_value.valueID = CSSValueTextAfterEdge;
4313 case DB_IDEOGRAPHIC:
4314 m_value.valueID = CSSValueIdeographic;
4317 m_value.valueID = CSSValueAlphabetic;
4320 m_value.valueID = CSSValueHanging;
4322 case DB_MATHEMATICAL:
4323 m_value.valueID = CSSValueMathematical;
4328 template<> inline CSSPrimitiveValue::operator EDominantBaseline() const
4330 ASSERT(isValueID());
4331 switch (m_value.valueID) {
4334 case CSSValueUseScript:
4335 return DB_USE_SCRIPT;
4336 case CSSValueNoChange:
4337 return DB_NO_CHANGE;
4338 case CSSValueResetSize:
4339 return DB_RESET_SIZE;
4340 case CSSValueIdeographic:
4341 return DB_IDEOGRAPHIC;
4342 case CSSValueAlphabetic:
4343 return DB_ALPHABETIC;
4344 case CSSValueHanging:
4346 case CSSValueMathematical:
4347 return DB_MATHEMATICAL;
4348 case CSSValueCentral:
4350 case CSSValueMiddle:
4352 case CSSValueTextAfterEdge:
4353 return DB_TEXT_AFTER_EDGE;
4354 case CSSValueTextBeforeEdge:
4355 return DB_TEXT_BEFORE_EDGE;
4360 ASSERT_NOT_REACHED();
4364 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EShapeRendering e)
4365 : CSSValue(PrimitiveClass)
4367 m_primitiveUnitType = CSS_VALUE_ID;
4370 m_value.valueID = CSSValueAuto;
4372 case SR_OPTIMIZESPEED:
4373 m_value.valueID = CSSValueOptimizespeed;
4376 m_value.valueID = CSSValueCrispedges;
4378 case SR_GEOMETRICPRECISION:
4379 m_value.valueID = CSSValueGeometricprecision;
4384 template<> inline CSSPrimitiveValue::operator EShapeRendering() const
4386 ASSERT(isValueID());
4387 switch (m_value.valueID) {
4390 case CSSValueOptimizespeed:
4391 return SR_OPTIMIZESPEED;
4392 case CSSValueCrispedges:
4393 return SR_CRISPEDGES;
4394 case CSSValueGeometricprecision:
4395 return SR_GEOMETRICPRECISION;
4400 ASSERT_NOT_REACHED();
4404 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAnchor e)
4405 : CSSValue(PrimitiveClass)
4407 m_primitiveUnitType = CSS_VALUE_ID;
4410 m_value.valueID = CSSValueStart;
4413 m_value.valueID = CSSValueMiddle;
4416 m_value.valueID = CSSValueEnd;
4421 template<> inline CSSPrimitiveValue::operator ETextAnchor() const
4423 ASSERT(isValueID());
4424 switch (m_value.valueID) {
4427 case CSSValueMiddle:
4435 ASSERT_NOT_REACHED();
4439 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(SVGWritingMode e)
4440 : CSSValue(PrimitiveClass)
4442 m_primitiveUnitType = CSS_VALUE_ID;
4445 m_value.valueID = CSSValueLrTb;
4448 m_value.valueID = CSSValueLr;
4451 m_value.valueID = CSSValueRlTb;
4454 m_value.valueID = CSSValueRl;
4457 m_value.valueID = CSSValueTbRl;
4460 m_value.valueID = CSSValueTb;
4465 template<> inline CSSPrimitiveValue::operator SVGWritingMode() const
4467 ASSERT(isValueID());
4468 switch (m_value.valueID) {
4485 ASSERT_NOT_REACHED();
4489 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVectorEffect e)
4490 : CSSValue(PrimitiveClass)
4492 m_primitiveUnitType = CSS_VALUE_ID;
4495 m_value.valueID = CSSValueNone;
4497 case VE_NON_SCALING_STROKE:
4498 m_value.valueID = CSSValueNonScalingStroke;
4503 template<> inline CSSPrimitiveValue::operator EVectorEffect() const
4505 ASSERT(isValueID());
4506 switch (m_value.valueID) {
4509 case CSSValueNonScalingStroke:
4510 return VE_NON_SCALING_STROKE;
4515 ASSERT_NOT_REACHED();
4519 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPaintOrderType e)
4520 : CSSValue(PrimitiveClass)
4522 m_primitiveUnitType = CSS_VALUE_ID;
4525 m_value.valueID = CSSValueFill;
4528 m_value.valueID = CSSValueStroke;
4531 m_value.valueID = CSSValueMarkers;
4534 ASSERT_NOT_REACHED();
4535 m_value.valueID = CSSValueFill;
4540 template<> inline CSSPrimitiveValue::operator EPaintOrderType() const
4542 ASSERT(isValueID());
4543 switch (m_value.valueID) {
4546 case CSSValueStroke:
4548 case CSSValueMarkers:
4554 ASSERT_NOT_REACHED();
4558 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMaskType e)
4559 : CSSValue(PrimitiveClass)
4561 m_primitiveUnitType = CSS_VALUE_ID;
4564 m_value.valueID = CSSValueLuminance;
4567 m_value.valueID = CSSValueAlpha;
4572 template<> inline CSSPrimitiveValue::operator EMaskType() const
4574 ASSERT(isValueID());
4575 switch (m_value.valueID) {
4576 case CSSValueLuminance:
4577 return MT_LUMINANCE;
4584 ASSERT_NOT_REACHED();
4585 return MT_LUMINANCE;
4588 template<> inline CSSPrimitiveValue::operator TouchAction() const
4590 ASSERT(isValueID());
4591 switch (m_value.valueID) {
4593 return TouchActionNone;
4595 return TouchActionAuto;
4597 return TouchActionPanX;
4599 return TouchActionPanY;
4600 case CSSValueManipulation:
4601 return TouchActionPanX | TouchActionPanY | TouchActionPinchZoom;
4606 ASSERT_NOT_REACHED();
4607 return TouchActionNone;
4610 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EIsolation i)
4611 : CSSValue(PrimitiveClass)
4613 m_primitiveUnitType = CSS_VALUE_ID;
4616 m_value.valueID = CSSValueAuto;
4618 case IsolationIsolate:
4619 m_value.valueID = CSSValueIsolate;
4624 template<> inline CSSPrimitiveValue::operator EIsolation() const
4626 ASSERT(isValueID());
4627 switch (m_value.valueID) {
4629 return IsolationAuto;
4630 case CSSValueIsolate:
4631 return IsolationIsolate;
4636 ASSERT_NOT_REACHED();
4637 return IsolationAuto;
4640 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TouchActionDelay t)
4641 : CSSValue(PrimitiveClass)
4643 m_primitiveUnitType = CSS_VALUE_ID;
4645 case TouchActionDelayNone:
4646 m_value.valueID = CSSValueNone;
4648 case TouchActionDelayScript:
4649 m_value.valueID = CSSValueScript;
4654 template<> inline CSSPrimitiveValue::operator TouchActionDelay() const
4656 switch (m_value.valueID) {
4658 return TouchActionDelayNone;
4659 case CSSValueScript:
4660 return TouchActionDelayScript;
4665 ASSERT_NOT_REACHED();
4666 return TouchActionDelayNone;
4669 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CSSBoxType cssBox)
4670 : CSSValue(PrimitiveClass)
4672 m_primitiveUnitType = CSS_VALUE_ID;
4675 m_value.valueID = CSSValueMarginBox;
4678 m_value.valueID = CSSValueBorderBox;
4681 m_value.valueID = CSSValuePaddingBox;
4684 m_value.valueID = CSSValueContentBox;
4687 // The missing box should convert to a null primitive value.
4688 ASSERT_NOT_REACHED();
4692 template<> inline CSSPrimitiveValue::operator CSSBoxType() const
4694 switch (getValueID()) {
4695 case CSSValueMarginBox:
4697 case CSSValueBorderBox:
4699 case CSSValuePaddingBox:
4701 case CSSValueContentBox:
4706 ASSERT_NOT_REACHED();
4710 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ItemPosition itemPosition)
4711 : CSSValue(PrimitiveClass)
4713 m_primitiveUnitType = CSS_VALUE_ID;
4714 switch (itemPosition) {
4715 case ItemPositionAuto:
4716 m_value.valueID = CSSValueAuto;
4718 case ItemPositionStretch:
4719 m_value.valueID = CSSValueStretch;
4721 case ItemPositionBaseline:
4722 m_value.valueID = CSSValueBaseline;
4724 case ItemPositionLastBaseline:
4725 m_value.valueID = CSSValueLastBaseline;
4727 case ItemPositionCenter:
4728 m_value.valueID = CSSValueCenter;
4730 case ItemPositionStart:
4731 m_value.valueID = CSSValueStart;
4733 case ItemPositionEnd:
4734 m_value.valueID = CSSValueEnd;
4736 case ItemPositionSelfStart:
4737 m_value.valueID = CSSValueSelfStart;
4739 case ItemPositionSelfEnd:
4740 m_value.valueID = CSSValueSelfEnd;
4742 case ItemPositionFlexStart:
4743 m_value.valueID = CSSValueFlexStart;
4745 case ItemPositionFlexEnd:
4746 m_value.valueID = CSSValueFlexEnd;
4748 case ItemPositionLeft:
4749 m_value.valueID = CSSValueLeft;
4751 case ItemPositionRight:
4752 m_value.valueID = CSSValueRight;
4757 template<> inline CSSPrimitiveValue::operator ItemPosition() const
4759 switch (m_value.valueID) {
4761 return ItemPositionAuto;
4762 case CSSValueStretch:
4763 return ItemPositionStretch;
4764 case CSSValueBaseline:
4765 return ItemPositionBaseline;
4766 case CSSValueLastBaseline:
4767 return ItemPositionLastBaseline;
4768 case CSSValueCenter:
4769 return ItemPositionCenter;
4771 return ItemPositionStart;
4773 return ItemPositionEnd;
4774 case CSSValueSelfStart:
4775 return ItemPositionSelfStart;
4776 case CSSValueSelfEnd:
4777 return ItemPositionSelfEnd;
4778 case CSSValueFlexStart:
4779 return ItemPositionFlexStart;
4780 case CSSValueFlexEnd:
4781 return ItemPositionFlexEnd;
4783 return ItemPositionLeft;
4785 return ItemPositionRight;
4789 ASSERT_NOT_REACHED();
4790 return ItemPositionAuto;
4793 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(OverflowAlignment overflowAlignment)
4794 : CSSValue(PrimitiveClass)
4796 m_primitiveUnitType = CSS_VALUE_ID;
4797 switch (overflowAlignment) {
4798 case OverflowAlignmentDefault:
4799 m_value.valueID = CSSValueDefault;
4801 case OverflowAlignmentTrue:
4802 m_value.valueID = CSSValueTrue;
4804 case OverflowAlignmentSafe:
4805 m_value.valueID = CSSValueSafe;
4810 template<> inline CSSPrimitiveValue::operator OverflowAlignment() const
4812 switch (m_value.valueID) {
4814 return OverflowAlignmentTrue;
4816 return OverflowAlignmentSafe;
4820 ASSERT_NOT_REACHED();
4821 return OverflowAlignmentTrue;
4824 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollBehavior behavior)
4825 : CSSValue(PrimitiveClass)
4827 m_primitiveUnitType = CSS_VALUE_ID;
4829 case ScrollBehaviorInstant:
4830 m_value.valueID = CSSValueInstant;
4832 case ScrollBehaviorSmooth:
4833 m_value.valueID = CSSValueSmooth;
4835 case ScrollBehaviorAuto:
4836 // Behavior 'auto' is only allowed in ScrollOptions arguments passed to
4837 // CSSOM scroll APIs.
4838 ASSERT_NOT_REACHED();
4842 template<> inline CSSPrimitiveValue::operator ScrollBehavior() const
4844 switch (getValueID()) {
4845 case CSSValueInstant:
4846 return ScrollBehaviorInstant;
4847 case CSSValueSmooth:
4848 return ScrollBehaviorSmooth;
4852 ASSERT_NOT_REACHED();
4853 return ScrollBehaviorInstant;