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 "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 MediaSliderPart:
453 m_value.valueID = CSSValueMediaSlider;
455 case MediaSliderThumbPart:
456 m_value.valueID = CSSValueMediaSliderthumb;
458 case MediaVolumeSliderContainerPart:
459 m_value.valueID = CSSValueMediaVolumeSliderContainer;
461 case MediaVolumeSliderPart:
462 m_value.valueID = CSSValueMediaVolumeSlider;
464 case MediaVolumeSliderThumbPart:
465 m_value.valueID = CSSValueMediaVolumeSliderthumb;
467 case MediaControlsBackgroundPart:
468 m_value.valueID = CSSValueMediaControlsBackground;
470 case MediaControlsFullscreenBackgroundPart:
471 m_value.valueID = CSSValueMediaControlsFullscreenBackground;
473 case MediaFullScreenVolumeSliderPart:
474 m_value.valueID = CSSValueMediaFullscreenVolumeSlider;
476 case MediaFullScreenVolumeSliderThumbPart:
477 m_value.valueID = CSSValueMediaFullscreenVolumeSliderThumb;
479 case MediaCurrentTimePart:
480 m_value.valueID = CSSValueMediaCurrentTimeDisplay;
482 case MediaTimeRemainingPart:
483 m_value.valueID = CSSValueMediaTimeRemainingDisplay;
486 m_value.valueID = CSSValueMenulist;
488 case MenulistButtonPart:
489 m_value.valueID = CSSValueMenulistButton;
491 case MenulistTextPart:
492 m_value.valueID = CSSValueMenulistText;
494 case MenulistTextFieldPart:
495 m_value.valueID = CSSValueMenulistTextfield;
498 m_value.valueID = CSSValueMeter;
500 case RelevancyLevelIndicatorPart:
501 m_value.valueID = CSSValueRelevancyLevelIndicator;
503 case ContinuousCapacityLevelIndicatorPart:
504 m_value.valueID = CSSValueContinuousCapacityLevelIndicator;
506 case DiscreteCapacityLevelIndicatorPart:
507 m_value.valueID = CSSValueDiscreteCapacityLevelIndicator;
509 case RatingLevelIndicatorPart:
510 m_value.valueID = CSSValueRatingLevelIndicator;
512 case ProgressBarPart:
513 m_value.valueID = CSSValueProgressBar;
515 case ProgressBarValuePart:
516 m_value.valueID = CSSValueProgressBarValue;
518 case SliderHorizontalPart:
519 m_value.valueID = CSSValueSliderHorizontal;
521 case SliderVerticalPart:
522 m_value.valueID = CSSValueSliderVertical;
524 case SliderThumbHorizontalPart:
525 m_value.valueID = CSSValueSliderthumbHorizontal;
527 case SliderThumbVerticalPart:
528 m_value.valueID = CSSValueSliderthumbVertical;
531 m_value.valueID = CSSValueCaret;
533 case SearchFieldPart:
534 m_value.valueID = CSSValueSearchfield;
536 case SearchFieldDecorationPart:
537 m_value.valueID = CSSValueSearchfieldDecoration;
539 case SearchFieldResultsDecorationPart:
540 m_value.valueID = CSSValueSearchfieldResultsDecoration;
542 case SearchFieldCancelButtonPart:
543 m_value.valueID = CSSValueSearchfieldCancelButton;
546 m_value.valueID = CSSValueTextfield;
549 m_value.valueID = CSSValueTextarea;
551 case CapsLockIndicatorPart:
552 m_value.valueID = CSSValueCapsLockIndicator;
557 template<> inline CSSPrimitiveValue::operator ControlPart() const
560 if (m_value.valueID == CSSValueNone)
561 return NoControlPart;
562 return ControlPart(m_value.valueID - CSSValueCheckbox + 1);
565 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBackfaceVisibility e)
566 : CSSValue(PrimitiveClass)
568 m_primitiveUnitType = CSS_VALUE_ID;
570 case BackfaceVisibilityVisible:
571 m_value.valueID = CSSValueVisible;
573 case BackfaceVisibilityHidden:
574 m_value.valueID = CSSValueHidden;
579 template<> inline CSSPrimitiveValue::operator EBackfaceVisibility() const
582 switch (m_value.valueID) {
583 case CSSValueVisible:
584 return BackfaceVisibilityVisible;
586 return BackfaceVisibilityHidden;
591 ASSERT_NOT_REACHED();
592 return BackfaceVisibilityHidden;
596 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillAttachment e)
597 : CSSValue(PrimitiveClass)
599 m_primitiveUnitType = CSS_VALUE_ID;
601 case ScrollBackgroundAttachment:
602 m_value.valueID = CSSValueScroll;
604 case LocalBackgroundAttachment:
605 m_value.valueID = CSSValueLocal;
607 case FixedBackgroundAttachment:
608 m_value.valueID = CSSValueFixed;
613 template<> inline CSSPrimitiveValue::operator EFillAttachment() const
616 switch (m_value.valueID) {
618 return ScrollBackgroundAttachment;
620 return LocalBackgroundAttachment;
622 return FixedBackgroundAttachment;
627 ASSERT_NOT_REACHED();
628 return ScrollBackgroundAttachment;
631 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillBox e)
632 : CSSValue(PrimitiveClass)
634 m_primitiveUnitType = CSS_VALUE_ID;
637 m_value.valueID = CSSValueBorderBox;
640 m_value.valueID = CSSValuePaddingBox;
643 m_value.valueID = CSSValueContentBox;
646 m_value.valueID = CSSValueText;
651 template<> inline CSSPrimitiveValue::operator EFillBox() const
654 switch (m_value.valueID) {
656 case CSSValueBorderBox:
657 return BorderFillBox;
658 case CSSValuePadding:
659 case CSSValuePaddingBox:
660 return PaddingFillBox;
661 case CSSValueContent:
662 case CSSValueContentBox:
663 return ContentFillBox;
665 case CSSValueWebkitText:
671 ASSERT_NOT_REACHED();
672 return BorderFillBox;
675 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillRepeat e)
676 : CSSValue(PrimitiveClass)
678 m_primitiveUnitType = CSS_VALUE_ID;
681 m_value.valueID = CSSValueRepeat;
684 m_value.valueID = CSSValueNoRepeat;
687 m_value.valueID = CSSValueRound;
690 m_value.valueID = CSSValueSpace;
695 template<> inline CSSPrimitiveValue::operator EFillRepeat() const
698 switch (m_value.valueID) {
701 case CSSValueNoRepeat:
711 ASSERT_NOT_REACHED();
715 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxPack e)
716 : CSSValue(PrimitiveClass)
718 m_primitiveUnitType = CSS_VALUE_ID;
721 m_value.valueID = CSSValueStart;
724 m_value.valueID = CSSValueCenter;
727 m_value.valueID = CSSValueEnd;
730 m_value.valueID = CSSValueJustify;
735 template<> inline CSSPrimitiveValue::operator EBoxPack() const
738 switch (m_value.valueID) {
745 case CSSValueJustify:
751 ASSERT_NOT_REACHED();
755 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxAlignment e)
756 : CSSValue(PrimitiveClass)
758 m_primitiveUnitType = CSS_VALUE_ID;
761 m_value.valueID = CSSValueStretch;
764 m_value.valueID = CSSValueStart;
767 m_value.valueID = CSSValueCenter;
770 m_value.valueID = CSSValueEnd;
773 m_value.valueID = CSSValueBaseline;
778 template<> inline CSSPrimitiveValue::operator EBoxAlignment() const
781 switch (m_value.valueID) {
782 case CSSValueStretch:
790 case CSSValueBaseline:
796 ASSERT_NOT_REACHED();
800 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDecorationBreak e)
801 : CSSValue(PrimitiveClass)
803 m_primitiveUnitType = CSS_VALUE_ID;
806 m_value.valueID = CSSValueSlice;
809 m_value.valueID = CSSValueClone;
814 template<> inline CSSPrimitiveValue::operator EBoxDecorationBreak() const
817 switch (m_value.valueID) {
826 ASSERT_NOT_REACHED();
830 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BackgroundEdgeOrigin e)
831 : CSSValue(PrimitiveClass)
833 m_primitiveUnitType = CSS_VALUE_ID;
836 m_value.valueID = CSSValueTop;
839 m_value.valueID = CSSValueRight;
842 m_value.valueID = CSSValueBottom;
845 m_value.valueID = CSSValueLeft;
850 template<> inline CSSPrimitiveValue::operator BackgroundEdgeOrigin() const
853 switch (m_value.valueID) {
866 ASSERT_NOT_REACHED();
870 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxSizing e)
871 : CSSValue(PrimitiveClass)
873 m_primitiveUnitType = CSS_VALUE_ID;
876 m_value.valueID = CSSValueBorderBox;
879 m_value.valueID = CSSValueContentBox;
884 template<> inline CSSPrimitiveValue::operator EBoxSizing() const
887 switch (m_value.valueID) {
888 case CSSValueBorderBox:
890 case CSSValueContentBox:
896 ASSERT_NOT_REACHED();
900 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDirection e)
901 : CSSValue(PrimitiveClass)
903 m_primitiveUnitType = CSS_VALUE_ID;
906 m_value.valueID = CSSValueNormal;
909 m_value.valueID = CSSValueReverse;
914 template<> inline CSSPrimitiveValue::operator EBoxDirection() const
917 switch (m_value.valueID) {
920 case CSSValueReverse:
926 ASSERT_NOT_REACHED();
930 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxLines e)
931 : CSSValue(PrimitiveClass)
933 m_primitiveUnitType = CSS_VALUE_ID;
936 m_value.valueID = CSSValueSingle;
939 m_value.valueID = CSSValueMultiple;
944 template<> inline CSSPrimitiveValue::operator EBoxLines() const
947 switch (m_value.valueID) {
950 case CSSValueMultiple:
956 ASSERT_NOT_REACHED();
960 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxOrient e)
961 : CSSValue(PrimitiveClass)
963 m_primitiveUnitType = CSS_VALUE_ID;
966 m_value.valueID = CSSValueHorizontal;
969 m_value.valueID = CSSValueVertical;
974 template<> inline CSSPrimitiveValue::operator EBoxOrient() const
977 switch (m_value.valueID) {
978 case CSSValueHorizontal:
979 case CSSValueInlineAxis:
981 case CSSValueVertical:
982 case CSSValueBlockAxis:
988 ASSERT_NOT_REACHED();
992 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECaptionSide e)
993 : CSSValue(PrimitiveClass)
995 m_primitiveUnitType = CSS_VALUE_ID;
998 m_value.valueID = CSSValueLeft;
1001 m_value.valueID = CSSValueRight;
1004 m_value.valueID = CSSValueTop;
1007 m_value.valueID = CSSValueBottom;
1012 template<> inline CSSPrimitiveValue::operator ECaptionSide() const
1014 ASSERT(isValueID());
1015 switch (m_value.valueID) {
1022 case CSSValueBottom:
1028 ASSERT_NOT_REACHED();
1032 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EClear e)
1033 : CSSValue(PrimitiveClass)
1035 m_primitiveUnitType = CSS_VALUE_ID;
1038 m_value.valueID = CSSValueNone;
1041 m_value.valueID = CSSValueLeft;
1044 m_value.valueID = CSSValueRight;
1047 m_value.valueID = CSSValueBoth;
1052 template<> inline CSSPrimitiveValue::operator EClear() const
1054 ASSERT(isValueID());
1055 switch (m_value.valueID) {
1068 ASSERT_NOT_REACHED();
1072 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECursor e)
1073 : CSSValue(PrimitiveClass)
1075 m_primitiveUnitType = CSS_VALUE_ID;
1078 m_value.valueID = CSSValueAuto;
1081 m_value.valueID = CSSValueCrosshair;
1083 case CURSOR_DEFAULT:
1084 m_value.valueID = CSSValueDefault;
1086 case CURSOR_POINTER:
1087 m_value.valueID = CSSValuePointer;
1090 m_value.valueID = CSSValueMove;
1093 m_value.valueID = CSSValueCell;
1095 case CURSOR_VERTICAL_TEXT:
1096 m_value.valueID = CSSValueVerticalText;
1098 case CURSOR_CONTEXT_MENU:
1099 m_value.valueID = CSSValueContextMenu;
1102 m_value.valueID = CSSValueAlias;
1105 m_value.valueID = CSSValueCopy;
1108 m_value.valueID = CSSValueNone;
1110 case CURSOR_PROGRESS:
1111 m_value.valueID = CSSValueProgress;
1113 case CURSOR_NO_DROP:
1114 m_value.valueID = CSSValueNoDrop;
1116 case CURSOR_NOT_ALLOWED:
1117 m_value.valueID = CSSValueNotAllowed;
1119 case CURSOR_WEBKIT_ZOOM_IN:
1120 m_value.valueID = CSSValueWebkitZoomIn;
1122 case CURSOR_WEBKIT_ZOOM_OUT:
1123 m_value.valueID = CSSValueWebkitZoomOut;
1125 case CURSOR_E_RESIZE:
1126 m_value.valueID = CSSValueEResize;
1128 case CURSOR_NE_RESIZE:
1129 m_value.valueID = CSSValueNeResize;
1131 case CURSOR_NW_RESIZE:
1132 m_value.valueID = CSSValueNwResize;
1134 case CURSOR_N_RESIZE:
1135 m_value.valueID = CSSValueNResize;
1137 case CURSOR_SE_RESIZE:
1138 m_value.valueID = CSSValueSeResize;
1140 case CURSOR_SW_RESIZE:
1141 m_value.valueID = CSSValueSwResize;
1143 case CURSOR_S_RESIZE:
1144 m_value.valueID = CSSValueSResize;
1146 case CURSOR_W_RESIZE:
1147 m_value.valueID = CSSValueWResize;
1149 case CURSOR_EW_RESIZE:
1150 m_value.valueID = CSSValueEwResize;
1152 case CURSOR_NS_RESIZE:
1153 m_value.valueID = CSSValueNsResize;
1155 case CURSOR_NESW_RESIZE:
1156 m_value.valueID = CSSValueNeswResize;
1158 case CURSOR_NWSE_RESIZE:
1159 m_value.valueID = CSSValueNwseResize;
1161 case CURSOR_COL_RESIZE:
1162 m_value.valueID = CSSValueColResize;
1164 case CURSOR_ROW_RESIZE:
1165 m_value.valueID = CSSValueRowResize;
1168 m_value.valueID = CSSValueText;
1171 m_value.valueID = CSSValueWait;
1174 m_value.valueID = CSSValueHelp;
1176 case CURSOR_ALL_SCROLL:
1177 m_value.valueID = CSSValueAllScroll;
1179 case CURSOR_WEBKIT_GRAB:
1180 m_value.valueID = CSSValueWebkitGrab;
1182 case CURSOR_WEBKIT_GRABBING:
1183 m_value.valueID = CSSValueWebkitGrabbing;
1188 template<> inline CSSPrimitiveValue::operator ECursor() const
1190 ASSERT(isValueID());
1191 if (m_value.valueID == CSSValueCopy)
1193 if (m_value.valueID == CSSValueNone)
1195 return static_cast<ECursor>(m_value.valueID - CSSValueAuto);
1198 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDisplay e)
1199 : CSSValue(PrimitiveClass)
1201 m_primitiveUnitType = CSS_VALUE_ID;
1204 m_value.valueID = CSSValueInline;
1207 m_value.valueID = CSSValueBlock;
1210 m_value.valueID = CSSValueListItem;
1213 m_value.valueID = CSSValueInlineBlock;
1216 m_value.valueID = CSSValueTable;
1219 m_value.valueID = CSSValueInlineTable;
1221 case TABLE_ROW_GROUP:
1222 m_value.valueID = CSSValueTableRowGroup;
1224 case TABLE_HEADER_GROUP:
1225 m_value.valueID = CSSValueTableHeaderGroup;
1227 case TABLE_FOOTER_GROUP:
1228 m_value.valueID = CSSValueTableFooterGroup;
1231 m_value.valueID = CSSValueTableRow;
1233 case TABLE_COLUMN_GROUP:
1234 m_value.valueID = CSSValueTableColumnGroup;
1237 m_value.valueID = CSSValueTableColumn;
1240 m_value.valueID = CSSValueTableCell;
1243 m_value.valueID = CSSValueTableCaption;
1246 m_value.valueID = CSSValueWebkitBox;
1249 m_value.valueID = CSSValueWebkitInlineBox;
1252 m_value.valueID = CSSValueFlex;
1255 m_value.valueID = CSSValueInlineFlex;
1258 m_value.valueID = CSSValueGrid;
1261 m_value.valueID = CSSValueInlineGrid;
1264 m_value.valueID = CSSValueNone;
1269 template<> inline CSSPrimitiveValue::operator EDisplay() const
1271 ASSERT(isValueID());
1272 if (m_value.valueID == CSSValueNone)
1275 if (m_value.valueID == CSSValueWebkitFlex)
1277 if (m_value.valueID == CSSValueWebkitInlineFlex)
1280 EDisplay display = static_cast<EDisplay>(m_value.valueID - CSSValueInline);
1281 ASSERT(display >= INLINE && display <= NONE);
1285 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EEmptyCell e)
1286 : CSSValue(PrimitiveClass)
1288 m_primitiveUnitType = CSS_VALUE_ID;
1291 m_value.valueID = CSSValueShow;
1294 m_value.valueID = CSSValueHide;
1299 template<> inline CSSPrimitiveValue::operator EEmptyCell() const
1301 ASSERT(isValueID());
1302 switch (m_value.valueID) {
1311 ASSERT_NOT_REACHED();
1315 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EJustifyContent e)
1316 : CSSValue(PrimitiveClass)
1318 m_primitiveUnitType = CSS_VALUE_ID;
1320 case JustifyFlexStart:
1321 m_value.valueID = CSSValueFlexStart;
1323 case JustifyFlexEnd:
1324 m_value.valueID = CSSValueFlexEnd;
1327 m_value.valueID = CSSValueCenter;
1329 case JustifySpaceBetween:
1330 m_value.valueID = CSSValueSpaceBetween;
1332 case JustifySpaceAround:
1333 m_value.valueID = CSSValueSpaceAround;
1338 template<> inline CSSPrimitiveValue::operator EJustifyContent() const
1340 ASSERT(isValueID());
1341 switch (m_value.valueID) {
1342 case CSSValueFlexStart:
1343 return JustifyFlexStart;
1344 case CSSValueFlexEnd:
1345 return JustifyFlexEnd;
1346 case CSSValueCenter:
1347 return JustifyCenter;
1348 case CSSValueSpaceBetween:
1349 return JustifySpaceBetween;
1350 case CSSValueSpaceAround:
1351 return JustifySpaceAround;
1356 ASSERT_NOT_REACHED();
1357 return JustifyFlexStart;
1360 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexDirection e)
1361 : CSSValue(PrimitiveClass)
1363 m_primitiveUnitType = CSS_VALUE_ID;
1366 m_value.valueID = CSSValueRow;
1368 case FlowRowReverse:
1369 m_value.valueID = CSSValueRowReverse;
1372 m_value.valueID = CSSValueColumn;
1374 case FlowColumnReverse:
1375 m_value.valueID = CSSValueColumnReverse;
1380 template<> inline CSSPrimitiveValue::operator EFlexDirection() const
1382 ASSERT(isValueID());
1383 switch (m_value.valueID) {
1386 case CSSValueRowReverse:
1387 return FlowRowReverse;
1388 case CSSValueColumn:
1390 case CSSValueColumnReverse:
1391 return FlowColumnReverse;
1396 ASSERT_NOT_REACHED();
1400 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignContent e)
1401 : CSSValue(PrimitiveClass)
1403 m_primitiveUnitType = CSS_VALUE_ID;
1405 case AlignContentFlexStart:
1406 m_value.valueID = CSSValueFlexStart;
1408 case AlignContentFlexEnd:
1409 m_value.valueID = CSSValueFlexEnd;
1411 case AlignContentCenter:
1412 m_value.valueID = CSSValueCenter;
1414 case AlignContentSpaceBetween:
1415 m_value.valueID = CSSValueSpaceBetween;
1417 case AlignContentSpaceAround:
1418 m_value.valueID = CSSValueSpaceAround;
1420 case AlignContentStretch:
1421 m_value.valueID = CSSValueStretch;
1426 template<> inline CSSPrimitiveValue::operator EAlignContent() const
1428 ASSERT(isValueID());
1429 switch (m_value.valueID) {
1430 case CSSValueFlexStart:
1431 return AlignContentFlexStart;
1432 case CSSValueFlexEnd:
1433 return AlignContentFlexEnd;
1434 case CSSValueCenter:
1435 return AlignContentCenter;
1436 case CSSValueSpaceBetween:
1437 return AlignContentSpaceBetween;
1438 case CSSValueSpaceAround:
1439 return AlignContentSpaceAround;
1440 case CSSValueStretch:
1441 return AlignContentStretch;
1446 ASSERT_NOT_REACHED();
1447 return AlignContentStretch;
1450 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexWrap e)
1451 : CSSValue(PrimitiveClass)
1453 m_primitiveUnitType = CSS_VALUE_ID;
1456 m_value.valueID = CSSValueNowrap;
1459 m_value.valueID = CSSValueWrap;
1461 case FlexWrapReverse:
1462 m_value.valueID = CSSValueWrapReverse;
1467 template<> inline CSSPrimitiveValue::operator EFlexWrap() const
1469 ASSERT(isValueID());
1470 switch (m_value.valueID) {
1471 case CSSValueNowrap:
1475 case CSSValueWrapReverse:
1476 return FlexWrapReverse;
1481 ASSERT_NOT_REACHED();
1485 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e)
1486 : CSSValue(PrimitiveClass)
1488 m_primitiveUnitType = CSS_VALUE_ID;
1491 m_value.valueID = CSSValueNone;
1494 m_value.valueID = CSSValueLeft;
1497 m_value.valueID = CSSValueRight;
1502 template<> inline CSSPrimitiveValue::operator EFloat() const
1504 ASSERT(isValueID());
1505 switch (m_value.valueID) {
1511 case CSSValueCenter: // Non-standard CSS value.
1517 ASSERT_NOT_REACHED();
1521 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineBreak e)
1522 : CSSValue(PrimitiveClass)
1524 m_primitiveUnitType = CSS_VALUE_ID;
1527 m_value.valueID = CSSValueAuto;
1529 case LineBreakLoose:
1530 m_value.valueID = CSSValueLoose;
1532 case LineBreakNormal:
1533 m_value.valueID = CSSValueNormal;
1535 case LineBreakStrict:
1536 m_value.valueID = CSSValueStrict;
1538 case LineBreakAfterWhiteSpace:
1539 m_value.valueID = CSSValueAfterWhiteSpace;
1544 template<> inline CSSPrimitiveValue::operator LineBreak() const
1546 ASSERT(isValueID());
1547 switch (m_value.valueID) {
1549 return LineBreakAuto;
1551 return LineBreakLoose;
1552 case CSSValueNormal:
1553 return LineBreakNormal;
1554 case CSSValueStrict:
1555 return LineBreakStrict;
1556 case CSSValueAfterWhiteSpace:
1557 return LineBreakAfterWhiteSpace;
1562 ASSERT_NOT_REACHED();
1563 return LineBreakAuto;
1566 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStylePosition e)
1567 : CSSValue(PrimitiveClass)
1569 m_primitiveUnitType = CSS_VALUE_ID;
1572 m_value.valueID = CSSValueOutside;
1575 m_value.valueID = CSSValueInside;
1580 template<> inline CSSPrimitiveValue::operator EListStylePosition() const
1582 ASSERT(isValueID());
1583 switch (m_value.valueID) {
1584 case CSSValueOutside:
1586 case CSSValueInside:
1592 ASSERT_NOT_REACHED();
1596 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStyleType e)
1597 : CSSValue(PrimitiveClass)
1599 m_primitiveUnitType = CSS_VALUE_ID;
1602 m_value.valueID = CSSValueAfar;
1605 m_value.valueID = CSSValueAmharic;
1607 case AmharicAbegede:
1608 m_value.valueID = CSSValueAmharicAbegede;
1611 m_value.valueID = CSSValueArabicIndic;
1614 m_value.valueID = CSSValueArmenian;
1617 m_value.valueID = CSSValueAsterisks;
1619 case BinaryListStyle:
1620 m_value.valueID = CSSValueBinary;
1623 m_value.valueID = CSSValueBengali;
1626 m_value.valueID = CSSValueCambodian;
1629 m_value.valueID = CSSValueCircle;
1631 case CjkEarthlyBranch:
1632 m_value.valueID = CSSValueCjkEarthlyBranch;
1634 case CjkHeavenlyStem:
1635 m_value.valueID = CSSValueCjkHeavenlyStem;
1637 case CJKIdeographic:
1638 m_value.valueID = CSSValueCjkIdeographic;
1640 case DecimalLeadingZero:
1641 m_value.valueID = CSSValueDecimalLeadingZero;
1643 case DecimalListStyle:
1644 m_value.valueID = CSSValueDecimal;
1647 m_value.valueID = CSSValueDevanagari;
1650 m_value.valueID = CSSValueDisc;
1653 m_value.valueID = CSSValueEthiopic;
1655 case EthiopicAbegede:
1656 m_value.valueID = CSSValueEthiopicAbegede;
1658 case EthiopicAbegedeAmEt:
1659 m_value.valueID = CSSValueEthiopicAbegedeAmEt;
1661 case EthiopicAbegedeGez:
1662 m_value.valueID = CSSValueEthiopicAbegedeGez;
1664 case EthiopicAbegedeTiEr:
1665 m_value.valueID = CSSValueEthiopicAbegedeTiEr;
1667 case EthiopicAbegedeTiEt:
1668 m_value.valueID = CSSValueEthiopicAbegedeTiEt;
1670 case EthiopicHalehameAaEr:
1671 m_value.valueID = CSSValueEthiopicHalehameAaEr;
1673 case EthiopicHalehameAaEt:
1674 m_value.valueID = CSSValueEthiopicHalehameAaEt;
1676 case EthiopicHalehameAmEt:
1677 m_value.valueID = CSSValueEthiopicHalehameAmEt;
1679 case EthiopicHalehameGez:
1680 m_value.valueID = CSSValueEthiopicHalehameGez;
1682 case EthiopicHalehameOmEt:
1683 m_value.valueID = CSSValueEthiopicHalehameOmEt;
1685 case EthiopicHalehameSidEt:
1686 m_value.valueID = CSSValueEthiopicHalehameSidEt;
1688 case EthiopicHalehameSoEt:
1689 m_value.valueID = CSSValueEthiopicHalehameSoEt;
1691 case EthiopicHalehameTiEr:
1692 m_value.valueID = CSSValueEthiopicHalehameTiEr;
1694 case EthiopicHalehameTiEt:
1695 m_value.valueID = CSSValueEthiopicHalehameTiEt;
1697 case EthiopicHalehameTig:
1698 m_value.valueID = CSSValueEthiopicHalehameTig;
1701 m_value.valueID = CSSValueFootnotes;
1704 m_value.valueID = CSSValueGeorgian;
1707 m_value.valueID = CSSValueGujarati;
1710 m_value.valueID = CSSValueGurmukhi;
1713 m_value.valueID = CSSValueHangul;
1715 case HangulConsonant:
1716 m_value.valueID = CSSValueHangulConsonant;
1719 m_value.valueID = CSSValueHebrew;
1722 m_value.valueID = CSSValueHiragana;
1725 m_value.valueID = CSSValueHiraganaIroha;
1728 m_value.valueID = CSSValueKannada;
1731 m_value.valueID = CSSValueKatakana;
1734 m_value.valueID = CSSValueKatakanaIroha;
1737 m_value.valueID = CSSValueKhmer;
1740 m_value.valueID = CSSValueLao;
1743 m_value.valueID = CSSValueLowerAlpha;
1746 m_value.valueID = CSSValueLowerArmenian;
1749 m_value.valueID = CSSValueLowerGreek;
1751 case LowerHexadecimal:
1752 m_value.valueID = CSSValueLowerHexadecimal;
1755 m_value.valueID = CSSValueLowerLatin;
1757 case LowerNorwegian:
1758 m_value.valueID = CSSValueLowerNorwegian;
1761 m_value.valueID = CSSValueLowerRoman;
1764 m_value.valueID = CSSValueMalayalam;
1767 m_value.valueID = CSSValueMongolian;
1770 m_value.valueID = CSSValueMyanmar;
1773 m_value.valueID = CSSValueNone;
1776 m_value.valueID = CSSValueOctal;
1779 m_value.valueID = CSSValueOriya;
1782 m_value.valueID = CSSValueOromo;
1785 m_value.valueID = CSSValuePersian;
1788 m_value.valueID = CSSValueSidama;
1791 m_value.valueID = CSSValueSomali;
1794 m_value.valueID = CSSValueSquare;
1797 m_value.valueID = CSSValueTelugu;
1800 m_value.valueID = CSSValueThai;
1803 m_value.valueID = CSSValueTibetan;
1806 m_value.valueID = CSSValueTigre;
1809 m_value.valueID = CSSValueTigrinyaEr;
1811 case TigrinyaErAbegede:
1812 m_value.valueID = CSSValueTigrinyaErAbegede;
1815 m_value.valueID = CSSValueTigrinyaEt;
1817 case TigrinyaEtAbegede:
1818 m_value.valueID = CSSValueTigrinyaEtAbegede;
1821 m_value.valueID = CSSValueUpperAlpha;
1824 m_value.valueID = CSSValueUpperArmenian;
1827 m_value.valueID = CSSValueUpperGreek;
1829 case UpperHexadecimal:
1830 m_value.valueID = CSSValueUpperHexadecimal;
1833 m_value.valueID = CSSValueUpperLatin;
1835 case UpperNorwegian:
1836 m_value.valueID = CSSValueUpperNorwegian;
1839 m_value.valueID = CSSValueUpperRoman;
1842 m_value.valueID = CSSValueUrdu;
1847 template<> inline CSSPrimitiveValue::operator EListStyleType() const
1849 ASSERT(isValueID());
1850 switch (m_value.valueID) {
1852 return NoneListStyle;
1854 return static_cast<EListStyleType>(m_value.valueID - CSSValueDisc);
1858 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarginCollapse e)
1859 : CSSValue(PrimitiveClass)
1861 m_primitiveUnitType = CSS_VALUE_ID;
1864 m_value.valueID = CSSValueCollapse;
1867 m_value.valueID = CSSValueSeparate;
1870 m_value.valueID = CSSValueDiscard;
1875 template<> inline CSSPrimitiveValue::operator EMarginCollapse() const
1877 ASSERT(isValueID());
1878 switch (m_value.valueID) {
1879 case CSSValueCollapse:
1881 case CSSValueSeparate:
1883 case CSSValueDiscard:
1889 ASSERT_NOT_REACHED();
1893 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeBehavior e)
1894 : CSSValue(PrimitiveClass)
1896 m_primitiveUnitType = CSS_VALUE_ID;
1899 m_value.valueID = CSSValueNone;
1902 m_value.valueID = CSSValueScroll;
1905 m_value.valueID = CSSValueSlide;
1908 m_value.valueID = CSSValueAlternate;
1913 template<> inline CSSPrimitiveValue::operator EMarqueeBehavior() const
1915 ASSERT(isValueID());
1916 switch (m_value.valueID) {
1919 case CSSValueScroll:
1923 case CSSValueAlternate:
1929 ASSERT_NOT_REACHED();
1933 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeDirection e)
1934 : CSSValue(PrimitiveClass)
1936 m_primitiveUnitType = CSS_VALUE_ID;
1939 m_value.valueID = CSSValueForwards;
1942 m_value.valueID = CSSValueBackwards;
1945 m_value.valueID = CSSValueAuto;
1948 m_value.valueID = CSSValueUp;
1951 m_value.valueID = CSSValueDown;
1954 m_value.valueID = CSSValueLeft;
1957 m_value.valueID = CSSValueRight;
1962 template<> inline CSSPrimitiveValue::operator EMarqueeDirection() const
1964 ASSERT(isValueID());
1965 switch (m_value.valueID) {
1966 case CSSValueForwards:
1968 case CSSValueBackwards:
1973 case CSSValueUp: // We don't support vertical languages, so AHEAD just maps to UP.
1975 case CSSValueReverse:
1976 case CSSValueDown: // REVERSE just maps to DOWN, since we don't do vertical text.
1986 ASSERT_NOT_REACHED();
1990 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e)
1991 : CSSValue(PrimitiveClass)
1993 m_primitiveUnitType = CSS_VALUE_ID;
1996 m_value.valueID = CSSValueVisible;
1999 m_value.valueID = CSSValueHidden;
2002 m_value.valueID = CSSValueScroll;
2005 m_value.valueID = CSSValueAuto;
2008 m_value.valueID = CSSValueOverlay;
2011 m_value.valueID = CSSValueWebkitPagedX;
2014 m_value.valueID = CSSValueWebkitPagedY;
2019 template<> inline CSSPrimitiveValue::operator EOverflow() const
2021 ASSERT(isValueID());
2022 switch (m_value.valueID) {
2023 case CSSValueVisible:
2025 case CSSValueHidden:
2027 case CSSValueScroll:
2031 case CSSValueOverlay:
2033 case CSSValueWebkitPagedX:
2035 case CSSValueWebkitPagedY:
2041 ASSERT_NOT_REACHED();
2045 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPageBreak e)
2046 : CSSValue(PrimitiveClass)
2048 m_primitiveUnitType = CSS_VALUE_ID;
2051 m_value.valueID = CSSValueAuto;
2054 m_value.valueID = CSSValueAlways;
2057 m_value.valueID = CSSValueAvoid;
2062 template<> inline CSSPrimitiveValue::operator EPageBreak() const
2064 ASSERT(isValueID());
2065 switch (m_value.valueID) {
2070 case CSSValueAlways:
2071 return PBALWAYS; // CSS2.1: "Conforming user agents may map left/right to always."
2078 ASSERT_NOT_REACHED();
2082 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPosition e)
2083 : CSSValue(PrimitiveClass)
2085 m_primitiveUnitType = CSS_VALUE_ID;
2087 case StaticPosition:
2088 m_value.valueID = CSSValueStatic;
2090 case RelativePosition:
2091 m_value.valueID = CSSValueRelative;
2093 case AbsolutePosition:
2094 m_value.valueID = CSSValueAbsolute;
2097 m_value.valueID = CSSValueFixed;
2099 case StickyPosition:
2100 m_value.valueID = CSSValueSticky;
2105 template<> inline CSSPrimitiveValue::operator EPosition() const
2107 ASSERT(isValueID());
2108 switch (m_value.valueID) {
2109 case CSSValueStatic:
2110 return StaticPosition;
2111 case CSSValueRelative:
2112 return RelativePosition;
2113 case CSSValueAbsolute:
2114 return AbsolutePosition;
2116 return FixedPosition;
2117 case CSSValueSticky:
2118 return StickyPosition;
2123 ASSERT_NOT_REACHED();
2124 return StaticPosition;
2127 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EResize e)
2128 : CSSValue(PrimitiveClass)
2130 m_primitiveUnitType = CSS_VALUE_ID;
2133 m_value.valueID = CSSValueBoth;
2135 case RESIZE_HORIZONTAL:
2136 m_value.valueID = CSSValueHorizontal;
2138 case RESIZE_VERTICAL:
2139 m_value.valueID = CSSValueVertical;
2142 m_value.valueID = CSSValueNone;
2147 template<> inline CSSPrimitiveValue::operator EResize() const
2149 ASSERT(isValueID());
2150 switch (m_value.valueID) {
2153 case CSSValueHorizontal:
2154 return RESIZE_HORIZONTAL;
2155 case CSSValueVertical:
2156 return RESIZE_VERTICAL;
2158 ASSERT_NOT_REACHED(); // Depends on settings, thus should be handled by the caller.
2166 ASSERT_NOT_REACHED();
2170 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETableLayout e)
2171 : CSSValue(PrimitiveClass)
2173 m_primitiveUnitType = CSS_VALUE_ID;
2176 m_value.valueID = CSSValueAuto;
2179 m_value.valueID = CSSValueFixed;
2184 template<> inline CSSPrimitiveValue::operator ETableLayout() const
2186 ASSERT(isValueID());
2187 switch (m_value.valueID) {
2196 ASSERT_NOT_REACHED();
2200 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAlign e)
2201 : CSSValue(PrimitiveClass)
2203 m_primitiveUnitType = CSS_VALUE_ID;
2206 m_value.valueID = CSSValueStart;
2209 m_value.valueID = CSSValueEnd;
2212 m_value.valueID = CSSValueLeft;
2215 m_value.valueID = CSSValueRight;
2218 m_value.valueID = CSSValueCenter;
2221 m_value.valueID = CSSValueJustify;
2224 m_value.valueID = CSSValueWebkitLeft;
2227 m_value.valueID = CSSValueWebkitRight;
2230 m_value.valueID = CSSValueWebkitCenter;
2235 template<> inline CSSPrimitiveValue::operator ETextAlign() const
2237 ASSERT(isValueID());
2238 switch (m_value.valueID) {
2239 case CSSValueWebkitAuto: // Legacy -webkit-auto. Eqiuvalent to start.
2245 return static_cast<ETextAlign>(m_value.valueID - CSSValueLeft);
2249 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextAlignLast e)
2250 : CSSValue(PrimitiveClass)
2252 m_primitiveUnitType = CSS_VALUE_ID;
2254 case TextAlignLastStart:
2255 m_value.valueID = CSSValueStart;
2257 case TextAlignLastEnd:
2258 m_value.valueID = CSSValueEnd;
2260 case TextAlignLastLeft:
2261 m_value.valueID = CSSValueLeft;
2263 case TextAlignLastRight:
2264 m_value.valueID = CSSValueRight;
2266 case TextAlignLastCenter:
2267 m_value.valueID = CSSValueCenter;
2269 case TextAlignLastJustify:
2270 m_value.valueID = CSSValueJustify;
2272 case TextAlignLastAuto:
2273 m_value.valueID = CSSValueAuto;
2278 template<> inline CSSPrimitiveValue::operator TextAlignLast() const
2280 ASSERT(isValueID());
2281 switch (m_value.valueID) {
2283 return TextAlignLastAuto;
2285 return TextAlignLastStart;
2287 return TextAlignLastEnd;
2289 return TextAlignLastLeft;
2291 return TextAlignLastRight;
2292 case CSSValueCenter:
2293 return TextAlignLastCenter;
2294 case CSSValueJustify:
2295 return TextAlignLastJustify;
2300 ASSERT_NOT_REACHED();
2301 return TextAlignLastAuto;
2304 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextJustify e)
2305 : CSSValue(PrimitiveClass)
2307 m_primitiveUnitType = CSS_VALUE_ID;
2309 case TextJustifyAuto:
2310 m_value.valueID = CSSValueAuto;
2312 case TextJustifyNone:
2313 m_value.valueID = CSSValueNone;
2315 case TextJustifyInterWord:
2316 m_value.valueID = CSSValueInterWord;
2318 case TextJustifyDistribute:
2319 m_value.valueID = CSSValueDistribute;
2324 template<> inline CSSPrimitiveValue::operator TextJustify() const
2326 switch (m_value.valueID) {
2328 return TextJustifyAuto;
2330 return TextJustifyNone;
2331 case CSSValueInterWord:
2332 return TextJustifyInterWord;
2333 case CSSValueDistribute:
2334 return TextJustifyDistribute;
2339 ASSERT_NOT_REACHED();
2340 return TextJustifyAuto;
2343 template<> inline CSSPrimitiveValue::operator TextDecoration() const
2345 ASSERT(isValueID());
2346 switch (m_value.valueID) {
2348 return TextDecorationNone;
2349 case CSSValueUnderline:
2350 return TextDecorationUnderline;
2351 case CSSValueOverline:
2352 return TextDecorationOverline;
2353 case CSSValueLineThrough:
2354 return TextDecorationLineThrough;
2356 return TextDecorationBlink;
2361 ASSERT_NOT_REACHED();
2362 return TextDecorationNone;
2365 template<> inline CSSPrimitiveValue::operator TextDecorationStyle() const
2367 ASSERT(isValueID());
2368 switch (m_value.valueID) {
2370 return TextDecorationStyleSolid;
2371 case CSSValueDouble:
2372 return TextDecorationStyleDouble;
2373 case CSSValueDotted:
2374 return TextDecorationStyleDotted;
2375 case CSSValueDashed:
2376 return TextDecorationStyleDashed;
2378 return TextDecorationStyleWavy;
2383 ASSERT_NOT_REACHED();
2384 return TextDecorationStyleSolid;
2387 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextUnderlinePosition e)
2388 : CSSValue(PrimitiveClass)
2390 m_primitiveUnitType = CSS_VALUE_ID;
2392 case TextUnderlinePositionAuto:
2393 m_value.valueID = CSSValueAuto;
2395 case TextUnderlinePositionUnder:
2396 m_value.valueID = CSSValueUnder;
2400 // FIXME: Implement support for 'under left' and 'under right' values.
2403 template<> inline CSSPrimitiveValue::operator TextUnderlinePosition() const
2405 ASSERT(isValueID());
2406 switch (m_value.valueID) {
2408 return TextUnderlinePositionAuto;
2410 return TextUnderlinePositionUnder;
2415 // FIXME: Implement support for 'under left' and 'under right' values.
2417 ASSERT_NOT_REACHED();
2418 return TextUnderlinePositionAuto;
2421 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextSecurity e)
2422 : CSSValue(PrimitiveClass)
2424 m_primitiveUnitType = CSS_VALUE_ID;
2427 m_value.valueID = CSSValueNone;
2430 m_value.valueID = CSSValueDisc;
2433 m_value.valueID = CSSValueCircle;
2436 m_value.valueID = CSSValueSquare;
2441 template<> inline CSSPrimitiveValue::operator ETextSecurity() const
2443 ASSERT(isValueID());
2444 switch (m_value.valueID) {
2449 case CSSValueCircle:
2451 case CSSValueSquare:
2457 ASSERT_NOT_REACHED();
2461 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextTransform e)
2462 : CSSValue(PrimitiveClass)
2464 m_primitiveUnitType = CSS_VALUE_ID;
2467 m_value.valueID = CSSValueCapitalize;
2470 m_value.valueID = CSSValueUppercase;
2473 m_value.valueID = CSSValueLowercase;
2476 m_value.valueID = CSSValueNone;
2481 template<> inline CSSPrimitiveValue::operator ETextTransform() const
2483 ASSERT(isValueID());
2484 switch (m_value.valueID) {
2485 case CSSValueCapitalize:
2487 case CSSValueUppercase:
2489 case CSSValueLowercase:
2497 ASSERT_NOT_REACHED();
2501 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUnicodeBidi e)
2502 : CSSValue(PrimitiveClass)
2504 m_primitiveUnitType = CSS_VALUE_ID;
2507 m_value.valueID = CSSValueNormal;
2510 m_value.valueID = CSSValueEmbed;
2513 m_value.valueID = CSSValueBidiOverride;
2516 m_value.valueID = CSSValueWebkitIsolate;
2518 case IsolateOverride:
2519 m_value.valueID = CSSValueWebkitIsolateOverride;
2522 m_value.valueID = CSSValueWebkitPlaintext;
2527 template<> inline CSSPrimitiveValue::operator EUnicodeBidi() const
2529 ASSERT(isValueID());
2530 switch (m_value.valueID) {
2531 case CSSValueNormal:
2535 case CSSValueBidiOverride:
2537 case CSSValueWebkitIsolate:
2539 case CSSValueWebkitIsolateOverride:
2540 return IsolateOverride;
2541 case CSSValueWebkitPlaintext:
2547 ASSERT_NOT_REACHED();
2551 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserDrag e)
2552 : CSSValue(PrimitiveClass)
2554 m_primitiveUnitType = CSS_VALUE_ID;
2557 m_value.valueID = CSSValueAuto;
2560 m_value.valueID = CSSValueNone;
2563 m_value.valueID = CSSValueElement;
2570 template<> inline CSSPrimitiveValue::operator EUserDrag() const
2572 ASSERT(isValueID());
2573 switch (m_value.valueID) {
2578 case CSSValueElement:
2579 return DRAG_ELEMENT;
2584 ASSERT_NOT_REACHED();
2588 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserModify e)
2589 : CSSValue(PrimitiveClass)
2591 m_primitiveUnitType = CSS_VALUE_ID;
2594 m_value.valueID = CSSValueReadOnly;
2597 m_value.valueID = CSSValueReadWrite;
2599 case READ_WRITE_PLAINTEXT_ONLY:
2600 m_value.valueID = CSSValueReadWritePlaintextOnly;
2605 template<> inline CSSPrimitiveValue::operator EUserModify() const
2607 ASSERT(isValueID());
2608 switch (m_value.valueID) {
2609 case CSSValueReadOnly:
2611 case CSSValueReadWrite:
2613 case CSSValueReadWritePlaintextOnly:
2614 return READ_WRITE_PLAINTEXT_ONLY;
2619 ASSERT_NOT_REACHED();
2623 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserSelect e)
2624 : CSSValue(PrimitiveClass)
2626 m_primitiveUnitType = CSS_VALUE_ID;
2629 m_value.valueID = CSSValueNone;
2632 m_value.valueID = CSSValueText;
2635 m_value.valueID = CSSValueAll;
2640 template<> inline CSSPrimitiveValue::operator EUserSelect() const
2642 ASSERT(isValueID());
2643 switch (m_value.valueID) {
2656 ASSERT_NOT_REACHED();
2660 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVerticalAlign a)
2661 : CSSValue(PrimitiveClass)
2663 m_primitiveUnitType = CSS_VALUE_ID;
2666 m_value.valueID = CSSValueTop;
2669 m_value.valueID = CSSValueBottom;
2672 m_value.valueID = CSSValueMiddle;
2675 m_value.valueID = CSSValueBaseline;
2678 m_value.valueID = CSSValueTextBottom;
2681 m_value.valueID = CSSValueTextTop;
2684 m_value.valueID = CSSValueSub;
2687 m_value.valueID = CSSValueSuper;
2689 case BASELINE_MIDDLE:
2690 m_value.valueID = CSSValueWebkitBaselineMiddle;
2693 m_value.valueID = CSSValueInvalid;
2697 template<> inline CSSPrimitiveValue::operator EVerticalAlign() const
2699 ASSERT(isValueID());
2700 switch (m_value.valueID) {
2703 case CSSValueBottom:
2705 case CSSValueMiddle:
2707 case CSSValueBaseline:
2709 case CSSValueTextBottom:
2711 case CSSValueTextTop:
2717 case CSSValueWebkitBaselineMiddle:
2718 return BASELINE_MIDDLE;
2723 ASSERT_NOT_REACHED();
2727 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVisibility e)
2728 : CSSValue(PrimitiveClass)
2730 m_primitiveUnitType = CSS_VALUE_ID;
2733 m_value.valueID = CSSValueVisible;
2736 m_value.valueID = CSSValueHidden;
2739 m_value.valueID = CSSValueCollapse;
2744 template<> inline CSSPrimitiveValue::operator EVisibility() const
2746 ASSERT(isValueID());
2747 switch (m_value.valueID) {
2748 case CSSValueHidden:
2750 case CSSValueVisible:
2752 case CSSValueCollapse:
2758 ASSERT_NOT_REACHED();
2762 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWhiteSpace e)
2763 : CSSValue(PrimitiveClass)
2765 m_primitiveUnitType = CSS_VALUE_ID;
2768 m_value.valueID = CSSValueNormal;
2771 m_value.valueID = CSSValuePre;
2774 m_value.valueID = CSSValuePreWrap;
2777 m_value.valueID = CSSValuePreLine;
2780 m_value.valueID = CSSValueNowrap;
2783 m_value.valueID = CSSValueWebkitNowrap;
2788 template<> inline CSSPrimitiveValue::operator EWhiteSpace() const
2790 ASSERT(isValueID());
2791 switch (m_value.valueID) {
2792 case CSSValueWebkitNowrap:
2793 return KHTML_NOWRAP;
2794 case CSSValueNowrap:
2798 case CSSValuePreWrap:
2800 case CSSValuePreLine:
2802 case CSSValueNormal:
2808 ASSERT_NOT_REACHED();
2812 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordBreak e)
2813 : CSSValue(PrimitiveClass)
2815 m_primitiveUnitType = CSS_VALUE_ID;
2817 case NormalWordBreak:
2818 m_value.valueID = CSSValueNormal;
2820 case BreakAllWordBreak:
2821 m_value.valueID = CSSValueBreakAll;
2823 case BreakWordBreak:
2824 m_value.valueID = CSSValueBreakWord;
2829 template<> inline CSSPrimitiveValue::operator EWordBreak() const
2831 ASSERT(isValueID());
2832 switch (m_value.valueID) {
2833 case CSSValueBreakAll:
2834 return BreakAllWordBreak;
2835 case CSSValueBreakWord:
2836 return BreakWordBreak;
2837 case CSSValueNormal:
2838 return NormalWordBreak;
2843 ASSERT_NOT_REACHED();
2844 return NormalWordBreak;
2847 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflowWrap e)
2848 : CSSValue(PrimitiveClass)
2850 m_primitiveUnitType = CSS_VALUE_ID;
2852 case NormalOverflowWrap:
2853 m_value.valueID = CSSValueNormal;
2855 case BreakOverflowWrap:
2856 m_value.valueID = CSSValueBreakWord;
2861 template<> inline CSSPrimitiveValue::operator EOverflowWrap() const
2863 ASSERT(isValueID());
2864 switch (m_value.valueID) {
2865 case CSSValueBreakWord:
2866 return BreakOverflowWrap;
2867 case CSSValueNormal:
2868 return NormalOverflowWrap;
2873 ASSERT_NOT_REACHED();
2874 return NormalOverflowWrap;
2877 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextDirection e)
2878 : CSSValue(PrimitiveClass)
2880 m_primitiveUnitType = CSS_VALUE_ID;
2883 m_value.valueID = CSSValueLtr;
2886 m_value.valueID = CSSValueRtl;
2891 template<> inline CSSPrimitiveValue::operator TextDirection() const
2893 ASSERT(isValueID());
2894 switch (m_value.valueID) {
2903 ASSERT_NOT_REACHED();
2907 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WritingMode e)
2908 : CSSValue(PrimitiveClass)
2910 m_primitiveUnitType = CSS_VALUE_ID;
2912 case TopToBottomWritingMode:
2913 m_value.valueID = CSSValueHorizontalTb;
2915 case RightToLeftWritingMode:
2916 m_value.valueID = CSSValueVerticalRl;
2918 case LeftToRightWritingMode:
2919 m_value.valueID = CSSValueVerticalLr;
2921 case BottomToTopWritingMode:
2922 m_value.valueID = CSSValueHorizontalBt;
2927 template<> inline CSSPrimitiveValue::operator WritingMode() const
2929 ASSERT(isValueID());
2930 switch (m_value.valueID) {
2931 case CSSValueHorizontalTb:
2932 return TopToBottomWritingMode;
2933 case CSSValueVerticalRl:
2934 return RightToLeftWritingMode;
2935 case CSSValueVerticalLr:
2936 return LeftToRightWritingMode;
2937 case CSSValueHorizontalBt:
2938 return BottomToTopWritingMode;
2943 ASSERT_NOT_REACHED();
2944 return TopToBottomWritingMode;
2947 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextCombine e)
2948 : CSSValue(PrimitiveClass)
2950 m_primitiveUnitType = CSS_VALUE_ID;
2952 case TextCombineNone:
2953 m_value.valueID = CSSValueNone;
2955 case TextCombineHorizontal:
2956 m_value.valueID = CSSValueHorizontal;
2961 template<> inline CSSPrimitiveValue::operator TextCombine() const
2963 ASSERT(isValueID());
2964 switch (m_value.valueID) {
2966 return TextCombineNone;
2967 case CSSValueHorizontal:
2968 return TextCombineHorizontal;
2973 ASSERT_NOT_REACHED();
2974 return TextCombineNone;
2977 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(RubyPosition position)
2978 : CSSValue(PrimitiveClass)
2980 m_primitiveUnitType = CSS_VALUE_ID;
2982 case RubyPositionBefore:
2983 m_value.valueID = CSSValueBefore;
2985 case RubyPositionAfter:
2986 m_value.valueID = CSSValueAfter;
2991 template<> inline CSSPrimitiveValue::operator RubyPosition() const
2993 ASSERT(isValueID());
2994 switch (m_value.valueID) {
2995 case CSSValueBefore:
2996 return RubyPositionBefore;
2998 return RubyPositionAfter;
3003 ASSERT_NOT_REACHED();
3004 return RubyPositionBefore;
3007 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisPosition position)
3008 : CSSValue(PrimitiveClass)
3010 m_primitiveUnitType = CSS_VALUE_ID;
3012 case TextEmphasisPositionOver:
3013 m_value.valueID = CSSValueOver;
3015 case TextEmphasisPositionUnder:
3016 m_value.valueID = CSSValueUnder;
3021 template<> inline CSSPrimitiveValue::operator TextEmphasisPosition() const
3023 ASSERT(isValueID());
3024 switch (m_value.valueID) {
3026 return TextEmphasisPositionOver;
3028 return TextEmphasisPositionUnder;
3033 ASSERT_NOT_REACHED();
3034 return TextEmphasisPositionOver;
3037 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOverflow overflow)
3038 : CSSValue(PrimitiveClass)
3040 m_primitiveUnitType = CSS_VALUE_ID;
3042 case TextOverflowClip:
3043 m_value.valueID = CSSValueClip;
3045 case TextOverflowEllipsis:
3046 m_value.valueID = CSSValueEllipsis;
3051 template<> inline CSSPrimitiveValue::operator TextOverflow() const
3053 ASSERT(isValueID());
3054 switch (m_value.valueID) {
3056 return TextOverflowClip;
3057 case CSSValueEllipsis:
3058 return TextOverflowEllipsis;
3063 ASSERT_NOT_REACHED();
3064 return TextOverflowClip;
3067 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisFill fill)
3068 : CSSValue(PrimitiveClass)
3070 m_primitiveUnitType = CSS_VALUE_ID;
3072 case TextEmphasisFillFilled:
3073 m_value.valueID = CSSValueFilled;
3075 case TextEmphasisFillOpen:
3076 m_value.valueID = CSSValueOpen;
3081 template<> inline CSSPrimitiveValue::operator TextEmphasisFill() const
3083 ASSERT(isValueID());
3084 switch (m_value.valueID) {
3085 case CSSValueFilled:
3086 return TextEmphasisFillFilled;
3088 return TextEmphasisFillOpen;
3093 ASSERT_NOT_REACHED();
3094 return TextEmphasisFillFilled;
3097 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisMark mark)
3098 : CSSValue(PrimitiveClass)
3100 m_primitiveUnitType = CSS_VALUE_ID;
3102 case TextEmphasisMarkDot:
3103 m_value.valueID = CSSValueDot;
3105 case TextEmphasisMarkCircle:
3106 m_value.valueID = CSSValueCircle;
3108 case TextEmphasisMarkDoubleCircle:
3109 m_value.valueID = CSSValueDoubleCircle;
3111 case TextEmphasisMarkTriangle:
3112 m_value.valueID = CSSValueTriangle;
3114 case TextEmphasisMarkSesame:
3115 m_value.valueID = CSSValueSesame;
3117 case TextEmphasisMarkNone:
3118 case TextEmphasisMarkAuto:
3119 case TextEmphasisMarkCustom:
3120 ASSERT_NOT_REACHED();
3121 m_value.valueID = CSSValueNone;
3126 template<> inline CSSPrimitiveValue::operator TextEmphasisMark() const
3128 ASSERT(isValueID());
3129 switch (m_value.valueID) {
3131 return TextEmphasisMarkNone;
3133 return TextEmphasisMarkDot;
3134 case CSSValueCircle:
3135 return TextEmphasisMarkCircle;
3136 case CSSValueDoubleCircle:
3137 return TextEmphasisMarkDoubleCircle;
3138 case CSSValueTriangle:
3139 return TextEmphasisMarkTriangle;
3140 case CSSValueSesame:
3141 return TextEmphasisMarkSesame;
3146 ASSERT_NOT_REACHED();
3147 return TextEmphasisMarkNone;
3150 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOrientation e)
3151 : CSSValue(PrimitiveClass)
3153 m_primitiveUnitType = CSS_VALUE_ID;
3155 case TextOrientationSideways:
3156 m_value.valueID = CSSValueSideways;
3158 case TextOrientationSidewaysRight:
3159 m_value.valueID = CSSValueSidewaysRight;
3161 case TextOrientationVerticalRight:
3162 m_value.valueID = CSSValueVerticalRight;
3164 case TextOrientationUpright:
3165 m_value.valueID = CSSValueUpright;
3170 template<> inline CSSPrimitiveValue::operator TextOrientation() const
3172 ASSERT(isValueID());
3173 switch (m_value.valueID) {
3174 case CSSValueSideways:
3175 return TextOrientationSideways;
3176 case CSSValueSidewaysRight:
3177 return TextOrientationSidewaysRight;
3178 case CSSValueVerticalRight:
3179 return TextOrientationVerticalRight;
3180 case CSSValueUpright:
3181 return TextOrientationUpright;
3186 ASSERT_NOT_REACHED();
3187 return TextOrientationVerticalRight;
3190 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPointerEvents e)
3191 : CSSValue(PrimitiveClass)
3193 m_primitiveUnitType = CSS_VALUE_ID;
3196 m_value.valueID = CSSValueNone;
3199 m_value.valueID = CSSValueStroke;
3202 m_value.valueID = CSSValueFill;
3205 m_value.valueID = CSSValuePainted;
3208 m_value.valueID = CSSValueVisible;
3210 case PE_VISIBLE_STROKE:
3211 m_value.valueID = CSSValueVisiblestroke;
3213 case PE_VISIBLE_FILL:
3214 m_value.valueID = CSSValueVisiblefill;
3216 case PE_VISIBLE_PAINTED:
3217 m_value.valueID = CSSValueVisiblepainted;
3220 m_value.valueID = CSSValueAuto;
3223 m_value.valueID = CSSValueAll;
3225 case PE_BOUNDINGBOX:
3226 m_value.valueID = CSSValueBoundingBox;
3231 template<> inline CSSPrimitiveValue::operator EPointerEvents() const
3233 ASSERT(isValueID());
3234 switch (m_value.valueID) {
3241 case CSSValueVisiblepainted:
3242 return PE_VISIBLE_PAINTED;
3243 case CSSValueVisiblefill:
3244 return PE_VISIBLE_FILL;
3245 case CSSValueVisiblestroke:
3246 return PE_VISIBLE_STROKE;
3247 case CSSValueVisible:
3249 case CSSValuePainted:
3253 case CSSValueStroke:
3255 case CSSValueBoundingBox:
3256 return PE_BOUNDINGBOX;
3261 ASSERT_NOT_REACHED();
3265 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontDescription::Kerning kerning)
3266 : CSSValue(PrimitiveClass)
3268 m_primitiveUnitType = CSS_VALUE_ID;
3270 case FontDescription::AutoKerning:
3271 m_value.valueID = CSSValueAuto;
3273 case FontDescription::NormalKerning:
3274 m_value.valueID = CSSValueNormal;
3276 case FontDescription::NoneKerning:
3277 m_value.valueID = CSSValueNone;
3281 ASSERT_NOT_REACHED();
3282 m_value.valueID = CSSValueAuto;
3285 template<> inline CSSPrimitiveValue::operator FontDescription::Kerning() const
3287 ASSERT(isValueID());
3288 switch (m_value.valueID) {
3290 return FontDescription::AutoKerning;
3291 case CSSValueNormal:
3292 return FontDescription::NormalKerning;
3294 return FontDescription::NoneKerning;
3299 ASSERT_NOT_REACHED();
3300 return FontDescription::AutoKerning;
3303 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ObjectFit fit)
3304 : CSSValue(PrimitiveClass)
3306 m_primitiveUnitType = CSS_VALUE_ID;
3309 m_value.valueID = CSSValueFill;
3311 case ObjectFitContain:
3312 m_value.valueID = CSSValueContain;
3314 case ObjectFitCover:
3315 m_value.valueID = CSSValueCover;
3318 m_value.valueID = CSSValueNone;
3320 case ObjectFitScaleDown:
3321 m_value.valueID = CSSValueScaleDown;
3326 template<> inline CSSPrimitiveValue::operator ObjectFit() const
3328 switch (m_value.valueID) {
3330 return ObjectFitFill;
3331 case CSSValueContain:
3332 return ObjectFitContain;
3334 return ObjectFitCover;
3336 return ObjectFitNone;
3337 case CSSValueScaleDown:
3338 return ObjectFitScaleDown;
3340 ASSERT_NOT_REACHED();
3341 return ObjectFitFill;
3345 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillSizeType fillSize)
3346 : CSSValue(PrimitiveClass)
3348 m_primitiveUnitType = CSS_VALUE_ID;
3351 m_value.valueID = CSSValueContain;
3354 m_value.valueID = CSSValueCover;
3357 m_value.valueID = CSSValueNone;
3361 ASSERT_NOT_REACHED();
3365 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmoothingMode smoothing)
3366 : CSSValue(PrimitiveClass)
3368 m_primitiveUnitType = CSS_VALUE_ID;
3369 switch (smoothing) {
3371 m_value.valueID = CSSValueAuto;
3374 m_value.valueID = CSSValueNone;
3377 m_value.valueID = CSSValueAntialiased;
3379 case SubpixelAntialiased:
3380 m_value.valueID = CSSValueSubpixelAntialiased;
3384 ASSERT_NOT_REACHED();
3385 m_value.valueID = CSSValueAuto;
3388 template<> inline CSSPrimitiveValue::operator FontSmoothingMode() const
3390 ASSERT(isValueID());
3391 switch (m_value.valueID) {
3393 return AutoSmoothing;
3396 case CSSValueAntialiased:
3398 case CSSValueSubpixelAntialiased:
3399 return SubpixelAntialiased;
3404 ASSERT_NOT_REACHED();
3405 return AutoSmoothing;
3408 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontWeight weight)
3409 : CSSValue(PrimitiveClass)
3411 m_primitiveUnitType = CSS_VALUE_ID;
3414 m_value.valueID = CSSValue900;
3417 m_value.valueID = CSSValue800;
3420 m_value.valueID = CSSValue700;
3423 m_value.valueID = CSSValue600;
3426 m_value.valueID = CSSValue500;
3429 m_value.valueID = CSSValue400;
3432 m_value.valueID = CSSValue300;
3435 m_value.valueID = CSSValue200;
3438 m_value.valueID = CSSValue100;
3442 ASSERT_NOT_REACHED();
3443 m_value.valueID = CSSValueNormal;
3446 template<> inline CSSPrimitiveValue::operator FontWeight() const
3448 ASSERT(isValueID());
3449 switch (m_value.valueID) {
3451 return FontWeightBold;
3452 case CSSValueNormal:
3453 return FontWeightNormal;
3455 return FontWeight900;
3457 return FontWeight800;
3459 return FontWeight700;
3461 return FontWeight600;
3463 return FontWeight500;
3465 return FontWeight400;
3467 return FontWeight300;
3469 return FontWeight200;
3471 return FontWeight100;
3476 ASSERT_NOT_REACHED();
3477 return FontWeightNormal;
3480 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontStyle italic)
3481 : CSSValue(PrimitiveClass)
3483 m_primitiveUnitType = CSS_VALUE_ID;
3485 case FontStyleNormal:
3486 m_value.valueID = CSSValueNormal;
3488 case FontStyleItalic:
3489 m_value.valueID = CSSValueItalic;
3493 ASSERT_NOT_REACHED();
3494 m_value.valueID = CSSValueNormal;
3497 template<> inline CSSPrimitiveValue::operator FontStyle() const
3499 ASSERT(isValueID());
3500 switch (m_value.valueID) {
3501 case CSSValueOblique:
3502 // FIXME: oblique is the same as italic for the moment...
3503 case CSSValueItalic:
3504 return FontStyleItalic;
3505 case CSSValueNormal:
3506 return FontStyleNormal;
3510 ASSERT_NOT_REACHED();
3511 return FontStyleNormal;
3514 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontVariant smallCaps)
3515 : CSSValue(PrimitiveClass)
3517 m_primitiveUnitType = CSS_VALUE_ID;
3518 switch (smallCaps) {
3519 case FontVariantNormal:
3520 m_value.valueID = CSSValueNormal;
3522 case FontVariantSmallCaps:
3523 m_value.valueID = CSSValueSmallCaps;
3527 ASSERT_NOT_REACHED();
3528 m_value.valueID = CSSValueNormal;
3531 template<> inline CSSPrimitiveValue::operator FontVariant() const
3533 ASSERT(isValueID());
3534 switch (m_value.valueID) {
3535 case CSSValueSmallCaps:
3536 return FontVariantSmallCaps;
3537 case CSSValueNormal:
3538 return FontVariantNormal;
3542 ASSERT_NOT_REACHED();
3543 return FontVariantNormal;
3546 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextRenderingMode e)
3547 : CSSValue(PrimitiveClass)
3549 m_primitiveUnitType = CSS_VALUE_ID;
3551 case AutoTextRendering:
3552 m_value.valueID = CSSValueAuto;
3555 m_value.valueID = CSSValueOptimizespeed;
3557 case OptimizeLegibility:
3558 m_value.valueID = CSSValueOptimizelegibility;
3560 case GeometricPrecision:
3561 m_value.valueID = CSSValueGeometricprecision;
3566 template<> inline CSSPrimitiveValue::operator TextRenderingMode() const
3568 ASSERT(isValueID());
3569 switch (m_value.valueID) {
3571 return AutoTextRendering;
3572 case CSSValueOptimizespeed:
3573 return OptimizeSpeed;
3574 case CSSValueOptimizelegibility:
3575 return OptimizeLegibility;
3576 case CSSValueGeometricprecision:
3577 return GeometricPrecision;
3582 ASSERT_NOT_REACHED();
3583 return AutoTextRendering;
3586 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ESpeak e)
3587 : CSSValue(PrimitiveClass)
3589 m_primitiveUnitType = CSS_VALUE_ID;
3592 m_value.valueID = CSSValueNone;
3595 m_value.valueID = CSSValueNormal;
3598 m_value.valueID = CSSValueSpellOut;
3601 m_value.valueID = CSSValueDigits;
3603 case SpeakLiteralPunctuation:
3604 m_value.valueID = CSSValueLiteralPunctuation;
3606 case SpeakNoPunctuation:
3607 m_value.valueID = CSSValueNoPunctuation;
3612 template<> inline CSSPrimitiveValue::operator Order() const
3614 ASSERT(isValueID());
3615 switch (m_value.valueID) {
3616 case CSSValueLogical:
3617 return LogicalOrder;
3618 case CSSValueVisual:
3624 ASSERT_NOT_REACHED();
3625 return LogicalOrder;
3628 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Order e)
3629 : CSSValue(PrimitiveClass)
3631 m_primitiveUnitType = CSS_VALUE_ID;
3634 m_value.valueID = CSSValueLogical;
3637 m_value.valueID = CSSValueVisual;
3642 template<> inline CSSPrimitiveValue::operator ESpeak() const
3644 ASSERT(isValueID());
3645 switch (m_value.valueID) {
3648 case CSSValueNormal:
3650 case CSSValueSpellOut:
3651 return SpeakSpellOut;
3652 case CSSValueDigits:
3654 case CSSValueLiteralPunctuation:
3655 return SpeakLiteralPunctuation;
3656 case CSSValueNoPunctuation:
3657 return SpeakNoPunctuation;
3662 ASSERT_NOT_REACHED();
3666 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(blink::WebBlendMode blendMode)
3667 : CSSValue(PrimitiveClass)
3669 m_primitiveUnitType = CSS_VALUE_ID;
3670 switch (blendMode) {
3671 case blink::WebBlendModeNormal:
3672 m_value.valueID = CSSValueNormal;
3674 case blink::WebBlendModeMultiply:
3675 m_value.valueID = CSSValueMultiply;
3677 case blink::WebBlendModeScreen:
3678 m_value.valueID = CSSValueScreen;
3680 case blink::WebBlendModeOverlay:
3681 m_value.valueID = CSSValueOverlay;
3683 case blink::WebBlendModeDarken:
3684 m_value.valueID = CSSValueDarken;
3686 case blink::WebBlendModeLighten:
3687 m_value.valueID = CSSValueLighten;
3689 case blink::WebBlendModeColorDodge:
3690 m_value.valueID = CSSValueColorDodge;
3692 case blink::WebBlendModeColorBurn:
3693 m_value.valueID = CSSValueColorBurn;
3695 case blink::WebBlendModeHardLight:
3696 m_value.valueID = CSSValueHardLight;
3698 case blink::WebBlendModeSoftLight:
3699 m_value.valueID = CSSValueSoftLight;
3701 case blink::WebBlendModeDifference:
3702 m_value.valueID = CSSValueDifference;
3704 case blink::WebBlendModeExclusion:
3705 m_value.valueID = CSSValueExclusion;
3707 case blink::WebBlendModeHue:
3708 m_value.valueID = CSSValueHue;
3710 case blink::WebBlendModeSaturation:
3711 m_value.valueID = CSSValueSaturation;
3713 case blink::WebBlendModeColor:
3714 m_value.valueID = CSSValueColor;
3716 case blink::WebBlendModeLuminosity:
3717 m_value.valueID = CSSValueLuminosity;
3722 template<> inline CSSPrimitiveValue::operator blink::WebBlendMode() const
3724 ASSERT(isValueID());
3725 switch (m_value.valueID) {
3726 case CSSValueNormal:
3727 return blink::WebBlendModeNormal;
3728 case CSSValueMultiply:
3729 return blink::WebBlendModeMultiply;
3730 case CSSValueScreen:
3731 return blink::WebBlendModeScreen;
3732 case CSSValueOverlay:
3733 return blink::WebBlendModeOverlay;
3734 case CSSValueDarken:
3735 return blink::WebBlendModeDarken;
3736 case CSSValueLighten:
3737 return blink::WebBlendModeLighten;
3738 case CSSValueColorDodge:
3739 return blink::WebBlendModeColorDodge;
3740 case CSSValueColorBurn:
3741 return blink::WebBlendModeColorBurn;
3742 case CSSValueHardLight:
3743 return blink::WebBlendModeHardLight;
3744 case CSSValueSoftLight:
3745 return blink::WebBlendModeSoftLight;
3746 case CSSValueDifference:
3747 return blink::WebBlendModeDifference;
3748 case CSSValueExclusion:
3749 return blink::WebBlendModeExclusion;
3751 return blink::WebBlendModeHue;
3752 case CSSValueSaturation:
3753 return blink::WebBlendModeSaturation;
3755 return blink::WebBlendModeColor;
3756 case CSSValueLuminosity:
3757 return blink::WebBlendModeLuminosity;
3762 ASSERT_NOT_REACHED();
3763 return blink::WebBlendModeNormal;
3766 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineCap e)
3767 : CSSValue(PrimitiveClass)
3769 m_primitiveUnitType = CSS_VALUE_ID;
3772 m_value.valueID = CSSValueButt;
3775 m_value.valueID = CSSValueRound;
3778 m_value.valueID = CSSValueSquare;
3783 template<> inline CSSPrimitiveValue::operator LineCap() const
3785 ASSERT(isValueID());
3786 switch (m_value.valueID) {
3791 case CSSValueSquare:
3797 ASSERT_NOT_REACHED();
3801 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineJoin e)
3802 : CSSValue(PrimitiveClass)
3804 m_primitiveUnitType = CSS_VALUE_ID;
3807 m_value.valueID = CSSValueMiter;
3810 m_value.valueID = CSSValueRound;
3813 m_value.valueID = CSSValueBevel;
3818 template<> inline CSSPrimitiveValue::operator LineJoin() const
3820 ASSERT(isValueID());
3821 switch (m_value.valueID) {
3832 ASSERT_NOT_REACHED();
3836 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WindRule e)
3837 : CSSValue(PrimitiveClass)
3839 m_primitiveUnitType = CSS_VALUE_ID;
3842 m_value.valueID = CSSValueNonzero;
3845 m_value.valueID = CSSValueEvenodd;
3850 template<> inline CSSPrimitiveValue::operator WindRule() const
3852 ASSERT(isValueID());
3853 switch (m_value.valueID) {
3854 case CSSValueNonzero:
3855 return RULE_NONZERO;
3856 case CSSValueEvenodd:
3857 return RULE_EVENODD;
3862 ASSERT_NOT_REACHED();
3863 return RULE_NONZERO;
3867 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignmentBaseline e)
3868 : CSSValue(PrimitiveClass)
3870 m_primitiveUnitType = CSS_VALUE_ID;
3873 m_value.valueID = CSSValueAuto;
3876 m_value.valueID = CSSValueBaseline;
3878 case AB_BEFORE_EDGE:
3879 m_value.valueID = CSSValueBeforeEdge;
3881 case AB_TEXT_BEFORE_EDGE:
3882 m_value.valueID = CSSValueTextBeforeEdge;
3885 m_value.valueID = CSSValueMiddle;
3888 m_value.valueID = CSSValueCentral;
3891 m_value.valueID = CSSValueAfterEdge;
3893 case AB_TEXT_AFTER_EDGE:
3894 m_value.valueID = CSSValueTextAfterEdge;
3896 case AB_IDEOGRAPHIC:
3897 m_value.valueID = CSSValueIdeographic;
3900 m_value.valueID = CSSValueAlphabetic;
3903 m_value.valueID = CSSValueHanging;
3905 case AB_MATHEMATICAL:
3906 m_value.valueID = CSSValueMathematical;
3911 template<> inline CSSPrimitiveValue::operator EAlignmentBaseline() const
3913 ASSERT(isValueID());
3914 switch (m_value.valueID) {
3917 case CSSValueBaseline:
3919 case CSSValueBeforeEdge:
3920 return AB_BEFORE_EDGE;
3921 case CSSValueTextBeforeEdge:
3922 return AB_TEXT_BEFORE_EDGE;
3923 case CSSValueMiddle:
3925 case CSSValueCentral:
3927 case CSSValueAfterEdge:
3928 return AB_AFTER_EDGE;
3929 case CSSValueTextAfterEdge:
3930 return AB_TEXT_AFTER_EDGE;
3931 case CSSValueIdeographic:
3932 return AB_IDEOGRAPHIC;
3933 case CSSValueAlphabetic:
3934 return AB_ALPHABETIC;
3935 case CSSValueHanging:
3937 case CSSValueMathematical:
3938 return AB_MATHEMATICAL;
3943 ASSERT_NOT_REACHED();
3947 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderCollapse e)
3948 : CSSValue(PrimitiveClass)
3950 m_primitiveUnitType = CSS_VALUE_ID;
3953 m_value.valueID = CSSValueSeparate;
3956 m_value.valueID = CSSValueCollapse;
3961 template<> inline CSSPrimitiveValue::operator EBorderCollapse() const
3963 ASSERT(isValueID());
3964 switch (m_value.valueID) {
3965 case CSSValueSeparate:
3967 case CSSValueCollapse:
3973 ASSERT_NOT_REACHED();
3977 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderFit e)
3978 : CSSValue(PrimitiveClass)
3980 m_primitiveUnitType = CSS_VALUE_ID;
3982 case BorderFitBorder:
3983 m_value.valueID = CSSValueBorder;
3985 case BorderFitLines:
3986 m_value.valueID = CSSValueLines;
3991 template<> inline CSSPrimitiveValue::operator EBorderFit() const
3993 ASSERT(isValueID());
3994 switch (m_value.valueID) {
3995 case CSSValueBorder:
3996 return BorderFitBorder;
3998 return BorderFitLines;
4003 ASSERT_NOT_REACHED();
4004 return BorderFitLines;
4007 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering e)
4008 : CSSValue(PrimitiveClass)
4010 m_primitiveUnitType = CSS_VALUE_ID;
4012 case ImageRenderingAuto:
4013 m_value.valueID = CSSValueAuto;
4015 case ImageRenderingOptimizeSpeed:
4016 m_value.valueID = CSSValueOptimizespeed;
4018 case ImageRenderingOptimizeQuality:
4019 m_value.valueID = CSSValueOptimizequality;
4021 case ImageRenderingOptimizeContrast:
4022 m_value.valueID = CSSValueWebkitOptimizeContrast;
4027 template<> inline CSSPrimitiveValue::operator EImageRendering() const
4029 ASSERT(isValueID());
4030 switch (m_value.valueID) {
4032 return ImageRenderingAuto;
4033 case CSSValueOptimizespeed:
4034 return ImageRenderingOptimizeSpeed;
4035 case CSSValueOptimizequality:
4036 return ImageRenderingOptimizeQuality;
4037 case CSSValueWebkitOptimizeContrast:
4038 return ImageRenderingOptimizeContrast;
4043 ASSERT_NOT_REACHED();
4044 return ImageRenderingAuto;
4047 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETransformStyle3D e)
4048 : CSSValue(PrimitiveClass)
4050 m_primitiveUnitType = CSS_VALUE_ID;
4052 case TransformStyle3DFlat:
4053 m_value.valueID = CSSValueFlat;
4055 case TransformStyle3DPreserve3D:
4056 m_value.valueID = CSSValuePreserve3d;
4061 template<> inline CSSPrimitiveValue::operator ETransformStyle3D() const
4063 ASSERT(isValueID());
4064 switch (m_value.valueID) {
4066 return TransformStyle3DFlat;
4067 case CSSValuePreserve3d:
4068 return TransformStyle3DPreserve3D;
4073 ASSERT_NOT_REACHED();
4074 return TransformStyle3DFlat;
4077 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WrapFlow wrapFlow)
4078 : CSSValue(PrimitiveClass)
4080 m_primitiveUnitType = CSS_VALUE_ID;
4083 m_value.valueID = CSSValueAuto;
4086 m_value.valueID = CSSValueBoth;
4089 m_value.valueID = CSSValueStart;
4092 m_value.valueID = CSSValueEnd;
4094 case WrapFlowMaximum:
4095 m_value.valueID = CSSValueMaximum;
4098 m_value.valueID = CSSValueClear;
4103 template<> inline CSSPrimitiveValue::operator WrapFlow() const
4105 ASSERT(isValueID());
4106 switch (m_value.valueID) {
4108 return WrapFlowAuto;
4110 return WrapFlowBoth;
4112 return WrapFlowStart;
4115 case CSSValueMaximum:
4116 return WrapFlowMaximum;
4118 return WrapFlowClear;
4123 ASSERT_NOT_REACHED();
4124 return WrapFlowAuto;
4127 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WrapThrough wrapThrough)
4128 : CSSValue(PrimitiveClass)
4130 m_primitiveUnitType = CSS_VALUE_ID;
4131 switch (wrapThrough) {
4132 case WrapThroughWrap:
4133 m_value.valueID = CSSValueWrap;
4135 case WrapThroughNone:
4136 m_value.valueID = CSSValueNone;
4141 template<> inline CSSPrimitiveValue::operator WrapThrough() const
4143 ASSERT(isValueID());
4144 switch (m_value.valueID) {
4146 return WrapThroughWrap;
4148 return WrapThroughNone;
4153 ASSERT_NOT_REACHED();
4154 return WrapThroughWrap;
4157 template<> inline CSSPrimitiveValue::operator GridAutoFlow() const
4159 ASSERT(isValueID());
4160 switch (m_value.valueID) {
4162 return AutoFlowNone;
4163 case CSSValueColumn:
4164 return AutoFlowColumn;
4171 ASSERT_NOT_REACHED();
4172 return AutoFlowNone;
4176 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(GridAutoFlow flow)
4177 : CSSValue(PrimitiveClass)
4179 m_primitiveUnitType = CSS_VALUE_ID;
4182 m_value.valueID = CSSValueNone;
4184 case AutoFlowColumn:
4185 m_value.valueID = CSSValueColumn;
4188 m_value.valueID = CSSValueRow;
4193 enum LengthConversion {
4195 FixedConversion = 1 << 0,
4196 AutoConversion = 1 << 1,
4197 PercentConversion = 1 << 2,
4200 template<int supported> Length CSSPrimitiveValue::convertToLength(const CSSToLengthConversionData& conversionData)
4202 if ((supported & FixedConversion) && isLength())
4203 return computeLength<Length>(conversionData);
4204 if ((supported & PercentConversion) && isPercentage())
4205 return Length(getDoubleValue(), Percent);
4206 if ((supported & AutoConversion) && getValueID() == CSSValueAuto)
4207 return Length(Auto);
4208 if ((supported & FixedConversion) && (supported & PercentConversion) && isCalculated())
4209 return Length(cssCalcValue()->toCalcValue(conversionData));
4210 ASSERT_NOT_REACHED();
4211 return Length(0, Fixed);
4214 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBufferedRendering e)
4215 : CSSValue(PrimitiveClass)
4217 m_primitiveUnitType = CSS_VALUE_ID;
4220 m_value.valueID = CSSValueAuto;
4223 m_value.valueID = CSSValueDynamic;
4226 m_value.valueID = CSSValueStatic;
4231 template<> inline CSSPrimitiveValue::operator EBufferedRendering() const
4233 ASSERT(isValueID());
4234 switch (m_value.valueID) {
4237 case CSSValueDynamic:
4239 case CSSValueStatic:
4245 ASSERT_NOT_REACHED();
4249 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorInterpolation e)
4250 : CSSValue(PrimitiveClass)
4252 m_primitiveUnitType = CSS_VALUE_ID;
4255 m_value.valueID = CSSValueAuto;
4258 m_value.valueID = CSSValueSrgb;
4261 m_value.valueID = CSSValueLinearrgb;
4266 template<> inline CSSPrimitiveValue::operator EColorInterpolation() const
4268 ASSERT(isValueID());
4269 switch (m_value.valueID) {
4272 case CSSValueLinearrgb:
4273 return CI_LINEARRGB;
4280 ASSERT_NOT_REACHED();
4284 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EColorRendering e)
4285 : CSSValue(PrimitiveClass)
4287 m_primitiveUnitType = CSS_VALUE_ID;
4290 m_value.valueID = CSSValueAuto;
4292 case CR_OPTIMIZESPEED:
4293 m_value.valueID = CSSValueOptimizespeed;
4295 case CR_OPTIMIZEQUALITY:
4296 m_value.valueID = CSSValueOptimizequality;
4301 template<> inline CSSPrimitiveValue::operator EColorRendering() const
4303 ASSERT(isValueID());
4304 switch (m_value.valueID) {
4305 case CSSValueOptimizespeed:
4306 return CR_OPTIMIZESPEED;
4307 case CSSValueOptimizequality:
4308 return CR_OPTIMIZEQUALITY;
4315 ASSERT_NOT_REACHED();
4319 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDominantBaseline e)
4320 : CSSValue(PrimitiveClass)
4322 m_primitiveUnitType = CSS_VALUE_ID;
4325 m_value.valueID = CSSValueAuto;
4328 m_value.valueID = CSSValueUseScript;
4331 m_value.valueID = CSSValueNoChange;
4334 m_value.valueID = CSSValueResetSize;
4337 m_value.valueID = CSSValueCentral;
4340 m_value.valueID = CSSValueMiddle;
4342 case DB_TEXT_BEFORE_EDGE:
4343 m_value.valueID = CSSValueTextBeforeEdge;
4345 case DB_TEXT_AFTER_EDGE:
4346 m_value.valueID = CSSValueTextAfterEdge;
4348 case DB_IDEOGRAPHIC:
4349 m_value.valueID = CSSValueIdeographic;
4352 m_value.valueID = CSSValueAlphabetic;
4355 m_value.valueID = CSSValueHanging;
4357 case DB_MATHEMATICAL:
4358 m_value.valueID = CSSValueMathematical;
4363 template<> inline CSSPrimitiveValue::operator EDominantBaseline() const
4365 ASSERT(isValueID());
4366 switch (m_value.valueID) {
4369 case CSSValueUseScript:
4370 return DB_USE_SCRIPT;
4371 case CSSValueNoChange:
4372 return DB_NO_CHANGE;
4373 case CSSValueResetSize:
4374 return DB_RESET_SIZE;
4375 case CSSValueIdeographic:
4376 return DB_IDEOGRAPHIC;
4377 case CSSValueAlphabetic:
4378 return DB_ALPHABETIC;
4379 case CSSValueHanging:
4381 case CSSValueMathematical:
4382 return DB_MATHEMATICAL;
4383 case CSSValueCentral:
4385 case CSSValueMiddle:
4387 case CSSValueTextAfterEdge:
4388 return DB_TEXT_AFTER_EDGE;
4389 case CSSValueTextBeforeEdge:
4390 return DB_TEXT_BEFORE_EDGE;
4395 ASSERT_NOT_REACHED();
4399 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EShapeRendering e)
4400 : CSSValue(PrimitiveClass)
4402 m_primitiveUnitType = CSS_VALUE_ID;
4405 m_value.valueID = CSSValueAuto;
4407 case SR_OPTIMIZESPEED:
4408 m_value.valueID = CSSValueOptimizespeed;
4411 m_value.valueID = CSSValueCrispedges;
4413 case SR_GEOMETRICPRECISION:
4414 m_value.valueID = CSSValueGeometricprecision;
4419 template<> inline CSSPrimitiveValue::operator EShapeRendering() const
4421 ASSERT(isValueID());
4422 switch (m_value.valueID) {
4425 case CSSValueOptimizespeed:
4426 return SR_OPTIMIZESPEED;
4427 case CSSValueCrispedges:
4428 return SR_CRISPEDGES;
4429 case CSSValueGeometricprecision:
4430 return SR_GEOMETRICPRECISION;
4435 ASSERT_NOT_REACHED();
4439 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAnchor e)
4440 : CSSValue(PrimitiveClass)
4442 m_primitiveUnitType = CSS_VALUE_ID;
4445 m_value.valueID = CSSValueStart;
4448 m_value.valueID = CSSValueMiddle;
4451 m_value.valueID = CSSValueEnd;
4456 template<> inline CSSPrimitiveValue::operator ETextAnchor() const
4458 ASSERT(isValueID());
4459 switch (m_value.valueID) {
4462 case CSSValueMiddle:
4470 ASSERT_NOT_REACHED();
4474 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(SVGWritingMode e)
4475 : CSSValue(PrimitiveClass)
4477 m_primitiveUnitType = CSS_VALUE_ID;
4480 m_value.valueID = CSSValueLrTb;
4483 m_value.valueID = CSSValueLr;
4486 m_value.valueID = CSSValueRlTb;
4489 m_value.valueID = CSSValueRl;
4492 m_value.valueID = CSSValueTbRl;
4495 m_value.valueID = CSSValueTb;
4500 template<> inline CSSPrimitiveValue::operator SVGWritingMode() const
4502 ASSERT(isValueID());
4503 switch (m_value.valueID) {
4520 ASSERT_NOT_REACHED();
4524 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVectorEffect e)
4525 : CSSValue(PrimitiveClass)
4527 m_primitiveUnitType = CSS_VALUE_ID;
4530 m_value.valueID = CSSValueNone;
4532 case VE_NON_SCALING_STROKE:
4533 m_value.valueID = CSSValueNonScalingStroke;
4538 template<> inline CSSPrimitiveValue::operator EVectorEffect() const
4540 ASSERT(isValueID());
4541 switch (m_value.valueID) {
4544 case CSSValueNonScalingStroke:
4545 return VE_NON_SCALING_STROKE;
4550 ASSERT_NOT_REACHED();
4554 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPaintOrderType e)
4555 : CSSValue(PrimitiveClass)
4557 m_primitiveUnitType = CSS_VALUE_ID;
4560 m_value.valueID = CSSValueFill;
4563 m_value.valueID = CSSValueStroke;
4566 m_value.valueID = CSSValueMarkers;
4569 ASSERT_NOT_REACHED();
4570 m_value.valueID = CSSValueFill;
4575 template<> inline CSSPrimitiveValue::operator EPaintOrderType() const
4577 ASSERT(isValueID());
4578 switch (m_value.valueID) {
4581 case CSSValueStroke:
4583 case CSSValueMarkers:
4589 ASSERT_NOT_REACHED();
4593 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMaskType e)
4594 : CSSValue(PrimitiveClass)
4596 m_primitiveUnitType = CSS_VALUE_ID;
4599 m_value.valueID = CSSValueLuminance;
4602 m_value.valueID = CSSValueAlpha;
4607 template<> inline CSSPrimitiveValue::operator EMaskType() const
4609 ASSERT(isValueID());
4610 switch (m_value.valueID) {
4611 case CSSValueLuminance:
4612 return MT_LUMINANCE;
4619 ASSERT_NOT_REACHED();
4620 return MT_LUMINANCE;
4623 template<> inline CSSPrimitiveValue::operator TouchAction() const
4625 ASSERT(isValueID());
4626 switch (m_value.valueID) {
4628 return TouchActionNone;
4630 return TouchActionAuto;
4632 return TouchActionPanX;
4634 return TouchActionPanY;
4635 case CSSValueManipulation:
4636 return TouchActionPanX | TouchActionPanY | TouchActionPinchZoom;
4641 ASSERT_NOT_REACHED();
4642 return TouchActionNone;
4645 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EIsolation i)
4646 : CSSValue(PrimitiveClass)
4648 m_primitiveUnitType = CSS_VALUE_ID;
4651 m_value.valueID = CSSValueAuto;
4653 case IsolationIsolate:
4654 m_value.valueID = CSSValueIsolate;
4659 template<> inline CSSPrimitiveValue::operator EIsolation() const
4661 ASSERT(isValueID());
4662 switch (m_value.valueID) {
4664 return IsolationAuto;
4665 case CSSValueIsolate:
4666 return IsolationIsolate;
4671 ASSERT_NOT_REACHED();
4672 return IsolationAuto;
4675 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TouchActionDelay t)
4676 : CSSValue(PrimitiveClass)
4678 m_primitiveUnitType = CSS_VALUE_ID;
4680 case TouchActionDelayNone:
4681 m_value.valueID = CSSValueNone;
4683 case TouchActionDelayScript:
4684 m_value.valueID = CSSValueScript;
4689 template<> inline CSSPrimitiveValue::operator TouchActionDelay() const
4691 switch (m_value.valueID) {
4693 return TouchActionDelayNone;
4694 case CSSValueScript:
4695 return TouchActionDelayScript;
4700 ASSERT_NOT_REACHED();
4701 return TouchActionDelayNone;
4704 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CSSBoxType cssBox)
4705 : CSSValue(PrimitiveClass)
4707 m_primitiveUnitType = CSS_VALUE_ID;
4710 m_value.valueID = CSSValueMarginBox;
4713 m_value.valueID = CSSValueBorderBox;
4716 m_value.valueID = CSSValuePaddingBox;
4719 m_value.valueID = CSSValueContentBox;
4722 // The missing box should convert to a null primitive value.
4723 ASSERT_NOT_REACHED();
4727 template<> inline CSSPrimitiveValue::operator CSSBoxType() const
4729 switch (getValueID()) {
4730 case CSSValueMarginBox:
4732 case CSSValueBorderBox:
4734 case CSSValuePaddingBox:
4736 case CSSValueContentBox:
4741 ASSERT_NOT_REACHED();
4745 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ItemPosition itemPosition)
4746 : CSSValue(PrimitiveClass)
4748 m_primitiveUnitType = CSS_VALUE_ID;
4749 switch (itemPosition) {
4750 case ItemPositionAuto:
4751 m_value.valueID = CSSValueAuto;
4753 case ItemPositionStretch:
4754 m_value.valueID = CSSValueStretch;
4756 case ItemPositionBaseline:
4757 m_value.valueID = CSSValueBaseline;
4759 case ItemPositionCenter:
4760 m_value.valueID = CSSValueCenter;
4762 case ItemPositionStart:
4763 m_value.valueID = CSSValueStart;
4765 case ItemPositionEnd:
4766 m_value.valueID = CSSValueEnd;
4768 case ItemPositionSelfStart:
4769 m_value.valueID = CSSValueSelfStart;
4771 case ItemPositionSelfEnd:
4772 m_value.valueID = CSSValueSelfEnd;
4774 case ItemPositionFlexStart:
4775 m_value.valueID = CSSValueFlexStart;
4777 case ItemPositionFlexEnd:
4778 m_value.valueID = CSSValueFlexEnd;
4780 case ItemPositionLeft:
4781 m_value.valueID = CSSValueLeft;
4783 case ItemPositionRight:
4784 m_value.valueID = CSSValueRight;
4789 template<> inline CSSPrimitiveValue::operator ItemPosition() const
4791 switch (m_value.valueID) {
4793 return ItemPositionAuto;
4794 case CSSValueStretch:
4795 return ItemPositionStretch;
4796 case CSSValueBaseline:
4797 return ItemPositionBaseline;
4798 case CSSValueCenter:
4799 return ItemPositionCenter;
4801 return ItemPositionStart;
4803 return ItemPositionEnd;
4804 case CSSValueSelfStart:
4805 return ItemPositionSelfStart;
4806 case CSSValueSelfEnd:
4807 return ItemPositionSelfEnd;
4808 case CSSValueFlexStart:
4809 return ItemPositionFlexStart;
4810 case CSSValueFlexEnd:
4811 return ItemPositionFlexEnd;
4813 return ItemPositionLeft;
4815 return ItemPositionRight;
4819 ASSERT_NOT_REACHED();
4820 return ItemPositionAuto;
4823 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(OverflowAlignment overflowAlignment)
4824 : CSSValue(PrimitiveClass)
4826 m_primitiveUnitType = CSS_VALUE_ID;
4827 switch (overflowAlignment) {
4828 case OverflowAlignmentDefault:
4829 m_value.valueID = CSSValueDefault;
4831 case OverflowAlignmentTrue:
4832 m_value.valueID = CSSValueTrue;
4834 case OverflowAlignmentSafe:
4835 m_value.valueID = CSSValueSafe;
4840 template<> inline CSSPrimitiveValue::operator OverflowAlignment() const
4842 switch (m_value.valueID) {
4844 return OverflowAlignmentTrue;
4846 return OverflowAlignmentSafe;
4850 ASSERT_NOT_REACHED();
4851 return OverflowAlignmentTrue;
4854 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollBehavior behavior)
4855 : CSSValue(PrimitiveClass)
4857 m_primitiveUnitType = CSS_VALUE_ID;
4859 case ScrollBehaviorInstant:
4860 m_value.valueID = CSSValueInstant;
4862 case ScrollBehaviorSmooth:
4863 m_value.valueID = CSSValueSmooth;
4865 case ScrollBehaviorAuto:
4866 // Behavior 'auto' is only allowed in ScrollOptions arguments passed to
4867 // CSSOM scroll APIs.
4868 ASSERT_NOT_REACHED();
4872 template<> inline CSSPrimitiveValue::operator ScrollBehavior() const
4874 switch (getValueID()) {
4875 case CSSValueInstant:
4876 return ScrollBehaviorInstant;
4877 case CSSValueSmooth:
4878 return ScrollBehaviorSmooth;
4882 ASSERT_NOT_REACHED();
4883 return ScrollBehaviorInstant;