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.
32 #include "CSSCalculationValue.h"
33 #include "CSSFontFamily.h"
34 #include "CSSPrimitiveValue.h"
35 #include "CSSReflectionDirection.h"
36 #include "CSSToLengthConversionData.h"
37 #include "CSSValueKeywords.h"
38 #include "GraphicsTypes.h"
40 #include "LineClampValue.h"
41 #include "RenderStyleConstants.h"
42 #include "SVGRenderStyleDefs.h"
43 #include "TextFlags.h"
44 #include "ThemeTypes.h"
45 #include "UnicodeBidi.h"
46 #include "WritingMode.h"
47 #include <wtf/MathExtras.h>
49 #if ENABLE(CSS_IMAGE_ORIENTATION)
50 #include "ImageOrientation.h"
55 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(short i)
56 : CSSValue(PrimitiveClass)
58 m_primitiveUnitType = CSS_NUMBER;
59 m_value.num = static_cast<double>(i);
62 template<> inline CSSPrimitiveValue::operator short() const
64 if (m_primitiveUnitType == CSS_NUMBER)
65 return clampTo<short>(m_value.num);
71 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(unsigned short i)
72 : CSSValue(PrimitiveClass)
74 m_primitiveUnitType = CSS_NUMBER;
75 m_value.num = static_cast<double>(i);
78 template<> inline CSSPrimitiveValue::operator unsigned short() const
80 if (primitiveType() == CSS_NUMBER)
81 return value<unsigned short>();
87 template<> inline CSSPrimitiveValue::operator int() const
89 if (primitiveType() == CSS_NUMBER)
96 template<> inline CSSPrimitiveValue::operator unsigned() const
98 if (primitiveType() == CSS_NUMBER)
99 return value<unsigned>();
101 ASSERT_NOT_REACHED();
106 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(float i)
107 : CSSValue(PrimitiveClass)
109 m_primitiveUnitType = CSS_NUMBER;
110 m_value.num = static_cast<double>(i);
113 template<> inline CSSPrimitiveValue::operator float() const
115 if (primitiveType() == CSS_NUMBER)
116 return value<float>();
118 ASSERT_NOT_REACHED();
122 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineClampValue i)
123 : CSSValue(PrimitiveClass)
125 m_primitiveUnitType = i.isPercentage() ? CSS_PERCENTAGE : CSS_NUMBER;
126 m_value.num = static_cast<double>(i.value());
129 template<> inline CSSPrimitiveValue::operator LineClampValue() const
131 if (primitiveType() == CSS_NUMBER)
132 return LineClampValue(value<int>(), LineClampLineCount);
134 if (primitiveType() == CSS_PERCENTAGE)
135 return LineClampValue(value<int>(), LineClampPercentage);
137 ASSERT_NOT_REACHED();
138 return LineClampValue();
141 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CSSReflectionDirection e)
142 : CSSValue(PrimitiveClass)
144 m_primitiveUnitType = CSS_VALUE_ID;
146 case ReflectionAbove:
147 m_value.valueID = CSSValueAbove;
149 case ReflectionBelow:
150 m_value.valueID = CSSValueBelow;
153 m_value.valueID = CSSValueLeft;
155 case ReflectionRight:
156 m_value.valueID = CSSValueRight;
160 template<> inline CSSPrimitiveValue::operator CSSReflectionDirection() const
164 switch (m_value.valueID) {
166 return ReflectionAbove;
168 return ReflectionBelow;
170 return ReflectionLeft;
172 return ReflectionRight;
177 ASSERT_NOT_REACHED();
178 return ReflectionBelow;
181 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ColumnFill columnFill)
182 : CSSValue(PrimitiveClass)
184 m_primitiveUnitType = CSS_VALUE_ID;
185 switch (columnFill) {
187 m_value.valueID = CSSValueAuto;
189 case ColumnFillBalance:
190 m_value.valueID = CSSValueBalance;
195 template<> inline CSSPrimitiveValue::operator ColumnFill() const
197 if (m_primitiveUnitType == CSS_VALUE_ID) {
198 if (m_value.valueID == CSSValueBalance)
199 return ColumnFillBalance;
200 if (m_value.valueID == CSSValueAuto)
201 return ColumnFillAuto;
203 ASSERT_NOT_REACHED();
204 return ColumnFillBalance;
207 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ColumnSpan columnSpan)
208 : CSSValue(PrimitiveClass)
210 m_primitiveUnitType = CSS_VALUE_ID;
211 switch (columnSpan) {
213 m_value.valueID = CSSValueAll;
216 m_value.valueID = CSSValueNone;
221 template<> inline CSSPrimitiveValue::operator ColumnSpan() const
223 // Map 1 to none for compatibility reasons.
224 if (m_primitiveUnitType == CSS_NUMBER && m_value.num == 1)
225 return ColumnSpanNone;
229 switch (m_value.valueID) {
231 return ColumnSpanAll;
233 return ColumnSpanNone;
238 ASSERT_NOT_REACHED();
239 return ColumnSpanNone;
243 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(PrintColorAdjust value)
244 : CSSValue(PrimitiveClass)
246 m_primitiveUnitType = CSS_VALUE_ID;
248 case PrintColorAdjustExact:
249 m_value.valueID = CSSValueExact;
251 case PrintColorAdjustEconomy:
252 m_value.valueID = CSSValueEconomy;
257 template<> inline CSSPrimitiveValue::operator PrintColorAdjust() const
261 switch (m_value.valueID) {
262 case CSSValueEconomy:
263 return PrintColorAdjustEconomy;
265 return PrintColorAdjustExact;
270 ASSERT_NOT_REACHED();
271 return PrintColorAdjustEconomy;
275 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBorderStyle e)
276 : CSSValue(PrimitiveClass)
278 m_primitiveUnitType = CSS_VALUE_ID;
281 m_value.valueID = CSSValueNone;
284 m_value.valueID = CSSValueHidden;
287 m_value.valueID = CSSValueInset;
290 m_value.valueID = CSSValueGroove;
293 m_value.valueID = CSSValueRidge;
296 m_value.valueID = CSSValueOutset;
299 m_value.valueID = CSSValueDotted;
302 m_value.valueID = CSSValueDashed;
305 m_value.valueID = CSSValueSolid;
308 m_value.valueID = CSSValueDouble;
313 template<> inline CSSPrimitiveValue::operator EBorderStyle() const
317 if (m_value.valueID == CSSValueAuto) // Valid for CSS outline-style
319 return (EBorderStyle)(m_value.valueID - CSSValueNone);
322 template<> inline CSSPrimitiveValue::operator OutlineIsAuto() const
326 if (m_value.valueID == CSSValueAuto)
331 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CompositeOperator e)
332 : CSSValue(PrimitiveClass)
334 m_primitiveUnitType = CSS_VALUE_ID;
337 m_value.valueID = CSSValueClear;
340 m_value.valueID = CSSValueCopy;
342 case CompositeSourceOver:
343 m_value.valueID = CSSValueSourceOver;
345 case CompositeSourceIn:
346 m_value.valueID = CSSValueSourceIn;
348 case CompositeSourceOut:
349 m_value.valueID = CSSValueSourceOut;
351 case CompositeSourceAtop:
352 m_value.valueID = CSSValueSourceAtop;
354 case CompositeDestinationOver:
355 m_value.valueID = CSSValueDestinationOver;
357 case CompositeDestinationIn:
358 m_value.valueID = CSSValueDestinationIn;
360 case CompositeDestinationOut:
361 m_value.valueID = CSSValueDestinationOut;
363 case CompositeDestinationAtop:
364 m_value.valueID = CSSValueDestinationAtop;
367 m_value.valueID = CSSValueXor;
369 case CompositePlusDarker:
370 m_value.valueID = CSSValuePlusDarker;
372 case CompositePlusLighter:
373 m_value.valueID = CSSValuePlusLighter;
375 case CompositeDifference:
376 ASSERT_NOT_REACHED();
381 template<> inline CSSPrimitiveValue::operator CompositeOperator() const
385 switch (m_value.valueID) {
387 return CompositeClear;
389 return CompositeCopy;
390 case CSSValueSourceOver:
391 return CompositeSourceOver;
392 case CSSValueSourceIn:
393 return CompositeSourceIn;
394 case CSSValueSourceOut:
395 return CompositeSourceOut;
396 case CSSValueSourceAtop:
397 return CompositeSourceAtop;
398 case CSSValueDestinationOver:
399 return CompositeDestinationOver;
400 case CSSValueDestinationIn:
401 return CompositeDestinationIn;
402 case CSSValueDestinationOut:
403 return CompositeDestinationOut;
404 case CSSValueDestinationAtop:
405 return CompositeDestinationAtop;
408 case CSSValuePlusDarker:
409 return CompositePlusDarker;
410 case CSSValuePlusLighter:
411 return CompositePlusLighter;
416 ASSERT_NOT_REACHED();
417 return CompositeClear;
420 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
421 : CSSValue(PrimitiveClass)
423 m_primitiveUnitType = CSS_VALUE_ID;
426 m_value.valueID = CSSValueNone;
429 m_value.valueID = CSSValueCheckbox;
432 m_value.valueID = CSSValueRadio;
435 m_value.valueID = CSSValuePushButton;
437 case SquareButtonPart:
438 m_value.valueID = CSSValueSquareButton;
441 m_value.valueID = CSSValueButton;
443 case ButtonBevelPart:
444 m_value.valueID = CSSValueButtonBevel;
446 case DefaultButtonPart:
447 m_value.valueID = CSSValueDefaultButton;
449 case InnerSpinButtonPart:
450 m_value.valueID = CSSValueInnerSpinButton;
453 m_value.valueID = CSSValueListbox;
456 m_value.valueID = CSSValueListitem;
458 case MediaEnterFullscreenButtonPart:
459 m_value.valueID = CSSValueMediaEnterFullscreenButton;
461 case MediaExitFullscreenButtonPart:
462 m_value.valueID = CSSValueMediaExitFullscreenButton;
464 case MediaPlayButtonPart:
465 m_value.valueID = CSSValueMediaPlayButton;
467 case MediaOverlayPlayButtonPart:
468 m_value.valueID = CSSValueMediaOverlayPlayButton;
470 case MediaMuteButtonPart:
471 m_value.valueID = CSSValueMediaMuteButton;
473 case MediaSeekBackButtonPart:
474 m_value.valueID = CSSValueMediaSeekBackButton;
476 case MediaSeekForwardButtonPart:
477 m_value.valueID = CSSValueMediaSeekForwardButton;
479 case MediaRewindButtonPart:
480 m_value.valueID = CSSValueMediaRewindButton;
482 case MediaReturnToRealtimeButtonPart:
483 m_value.valueID = CSSValueMediaReturnToRealtimeButton;
485 case MediaToggleClosedCaptionsButtonPart:
486 m_value.valueID = CSSValueMediaToggleClosedCaptionsButton;
488 case MediaSliderPart:
489 m_value.valueID = CSSValueMediaSlider;
491 case MediaSliderThumbPart:
492 m_value.valueID = CSSValueMediaSliderthumb;
494 case MediaVolumeSliderContainerPart:
495 m_value.valueID = CSSValueMediaVolumeSliderContainer;
497 case MediaVolumeSliderPart:
498 m_value.valueID = CSSValueMediaVolumeSlider;
500 case MediaVolumeSliderMuteButtonPart:
501 m_value.valueID = CSSValueMediaVolumeSliderMuteButton;
503 case MediaVolumeSliderThumbPart:
504 m_value.valueID = CSSValueMediaVolumeSliderthumb;
506 case MediaControlsBackgroundPart:
507 m_value.valueID = CSSValueMediaControlsBackground;
509 case MediaControlsFullscreenBackgroundPart:
510 m_value.valueID = CSSValueMediaControlsFullscreenBackground;
512 case MediaFullScreenVolumeSliderPart:
513 m_value.valueID = CSSValueMediaFullscreenVolumeSlider;
515 case MediaFullScreenVolumeSliderThumbPart:
516 m_value.valueID = CSSValueMediaFullscreenVolumeSliderThumb;
518 case MediaCurrentTimePart:
519 m_value.valueID = CSSValueMediaCurrentTimeDisplay;
521 case MediaTimeRemainingPart:
522 m_value.valueID = CSSValueMediaTimeRemainingDisplay;
524 case MediaControlsLightBarBackgroundPart:
525 m_value.valueID = CSSValueMediaControlsLightBarBackground;
527 case MediaControlsDarkBarBackgroundPart:
528 m_value.valueID = CSSValueMediaControlsDarkBarBackground;
531 m_value.valueID = CSSValueMenulist;
533 case MenulistButtonPart:
534 m_value.valueID = CSSValueMenulistButton;
536 case MenulistTextPart:
537 m_value.valueID = CSSValueMenulistText;
539 case MenulistTextFieldPart:
540 m_value.valueID = CSSValueMenulistTextfield;
543 m_value.valueID = CSSValueMeter;
545 case RelevancyLevelIndicatorPart:
546 m_value.valueID = CSSValueRelevancyLevelIndicator;
548 case ContinuousCapacityLevelIndicatorPart:
549 m_value.valueID = CSSValueContinuousCapacityLevelIndicator;
551 case DiscreteCapacityLevelIndicatorPart:
552 m_value.valueID = CSSValueDiscreteCapacityLevelIndicator;
554 case RatingLevelIndicatorPart:
555 m_value.valueID = CSSValueRatingLevelIndicator;
557 case ProgressBarPart:
558 m_value.valueID = CSSValueProgressBar;
560 case ProgressBarValuePart:
561 m_value.valueID = CSSValueProgressBarValue;
563 case SliderHorizontalPart:
564 m_value.valueID = CSSValueSliderHorizontal;
566 case SliderVerticalPart:
567 m_value.valueID = CSSValueSliderVertical;
569 case SliderThumbHorizontalPart:
570 m_value.valueID = CSSValueSliderthumbHorizontal;
572 case SliderThumbVerticalPart:
573 m_value.valueID = CSSValueSliderthumbVertical;
576 m_value.valueID = CSSValueCaret;
578 case SearchFieldPart:
579 m_value.valueID = CSSValueSearchfield;
581 case SearchFieldDecorationPart:
582 m_value.valueID = CSSValueSearchfieldDecoration;
584 case SearchFieldResultsDecorationPart:
585 m_value.valueID = CSSValueSearchfieldResultsDecoration;
587 case SearchFieldResultsButtonPart:
588 m_value.valueID = CSSValueSearchfieldResultsButton;
590 case SearchFieldCancelButtonPart:
591 m_value.valueID = CSSValueSearchfieldCancelButton;
593 case SnapshottedPluginOverlayPart:
594 m_value.valueID = CSSValueSnapshottedPluginOverlay;
597 m_value.valueID = CSSValueTextfield;
600 m_value.valueID = CSSValueTextarea;
602 case CapsLockIndicatorPart:
603 m_value.valueID = CSSValueCapsLockIndicator;
605 #if ENABLE(ATTACHMENT_ELEMENT)
607 m_value.valueID = CSSValueAttachment;
609 case BorderlessAttachmentPart:
610 m_value.valueID = CSSValueBorderlessAttachment;
613 #if ENABLE(SERVICE_CONTROLS)
614 case ImageControlsButtonPart:
615 m_value.valueID = CSSValueImageControlsButton;
618 #if ENABLE(APPLE_PAY)
619 case ApplePayButtonPart:
620 m_value.valueID = CSSValueApplePayButton;
626 template<> inline CSSPrimitiveValue::operator ControlPart() const
630 if (m_value.valueID == CSSValueNone)
631 return NoControlPart;
632 return ControlPart(m_value.valueID - CSSValueCheckbox + 1);
635 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBackfaceVisibility e)
636 : CSSValue(PrimitiveClass)
638 m_primitiveUnitType = CSS_VALUE_ID;
640 case BackfaceVisibilityVisible:
641 m_value.valueID = CSSValueVisible;
643 case BackfaceVisibilityHidden:
644 m_value.valueID = CSSValueHidden;
649 template<> inline CSSPrimitiveValue::operator EBackfaceVisibility() const
653 switch (m_value.valueID) {
654 case CSSValueVisible:
655 return BackfaceVisibilityVisible;
657 return BackfaceVisibilityHidden;
662 ASSERT_NOT_REACHED();
663 return BackfaceVisibilityHidden;
667 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillAttachment e)
668 : CSSValue(PrimitiveClass)
670 m_primitiveUnitType = CSS_VALUE_ID;
672 case ScrollBackgroundAttachment:
673 m_value.valueID = CSSValueScroll;
675 case LocalBackgroundAttachment:
676 m_value.valueID = CSSValueLocal;
678 case FixedBackgroundAttachment:
679 m_value.valueID = CSSValueFixed;
684 template<> inline CSSPrimitiveValue::operator EFillAttachment() const
688 switch (m_value.valueID) {
690 return ScrollBackgroundAttachment;
692 return LocalBackgroundAttachment;
694 return FixedBackgroundAttachment;
699 ASSERT_NOT_REACHED();
700 return ScrollBackgroundAttachment;
703 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillBox e)
704 : CSSValue(PrimitiveClass)
706 m_primitiveUnitType = CSS_VALUE_ID;
709 m_value.valueID = CSSValueBorderBox;
712 m_value.valueID = CSSValuePaddingBox;
715 m_value.valueID = CSSValueContentBox;
718 m_value.valueID = CSSValueText;
723 template<> inline CSSPrimitiveValue::operator EFillBox() const
727 switch (m_value.valueID) {
729 case CSSValueBorderBox:
730 return BorderFillBox;
731 case CSSValuePadding:
732 case CSSValuePaddingBox:
733 return PaddingFillBox;
734 case CSSValueContent:
735 case CSSValueContentBox:
736 return ContentFillBox;
738 case CSSValueWebkitText:
744 ASSERT_NOT_REACHED();
745 return BorderFillBox;
748 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFillRepeat e)
749 : CSSValue(PrimitiveClass)
751 m_primitiveUnitType = CSS_VALUE_ID;
754 m_value.valueID = CSSValueRepeat;
757 m_value.valueID = CSSValueNoRepeat;
760 m_value.valueID = CSSValueRound;
763 m_value.valueID = CSSValueSpace;
768 template<> inline CSSPrimitiveValue::operator EFillRepeat() const
772 switch (m_value.valueID) {
775 case CSSValueNoRepeat:
785 ASSERT_NOT_REACHED();
789 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxPack e)
790 : CSSValue(PrimitiveClass)
792 m_primitiveUnitType = CSS_VALUE_ID;
795 m_value.valueID = CSSValueStart;
798 m_value.valueID = CSSValueCenter;
801 m_value.valueID = CSSValueEnd;
804 m_value.valueID = CSSValueJustify;
809 template<> inline CSSPrimitiveValue::operator EBoxPack() const
813 switch (m_value.valueID) {
820 case CSSValueJustify:
826 ASSERT_NOT_REACHED();
830 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxAlignment e)
831 : CSSValue(PrimitiveClass)
833 m_primitiveUnitType = CSS_VALUE_ID;
836 m_value.valueID = CSSValueStretch;
839 m_value.valueID = CSSValueStart;
842 m_value.valueID = CSSValueCenter;
845 m_value.valueID = CSSValueEnd;
848 m_value.valueID = CSSValueBaseline;
853 template<> inline CSSPrimitiveValue::operator EBoxAlignment() const
857 switch (m_value.valueID) {
858 case CSSValueStretch:
866 case CSSValueBaseline:
872 ASSERT_NOT_REACHED();
876 #if ENABLE(CSS_BOX_DECORATION_BREAK)
877 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDecorationBreak e)
878 : CSSValue(PrimitiveClass)
880 m_primitiveUnitType = CSS_VALUE_ID;
883 m_value.valueID = CSSValueSlice;
886 m_value.valueID = CSSValueClone;
891 template<> inline CSSPrimitiveValue::operator EBoxDecorationBreak() const
895 switch (m_value.valueID) {
904 ASSERT_NOT_REACHED();
909 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Edge e)
910 : CSSValue(PrimitiveClass)
912 m_primitiveUnitType = CSS_VALUE_ID;
915 m_value.valueID = CSSValueTop;
918 m_value.valueID = CSSValueRight;
921 m_value.valueID = CSSValueBottom;
924 m_value.valueID = CSSValueLeft;
929 template<> inline CSSPrimitiveValue::operator Edge() const
933 switch (m_value.valueID) {
946 ASSERT_NOT_REACHED();
950 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxSizing e)
951 : CSSValue(PrimitiveClass)
953 m_primitiveUnitType = CSS_VALUE_ID;
956 m_value.valueID = CSSValueBorderBox;
959 m_value.valueID = CSSValueContentBox;
964 template<> inline CSSPrimitiveValue::operator EBoxSizing() const
968 switch (m_value.valueID) {
969 case CSSValueBorderBox:
971 case CSSValueContentBox:
977 ASSERT_NOT_REACHED();
981 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxDirection e)
982 : CSSValue(PrimitiveClass)
984 m_primitiveUnitType = CSS_VALUE_ID;
987 m_value.valueID = CSSValueNormal;
990 m_value.valueID = CSSValueReverse;
995 template<> inline CSSPrimitiveValue::operator EBoxDirection() const
999 switch (m_value.valueID) {
1000 case CSSValueNormal:
1002 case CSSValueReverse:
1008 ASSERT_NOT_REACHED();
1012 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxLines e)
1013 : CSSValue(PrimitiveClass)
1015 m_primitiveUnitType = CSS_VALUE_ID;
1018 m_value.valueID = CSSValueSingle;
1021 m_value.valueID = CSSValueMultiple;
1026 template<> inline CSSPrimitiveValue::operator EBoxLines() const
1028 ASSERT(isValueID());
1030 switch (m_value.valueID) {
1031 case CSSValueSingle:
1033 case CSSValueMultiple:
1039 ASSERT_NOT_REACHED();
1043 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EBoxOrient e)
1044 : CSSValue(PrimitiveClass)
1046 m_primitiveUnitType = CSS_VALUE_ID;
1049 m_value.valueID = CSSValueHorizontal;
1052 m_value.valueID = CSSValueVertical;
1057 template<> inline CSSPrimitiveValue::operator EBoxOrient() const
1059 ASSERT(isValueID());
1061 switch (m_value.valueID) {
1062 case CSSValueHorizontal:
1063 case CSSValueInlineAxis:
1065 case CSSValueVertical:
1066 case CSSValueBlockAxis:
1072 ASSERT_NOT_REACHED();
1076 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECaptionSide e)
1077 : CSSValue(PrimitiveClass)
1079 m_primitiveUnitType = CSS_VALUE_ID;
1082 m_value.valueID = CSSValueLeft;
1085 m_value.valueID = CSSValueRight;
1088 m_value.valueID = CSSValueTop;
1091 m_value.valueID = CSSValueBottom;
1096 template<> inline CSSPrimitiveValue::operator ECaptionSide() const
1098 ASSERT(isValueID());
1100 switch (m_value.valueID) {
1107 case CSSValueBottom:
1113 ASSERT_NOT_REACHED();
1117 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EClear e)
1118 : CSSValue(PrimitiveClass)
1120 m_primitiveUnitType = CSS_VALUE_ID;
1123 m_value.valueID = CSSValueNone;
1126 m_value.valueID = CSSValueLeft;
1129 m_value.valueID = CSSValueRight;
1132 m_value.valueID = CSSValueBoth;
1137 template<> inline CSSPrimitiveValue::operator EClear() const
1139 ASSERT(isValueID());
1141 switch (m_value.valueID) {
1154 ASSERT_NOT_REACHED();
1158 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ECursor e)
1159 : CSSValue(PrimitiveClass)
1161 m_primitiveUnitType = CSS_VALUE_ID;
1164 m_value.valueID = CSSValueAuto;
1167 m_value.valueID = CSSValueDefault;
1170 m_value.valueID = CSSValueNone;
1172 case CursorContextMenu:
1173 m_value.valueID = CSSValueContextMenu;
1176 m_value.valueID = CSSValueHelp;
1179 m_value.valueID = CSSValuePointer;
1181 case CursorProgress:
1182 m_value.valueID = CSSValueProgress;
1185 m_value.valueID = CSSValueWait;
1188 m_value.valueID = CSSValueCell;
1190 case CursorCrosshair:
1191 m_value.valueID = CSSValueCrosshair;
1194 m_value.valueID = CSSValueText;
1196 case CursorVerticalText:
1197 m_value.valueID = CSSValueVerticalText;
1200 m_value.valueID = CSSValueAlias;
1203 m_value.valueID = CSSValueCopy;
1206 m_value.valueID = CSSValueMove;
1209 m_value.valueID = CSSValueNoDrop;
1211 case CursorNotAllowed:
1212 m_value.valueID = CSSValueNotAllowed;
1215 m_value.valueID = CSSValueGrab;
1217 case CursorGrabbing:
1218 m_value.valueID = CSSValueGrabbing;
1221 m_value.valueID = CSSValueEResize;
1224 m_value.valueID = CSSValueNResize;
1226 case CursorNeResize:
1227 m_value.valueID = CSSValueNeResize;
1229 case CursorNwResize:
1230 m_value.valueID = CSSValueNwResize;
1233 m_value.valueID = CSSValueSResize;
1235 case CursorSeResize:
1236 m_value.valueID = CSSValueSeResize;
1238 case CursorSwResize:
1239 m_value.valueID = CSSValueSwResize;
1242 m_value.valueID = CSSValueWResize;
1244 case CursorEwResize:
1245 m_value.valueID = CSSValueEwResize;
1247 case CursorNsResize:
1248 m_value.valueID = CSSValueNsResize;
1250 case CursorNeswResize:
1251 m_value.valueID = CSSValueNeswResize;
1253 case CursorNwseResize:
1254 m_value.valueID = CSSValueNwseResize;
1256 case CursorColResize:
1257 m_value.valueID = CSSValueColResize;
1259 case CursorRowResize:
1260 m_value.valueID = CSSValueRowResize;
1262 case CursorAllScroll:
1263 m_value.valueID = CSSValueAllScroll;
1266 m_value.valueID = CSSValueZoomIn;
1269 m_value.valueID = CSSValueZoomOut;
1274 template<> inline CSSPrimitiveValue::operator ECursor() const
1276 ASSERT(isValueID());
1277 switch (m_value.valueID) {
1280 case CSSValueWebkitGrab:
1282 case CSSValueWebkitGrabbing:
1283 return CursorGrabbing;
1284 case CSSValueWebkitZoomIn:
1285 return CursorZoomIn;
1286 case CSSValueWebkitZoomOut:
1287 return CursorZoomOut;
1291 return static_cast<ECursor>(m_value.valueID - CSSValueAuto);
1295 #if ENABLE(CURSOR_VISIBILITY)
1296 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(CursorVisibility e)
1297 : CSSValue(PrimitiveClass)
1299 m_primitiveUnitType = CSS_VALUE_ID;
1301 case CursorVisibilityAuto:
1302 m_value.valueID = CSSValueAuto;
1304 case CursorVisibilityAutoHide:
1305 m_value.valueID = CSSValueAutoHide;
1310 template<> inline CSSPrimitiveValue::operator CursorVisibility() const
1312 ASSERT(isValueID());
1314 if (m_value.valueID == CSSValueAuto)
1315 return CursorVisibilityAuto;
1316 if (m_value.valueID == CSSValueAutoHide)
1317 return CursorVisibilityAutoHide;
1319 ASSERT_NOT_REACHED();
1320 return CursorVisibilityAuto;
1324 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EDisplay e)
1325 : CSSValue(PrimitiveClass)
1327 m_primitiveUnitType = CSS_VALUE_ID;
1330 m_value.valueID = CSSValueInline;
1333 m_value.valueID = CSSValueBlock;
1336 m_value.valueID = CSSValueListItem;
1339 m_value.valueID = CSSValueCompact;
1342 m_value.valueID = CSSValueInlineBlock;
1345 m_value.valueID = CSSValueTable;
1348 m_value.valueID = CSSValueInlineTable;
1350 case TABLE_ROW_GROUP:
1351 m_value.valueID = CSSValueTableRowGroup;
1353 case TABLE_HEADER_GROUP:
1354 m_value.valueID = CSSValueTableHeaderGroup;
1356 case TABLE_FOOTER_GROUP:
1357 m_value.valueID = CSSValueTableFooterGroup;
1360 m_value.valueID = CSSValueTableRow;
1362 case TABLE_COLUMN_GROUP:
1363 m_value.valueID = CSSValueTableColumnGroup;
1366 m_value.valueID = CSSValueTableColumn;
1369 m_value.valueID = CSSValueTableCell;
1372 m_value.valueID = CSSValueTableCaption;
1375 m_value.valueID = CSSValueWebkitBox;
1378 m_value.valueID = CSSValueWebkitInlineBox;
1382 m_value.valueID = CSSValueFlex;
1385 case WEBKIT_INLINE_FLEX:
1386 m_value.valueID = CSSValueInlineFlex;
1389 m_value.valueID = CSSValueGrid;
1392 m_value.valueID = CSSValueInlineGrid;
1395 m_value.valueID = CSSValueNone;
1398 m_value.valueID = CSSValueContents;
1403 template<> inline CSSPrimitiveValue::operator EDisplay() const
1405 ASSERT(isValueID());
1407 if (m_value.valueID == CSSValueNone)
1410 EDisplay display = static_cast<EDisplay>(m_value.valueID - CSSValueInline);
1411 ASSERT(display >= INLINE && display <= NONE);
1412 if (display == WEBKIT_FLEX)
1414 if (display == WEBKIT_INLINE_FLEX)
1419 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EEmptyCell e)
1420 : CSSValue(PrimitiveClass)
1422 m_primitiveUnitType = CSS_VALUE_ID;
1425 m_value.valueID = CSSValueShow;
1428 m_value.valueID = CSSValueHide;
1433 template<> inline CSSPrimitiveValue::operator EEmptyCell() const
1435 ASSERT(isValueID());
1437 switch (m_value.valueID) {
1446 ASSERT_NOT_REACHED();
1450 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexDirection e)
1451 : CSSValue(PrimitiveClass)
1453 m_primitiveUnitType = CSS_VALUE_ID;
1456 m_value.valueID = CSSValueRow;
1458 case FlowRowReverse:
1459 m_value.valueID = CSSValueRowReverse;
1462 m_value.valueID = CSSValueColumn;
1464 case FlowColumnReverse:
1465 m_value.valueID = CSSValueColumnReverse;
1470 template<> inline CSSPrimitiveValue::operator EFlexDirection() const
1472 ASSERT(isValueID());
1474 switch (m_value.valueID) {
1477 case CSSValueRowReverse:
1478 return FlowRowReverse;
1479 case CSSValueColumn:
1481 case CSSValueColumnReverse:
1482 return FlowColumnReverse;
1487 ASSERT_NOT_REACHED();
1491 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignContent e)
1492 : CSSValue(PrimitiveClass)
1494 m_primitiveUnitType = CSS_VALUE_ID;
1496 case AlignContentFlexStart:
1497 m_value.valueID = CSSValueFlexStart;
1499 case AlignContentFlexEnd:
1500 m_value.valueID = CSSValueFlexEnd;
1502 case AlignContentCenter:
1503 m_value.valueID = CSSValueCenter;
1505 case AlignContentSpaceBetween:
1506 m_value.valueID = CSSValueSpaceBetween;
1508 case AlignContentSpaceAround:
1509 m_value.valueID = CSSValueSpaceAround;
1511 case AlignContentStretch:
1512 m_value.valueID = CSSValueStretch;
1517 template<> inline CSSPrimitiveValue::operator EAlignContent() const
1519 ASSERT(isValueID());
1521 switch (m_value.valueID) {
1522 case CSSValueFlexStart:
1523 return AlignContentFlexStart;
1524 case CSSValueFlexEnd:
1525 return AlignContentFlexEnd;
1526 case CSSValueCenter:
1527 return AlignContentCenter;
1528 case CSSValueSpaceBetween:
1529 return AlignContentSpaceBetween;
1530 case CSSValueSpaceAround:
1531 return AlignContentSpaceAround;
1532 case CSSValueStretch:
1533 return AlignContentStretch;
1538 ASSERT_NOT_REACHED();
1539 return AlignContentStretch;
1542 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexWrap e)
1543 : CSSValue(PrimitiveClass)
1545 m_primitiveUnitType = CSS_VALUE_ID;
1548 m_value.valueID = CSSValueNowrap;
1551 m_value.valueID = CSSValueWrap;
1553 case FlexWrapReverse:
1554 m_value.valueID = CSSValueWrapReverse;
1559 template<> inline CSSPrimitiveValue::operator EFlexWrap() const
1561 ASSERT(isValueID());
1563 switch (m_value.valueID) {
1564 case CSSValueNowrap:
1568 case CSSValueWrapReverse:
1569 return FlexWrapReverse;
1574 ASSERT_NOT_REACHED();
1578 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e)
1579 : CSSValue(PrimitiveClass)
1581 m_primitiveUnitType = CSS_VALUE_ID;
1584 m_value.valueID = CSSValueNone;
1587 m_value.valueID = CSSValueLeft;
1590 m_value.valueID = CSSValueRight;
1595 template<> inline CSSPrimitiveValue::operator EFloat() const
1597 ASSERT(isValueID());
1599 switch (m_value.valueID) {
1605 case CSSValueCenter: // Non-standard CSS value.
1611 ASSERT_NOT_REACHED();
1615 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineBreak e)
1616 : CSSValue(PrimitiveClass)
1618 m_primitiveUnitType = CSS_VALUE_ID;
1621 m_value.valueID = CSSValueAuto;
1623 case LineBreakLoose:
1624 m_value.valueID = CSSValueLoose;
1626 case LineBreakNormal:
1627 m_value.valueID = CSSValueNormal;
1629 case LineBreakStrict:
1630 m_value.valueID = CSSValueStrict;
1632 case LineBreakAfterWhiteSpace:
1633 m_value.valueID = CSSValueAfterWhiteSpace;
1638 template<> inline CSSPrimitiveValue::operator HangingPunctuation() const
1640 ASSERT(isValueID());
1642 switch (m_value.valueID) {
1644 return NoHangingPunctuation;
1646 return FirstHangingPunctuation;
1648 return LastHangingPunctuation;
1649 case CSSValueAllowEnd:
1650 return AllowEndHangingPunctuation;
1651 case CSSValueForceEnd:
1652 return ForceEndHangingPunctuation;
1657 ASSERT_NOT_REACHED();
1658 return NoHangingPunctuation;
1661 template<> inline CSSPrimitiveValue::operator LineBreak() const
1663 ASSERT(isValueID());
1665 switch (m_value.valueID) {
1667 return LineBreakAuto;
1669 return LineBreakLoose;
1670 case CSSValueNormal:
1671 return LineBreakNormal;
1672 case CSSValueStrict:
1673 return LineBreakStrict;
1674 case CSSValueAfterWhiteSpace:
1675 return LineBreakAfterWhiteSpace;
1680 ASSERT_NOT_REACHED();
1681 return LineBreakAuto;
1684 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStylePosition e)
1685 : CSSValue(PrimitiveClass)
1687 m_primitiveUnitType = CSS_VALUE_ID;
1690 m_value.valueID = CSSValueOutside;
1693 m_value.valueID = CSSValueInside;
1698 template<> inline CSSPrimitiveValue::operator EListStylePosition() const
1700 ASSERT(isValueID());
1702 switch (m_value.valueID) {
1703 case CSSValueOutside:
1705 case CSSValueInside:
1711 ASSERT_NOT_REACHED();
1715 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EListStyleType e)
1716 : CSSValue(PrimitiveClass)
1718 m_primitiveUnitType = CSS_VALUE_ID;
1721 m_value.valueID = CSSValueAfar;
1724 m_value.valueID = CSSValueAmharic;
1726 case AmharicAbegede:
1727 m_value.valueID = CSSValueAmharicAbegede;
1730 m_value.valueID = CSSValueArabicIndic;
1733 m_value.valueID = CSSValueArmenian;
1736 m_value.valueID = CSSValueAsterisks;
1738 case BinaryListStyle:
1739 m_value.valueID = CSSValueBinary;
1742 m_value.valueID = CSSValueBengali;
1745 m_value.valueID = CSSValueCambodian;
1748 m_value.valueID = CSSValueCircle;
1750 case CjkEarthlyBranch:
1751 m_value.valueID = CSSValueCjkEarthlyBranch;
1753 case CjkHeavenlyStem:
1754 m_value.valueID = CSSValueCjkHeavenlyStem;
1756 case CJKIdeographic:
1757 m_value.valueID = CSSValueCjkIdeographic;
1759 case DecimalLeadingZero:
1760 m_value.valueID = CSSValueDecimalLeadingZero;
1762 case DecimalListStyle:
1763 m_value.valueID = CSSValueDecimal;
1766 m_value.valueID = CSSValueDevanagari;
1769 m_value.valueID = CSSValueDisc;
1772 m_value.valueID = CSSValueEthiopic;
1774 case EthiopicAbegede:
1775 m_value.valueID = CSSValueEthiopicAbegede;
1777 case EthiopicAbegedeAmEt:
1778 m_value.valueID = CSSValueEthiopicAbegedeAmEt;
1780 case EthiopicAbegedeGez:
1781 m_value.valueID = CSSValueEthiopicAbegedeGez;
1783 case EthiopicAbegedeTiEr:
1784 m_value.valueID = CSSValueEthiopicAbegedeTiEr;
1786 case EthiopicAbegedeTiEt:
1787 m_value.valueID = CSSValueEthiopicAbegedeTiEt;
1789 case EthiopicHalehameAaEr:
1790 m_value.valueID = CSSValueEthiopicHalehameAaEr;
1792 case EthiopicHalehameAaEt:
1793 m_value.valueID = CSSValueEthiopicHalehameAaEt;
1795 case EthiopicHalehameAmEt:
1796 m_value.valueID = CSSValueEthiopicHalehameAmEt;
1798 case EthiopicHalehameGez:
1799 m_value.valueID = CSSValueEthiopicHalehameGez;
1801 case EthiopicHalehameOmEt:
1802 m_value.valueID = CSSValueEthiopicHalehameOmEt;
1804 case EthiopicHalehameSidEt:
1805 m_value.valueID = CSSValueEthiopicHalehameSidEt;
1807 case EthiopicHalehameSoEt:
1808 m_value.valueID = CSSValueEthiopicHalehameSoEt;
1810 case EthiopicHalehameTiEr:
1811 m_value.valueID = CSSValueEthiopicHalehameTiEr;
1813 case EthiopicHalehameTiEt:
1814 m_value.valueID = CSSValueEthiopicHalehameTiEt;
1816 case EthiopicHalehameTig:
1817 m_value.valueID = CSSValueEthiopicHalehameTig;
1820 m_value.valueID = CSSValueFootnotes;
1823 m_value.valueID = CSSValueGeorgian;
1826 m_value.valueID = CSSValueGujarati;
1829 m_value.valueID = CSSValueGurmukhi;
1832 m_value.valueID = CSSValueHangul;
1834 case HangulConsonant:
1835 m_value.valueID = CSSValueHangulConsonant;
1838 m_value.valueID = CSSValueHebrew;
1841 m_value.valueID = CSSValueHiragana;
1844 m_value.valueID = CSSValueHiraganaIroha;
1847 m_value.valueID = CSSValueKannada;
1850 m_value.valueID = CSSValueKatakana;
1853 m_value.valueID = CSSValueKatakanaIroha;
1856 m_value.valueID = CSSValueKhmer;
1859 m_value.valueID = CSSValueLao;
1862 m_value.valueID = CSSValueLowerAlpha;
1865 m_value.valueID = CSSValueLowerArmenian;
1868 m_value.valueID = CSSValueLowerGreek;
1870 case LowerHexadecimal:
1871 m_value.valueID = CSSValueLowerHexadecimal;
1874 m_value.valueID = CSSValueLowerLatin;
1876 case LowerNorwegian:
1877 m_value.valueID = CSSValueLowerNorwegian;
1880 m_value.valueID = CSSValueLowerRoman;
1883 m_value.valueID = CSSValueMalayalam;
1886 m_value.valueID = CSSValueMongolian;
1889 m_value.valueID = CSSValueMyanmar;
1892 m_value.valueID = CSSValueNone;
1895 m_value.valueID = CSSValueOctal;
1898 m_value.valueID = CSSValueOriya;
1901 m_value.valueID = CSSValueOromo;
1904 m_value.valueID = CSSValuePersian;
1907 m_value.valueID = CSSValueSidama;
1910 m_value.valueID = CSSValueSomali;
1913 m_value.valueID = CSSValueSquare;
1916 m_value.valueID = CSSValueTelugu;
1919 m_value.valueID = CSSValueThai;
1922 m_value.valueID = CSSValueTibetan;
1925 m_value.valueID = CSSValueTigre;
1928 m_value.valueID = CSSValueTigrinyaEr;
1930 case TigrinyaErAbegede:
1931 m_value.valueID = CSSValueTigrinyaErAbegede;
1934 m_value.valueID = CSSValueTigrinyaEt;
1936 case TigrinyaEtAbegede:
1937 m_value.valueID = CSSValueTigrinyaEtAbegede;
1940 m_value.valueID = CSSValueUpperAlpha;
1943 m_value.valueID = CSSValueUpperArmenian;
1946 m_value.valueID = CSSValueUpperGreek;
1948 case UpperHexadecimal:
1949 m_value.valueID = CSSValueUpperHexadecimal;
1952 m_value.valueID = CSSValueUpperLatin;
1954 case UpperNorwegian:
1955 m_value.valueID = CSSValueUpperNorwegian;
1958 m_value.valueID = CSSValueUpperRoman;
1961 m_value.valueID = CSSValueUrdu;
1966 template<> inline CSSPrimitiveValue::operator EListStyleType() const
1968 ASSERT(isValueID());
1970 switch (m_value.valueID) {
1972 return NoneListStyle;
1974 return static_cast<EListStyleType>(m_value.valueID - CSSValueDisc);
1978 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarginCollapse e)
1979 : CSSValue(PrimitiveClass)
1981 m_primitiveUnitType = CSS_VALUE_ID;
1984 m_value.valueID = CSSValueCollapse;
1987 m_value.valueID = CSSValueSeparate;
1990 m_value.valueID = CSSValueDiscard;
1995 template<> inline CSSPrimitiveValue::operator EMarginCollapse() const
1997 ASSERT(isValueID());
1999 switch (m_value.valueID) {
2000 case CSSValueCollapse:
2002 case CSSValueSeparate:
2004 case CSSValueDiscard:
2010 ASSERT_NOT_REACHED();
2014 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeBehavior e)
2015 : CSSValue(PrimitiveClass)
2017 m_primitiveUnitType = CSS_VALUE_ID;
2020 m_value.valueID = CSSValueNone;
2023 m_value.valueID = CSSValueScroll;
2026 m_value.valueID = CSSValueSlide;
2029 m_value.valueID = CSSValueAlternate;
2034 template<> inline CSSPrimitiveValue::operator EMarqueeBehavior() const
2036 ASSERT(isValueID());
2038 switch (m_value.valueID) {
2041 case CSSValueScroll:
2045 case CSSValueAlternate:
2051 ASSERT_NOT_REACHED();
2055 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(RegionFragment e)
2056 : CSSValue(PrimitiveClass)
2058 m_primitiveUnitType = CSS_VALUE_ID;
2060 case AutoRegionFragment:
2061 m_value.valueID = CSSValueAuto;
2063 case BreakRegionFragment:
2064 m_value.valueID = CSSValueBreak;
2069 template<> inline CSSPrimitiveValue::operator RegionFragment() const
2071 ASSERT(isValueID());
2073 switch (m_value.valueID) {
2075 return AutoRegionFragment;
2077 return BreakRegionFragment;
2082 ASSERT_NOT_REACHED();
2083 return AutoRegionFragment;
2086 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EMarqueeDirection e)
2087 : CSSValue(PrimitiveClass)
2089 m_primitiveUnitType = CSS_VALUE_ID;
2092 m_value.valueID = CSSValueForwards;
2095 m_value.valueID = CSSValueBackwards;
2098 m_value.valueID = CSSValueAuto;
2101 m_value.valueID = CSSValueUp;
2104 m_value.valueID = CSSValueDown;
2107 m_value.valueID = CSSValueLeft;
2110 m_value.valueID = CSSValueRight;
2115 template<> inline CSSPrimitiveValue::operator EMarqueeDirection() const
2117 ASSERT(isValueID());
2119 switch (m_value.valueID) {
2120 case CSSValueForwards:
2122 case CSSValueBackwards:
2127 case CSSValueUp: // We don't support vertical languages, so AHEAD just maps to UP.
2129 case CSSValueReverse:
2130 case CSSValueDown: // REVERSE just maps to DOWN, since we don't do vertical text.
2140 ASSERT_NOT_REACHED();
2144 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ENBSPMode e)
2145 : CSSValue(PrimitiveClass)
2147 m_primitiveUnitType = CSS_VALUE_ID;
2150 m_value.valueID = CSSValueNormal;
2153 m_value.valueID = CSSValueSpace;
2158 template<> inline CSSPrimitiveValue::operator ENBSPMode() const
2160 ASSERT(isValueID());
2162 switch (m_value.valueID) {
2165 case CSSValueNormal:
2171 ASSERT_NOT_REACHED();
2175 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e)
2176 : CSSValue(PrimitiveClass)
2178 m_primitiveUnitType = CSS_VALUE_ID;
2181 m_value.valueID = CSSValueVisible;
2184 m_value.valueID = CSSValueHidden;
2187 m_value.valueID = CSSValueScroll;
2190 m_value.valueID = CSSValueAuto;
2193 m_value.valueID = CSSValueOverlay;
2196 m_value.valueID = CSSValueWebkitPagedX;
2199 m_value.valueID = CSSValueWebkitPagedY;
2204 template<> inline CSSPrimitiveValue::operator EOverflow() const
2206 ASSERT(isValueID());
2208 switch (m_value.valueID) {
2209 case CSSValueVisible:
2211 case CSSValueHidden:
2213 case CSSValueScroll:
2217 case CSSValueOverlay:
2219 case CSSValueWebkitPagedX:
2221 case CSSValueWebkitPagedY:
2227 ASSERT_NOT_REACHED();
2231 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BreakBetween e)
2232 : CSSValue(PrimitiveClass)
2234 m_primitiveUnitType = CSS_VALUE_ID;
2236 case AutoBreakBetween:
2237 m_value.valueID = CSSValueAuto;
2239 case AvoidBreakBetween:
2240 m_value.valueID = CSSValueAvoid;
2242 case AvoidColumnBreakBetween:
2243 m_value.valueID = CSSValueAvoidColumn;
2245 case AvoidPageBreakBetween:
2246 m_value.valueID = CSSValueAvoidPage;
2248 case AvoidRegionBreakBetween:
2249 m_value.valueID = CSSValueAvoidRegion;
2251 case ColumnBreakBetween:
2252 m_value.valueID = CSSValueColumn;
2254 case PageBreakBetween:
2255 m_value.valueID = CSSValuePage;
2257 case RegionBreakBetween:
2258 m_value.valueID = CSSValueRegion;
2260 case LeftPageBreakBetween:
2261 m_value.valueID = CSSValueLeft;
2263 case RightPageBreakBetween:
2264 m_value.valueID = CSSValueRight;
2266 case RectoPageBreakBetween:
2267 m_value.valueID = CSSValueRecto;
2269 case VersoPageBreakBetween:
2270 m_value.valueID = CSSValueVerso;
2275 template<> inline CSSPrimitiveValue::operator BreakBetween() const
2277 ASSERT(isValueID());
2279 switch (m_value.valueID) {
2281 return AutoBreakBetween;
2283 return AvoidBreakBetween;
2284 case CSSValueAvoidColumn:
2285 return AvoidColumnBreakBetween;
2286 case CSSValueAvoidPage:
2287 return AvoidPageBreakBetween;
2288 case CSSValueAvoidRegion:
2289 return AvoidRegionBreakBetween;
2290 case CSSValueColumn:
2291 return ColumnBreakBetween;
2293 return PageBreakBetween;
2294 case CSSValueRegion:
2295 return RegionBreakBetween;
2297 return LeftPageBreakBetween;
2299 return RightPageBreakBetween;
2301 return RectoPageBreakBetween;
2303 return VersoPageBreakBetween;
2308 ASSERT_NOT_REACHED();
2309 return AutoBreakBetween;
2312 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BreakInside e)
2313 : CSSValue(PrimitiveClass)
2315 m_primitiveUnitType = CSS_VALUE_ID;
2317 case AutoBreakInside:
2318 m_value.valueID = CSSValueAuto;
2320 case AvoidBreakInside:
2321 m_value.valueID = CSSValueAvoid;
2323 case AvoidColumnBreakInside:
2324 m_value.valueID = CSSValueAvoidColumn;
2326 case AvoidPageBreakInside:
2327 m_value.valueID = CSSValueAvoidPage;
2329 case AvoidRegionBreakInside:
2330 m_value.valueID = CSSValueAvoidRegion;
2335 template<> inline CSSPrimitiveValue::operator BreakInside() const
2337 ASSERT(isValueID());
2339 switch (m_value.valueID) {
2341 return AutoBreakInside;
2343 return AvoidBreakInside;
2344 case CSSValueAvoidColumn:
2345 return AvoidColumnBreakInside;
2346 case CSSValueAvoidPage:
2347 return AvoidPageBreakInside;
2348 case CSSValueAvoidRegion:
2349 return AvoidRegionBreakInside;
2354 ASSERT_NOT_REACHED();
2355 return AutoBreakInside;
2358 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPosition e)
2359 : CSSValue(PrimitiveClass)
2361 m_primitiveUnitType = CSS_VALUE_ID;
2363 case StaticPosition:
2364 m_value.valueID = CSSValueStatic;
2366 case RelativePosition:
2367 m_value.valueID = CSSValueRelative;
2369 case AbsolutePosition:
2370 m_value.valueID = CSSValueAbsolute;
2373 m_value.valueID = CSSValueFixed;
2375 case StickyPosition:
2376 m_value.valueID = CSSValueWebkitSticky;
2381 template<> inline CSSPrimitiveValue::operator EPosition() const
2383 ASSERT(isValueID());
2385 switch (m_value.valueID) {
2386 case CSSValueStatic:
2387 return StaticPosition;
2388 case CSSValueRelative:
2389 return RelativePosition;
2390 case CSSValueAbsolute:
2391 return AbsolutePosition;
2393 return FixedPosition;
2394 case CSSValueWebkitSticky:
2395 return StickyPosition;
2400 ASSERT_NOT_REACHED();
2401 return StaticPosition;
2404 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EResize e)
2405 : CSSValue(PrimitiveClass)
2407 m_primitiveUnitType = CSS_VALUE_ID;
2410 m_value.valueID = CSSValueBoth;
2412 case RESIZE_HORIZONTAL:
2413 m_value.valueID = CSSValueHorizontal;
2415 case RESIZE_VERTICAL:
2416 m_value.valueID = CSSValueVertical;
2419 m_value.valueID = CSSValueNone;
2424 template<> inline CSSPrimitiveValue::operator EResize() const
2426 ASSERT(isValueID());
2428 switch (m_value.valueID) {
2431 case CSSValueHorizontal:
2432 return RESIZE_HORIZONTAL;
2433 case CSSValueVertical:
2434 return RESIZE_VERTICAL;
2436 ASSERT_NOT_REACHED(); // Depends on settings, thus should be handled by the caller.
2444 ASSERT_NOT_REACHED();
2448 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETableLayout e)
2449 : CSSValue(PrimitiveClass)
2451 m_primitiveUnitType = CSS_VALUE_ID;
2454 m_value.valueID = CSSValueAuto;
2457 m_value.valueID = CSSValueFixed;
2462 template<> inline CSSPrimitiveValue::operator ETableLayout() const
2464 ASSERT(isValueID());
2466 switch (m_value.valueID) {
2475 ASSERT_NOT_REACHED();
2479 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextAlign e)
2480 : CSSValue(PrimitiveClass)
2482 m_primitiveUnitType = CSS_VALUE_ID;
2485 m_value.valueID = CSSValueStart;
2488 m_value.valueID = CSSValueEnd;
2491 m_value.valueID = CSSValueLeft;
2494 m_value.valueID = CSSValueRight;
2497 m_value.valueID = CSSValueCenter;
2500 m_value.valueID = CSSValueJustify;
2503 m_value.valueID = CSSValueWebkitLeft;
2506 m_value.valueID = CSSValueWebkitRight;
2509 m_value.valueID = CSSValueWebkitCenter;
2514 template<> inline CSSPrimitiveValue::operator ETextAlign() const
2516 ASSERT(isValueID());
2518 switch (m_value.valueID) {
2519 case CSSValueWebkitAuto: // Legacy -webkit-auto. Eqiuvalent to start.
2525 return static_cast<ETextAlign>(m_value.valueID - CSSValueLeft);
2529 #if ENABLE(CSS3_TEXT)
2530 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextAlignLast e)
2531 : CSSValue(PrimitiveClass)
2533 m_primitiveUnitType = CSS_VALUE_ID;
2535 case TextAlignLastStart:
2536 m_value.valueID = CSSValueStart;
2538 case TextAlignLastEnd:
2539 m_value.valueID = CSSValueEnd;
2541 case TextAlignLastLeft:
2542 m_value.valueID = CSSValueLeft;
2544 case TextAlignLastRight:
2545 m_value.valueID = CSSValueRight;
2547 case TextAlignLastCenter:
2548 m_value.valueID = CSSValueCenter;
2550 case TextAlignLastJustify:
2551 m_value.valueID = CSSValueJustify;
2553 case TextAlignLastAuto:
2554 m_value.valueID = CSSValueAuto;
2559 template<> inline CSSPrimitiveValue::operator TextAlignLast() const
2561 ASSERT(isValueID());
2563 switch (m_value.valueID) {
2565 return TextAlignLastAuto;
2567 return TextAlignLastStart;
2569 return TextAlignLastEnd;
2571 return TextAlignLastLeft;
2573 return TextAlignLastRight;
2574 case CSSValueCenter:
2575 return TextAlignLastCenter;
2576 case CSSValueJustify:
2577 return TextAlignLastJustify;
2582 ASSERT_NOT_REACHED();
2583 return TextAlignLastAuto;
2586 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextJustify e)
2587 : CSSValue(PrimitiveClass)
2589 m_primitiveUnitType = CSS_VALUE_ID;
2591 case TextJustifyAuto:
2592 m_value.valueID = CSSValueAuto;
2594 case TextJustifyNone:
2595 m_value.valueID = CSSValueNone;
2597 case TextJustifyInterWord:
2598 m_value.valueID = CSSValueInterWord;
2600 case TextJustifyDistribute:
2601 m_value.valueID = CSSValueDistribute;
2606 template<> inline CSSPrimitiveValue::operator TextJustify() const
2608 ASSERT(isValueID());
2610 switch (m_value.valueID) {
2612 return TextJustifyAuto;
2614 return TextJustifyNone;
2615 case CSSValueInterWord:
2616 return TextJustifyInterWord;
2617 case CSSValueDistribute:
2618 return TextJustifyDistribute;
2623 ASSERT_NOT_REACHED();
2624 return TextJustifyAuto;
2628 template<> inline CSSPrimitiveValue::operator TextDecoration() const
2630 ASSERT(isValueID());
2632 switch (m_value.valueID) {
2634 return TextDecorationNone;
2635 case CSSValueUnderline:
2636 return TextDecorationUnderline;
2637 case CSSValueOverline:
2638 return TextDecorationOverline;
2639 case CSSValueLineThrough:
2640 return TextDecorationLineThrough;
2642 return TextDecorationBlink;
2643 #if ENABLE(LETTERPRESS)
2644 case CSSValueWebkitLetterpress:
2645 return TextDecorationLetterpress;
2651 ASSERT_NOT_REACHED();
2652 return TextDecorationNone;
2655 template<> inline CSSPrimitiveValue::operator TextDecorationStyle() const
2657 ASSERT(isValueID());
2659 switch (m_value.valueID) {
2661 return TextDecorationStyleSolid;
2662 case CSSValueDouble:
2663 return TextDecorationStyleDouble;
2664 case CSSValueDotted:
2665 return TextDecorationStyleDotted;
2666 case CSSValueDashed:
2667 return TextDecorationStyleDashed;
2669 return TextDecorationStyleWavy;
2674 ASSERT_NOT_REACHED();
2675 return TextDecorationStyleSolid;
2678 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextUnderlinePosition e)
2679 : CSSValue(PrimitiveClass)
2681 m_primitiveUnitType = CSS_VALUE_ID;
2683 case TextUnderlinePositionAuto:
2684 m_value.valueID = CSSValueAuto;
2686 case TextUnderlinePositionAlphabetic:
2687 m_value.valueID = CSSValueAlphabetic;
2689 case TextUnderlinePositionUnder:
2690 m_value.valueID = CSSValueUnder;
2694 // FIXME: Implement support for 'under left' and 'under right' values.
2697 template<> inline CSSPrimitiveValue::operator TextUnderlinePosition() const
2699 ASSERT(isValueID());
2701 switch (m_value.valueID) {
2703 return TextUnderlinePositionAuto;
2704 case CSSValueAlphabetic:
2705 return TextUnderlinePositionAlphabetic;
2707 return TextUnderlinePositionUnder;
2712 // FIXME: Implement support for 'under left' and 'under right' values.
2714 ASSERT_NOT_REACHED();
2715 return TextUnderlinePositionAuto;
2718 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextSecurity e)
2719 : CSSValue(PrimitiveClass)
2721 m_primitiveUnitType = CSS_VALUE_ID;
2724 m_value.valueID = CSSValueNone;
2727 m_value.valueID = CSSValueDisc;
2730 m_value.valueID = CSSValueCircle;
2733 m_value.valueID = CSSValueSquare;
2738 template<> inline CSSPrimitiveValue::operator ETextSecurity() const
2740 ASSERT(isValueID());
2742 switch (m_value.valueID) {
2747 case CSSValueCircle:
2749 case CSSValueSquare:
2755 ASSERT_NOT_REACHED();
2759 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ETextTransform e)
2760 : CSSValue(PrimitiveClass)
2762 m_primitiveUnitType = CSS_VALUE_ID;
2765 m_value.valueID = CSSValueCapitalize;
2768 m_value.valueID = CSSValueUppercase;
2771 m_value.valueID = CSSValueLowercase;
2774 m_value.valueID = CSSValueNone;
2779 template<> inline CSSPrimitiveValue::operator ETextTransform() const
2781 ASSERT(isValueID());
2783 switch (m_value.valueID) {
2784 case CSSValueCapitalize:
2786 case CSSValueUppercase:
2788 case CSSValueLowercase:
2796 ASSERT_NOT_REACHED();
2800 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUnicodeBidi e)
2801 : CSSValue(PrimitiveClass)
2803 m_primitiveUnitType = CSS_VALUE_ID;
2806 m_value.valueID = CSSValueNormal;
2809 m_value.valueID = CSSValueEmbed;
2812 m_value.valueID = CSSValueBidiOverride;
2815 m_value.valueID = CSSValueIsolate;
2817 case IsolateOverride:
2818 m_value.valueID = CSSValueIsolateOverride;
2821 m_value.valueID = CSSValuePlaintext;
2826 template<> inline CSSPrimitiveValue::operator EUnicodeBidi() const
2828 ASSERT(isValueID());
2830 switch (m_value.valueID) {
2831 case CSSValueNormal:
2835 case CSSValueBidiOverride:
2837 case CSSValueIsolate:
2838 case CSSValueWebkitIsolate:
2840 case CSSValueIsolateOverride:
2841 case CSSValueWebkitIsolateOverride:
2842 return IsolateOverride;
2843 case CSSValuePlaintext:
2844 case CSSValueWebkitPlaintext:
2850 ASSERT_NOT_REACHED();
2854 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserDrag e)
2855 : CSSValue(PrimitiveClass)
2857 m_primitiveUnitType = CSS_VALUE_ID;
2860 m_value.valueID = CSSValueAuto;
2863 m_value.valueID = CSSValueNone;
2866 m_value.valueID = CSSValueElement;
2873 template<> inline CSSPrimitiveValue::operator EUserDrag() const
2875 ASSERT(isValueID());
2877 switch (m_value.valueID) {
2882 case CSSValueElement:
2883 return DRAG_ELEMENT;
2888 ASSERT_NOT_REACHED();
2892 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserModify e)
2893 : CSSValue(PrimitiveClass)
2895 m_primitiveUnitType = CSS_VALUE_ID;
2898 m_value.valueID = CSSValueReadOnly;
2901 m_value.valueID = CSSValueReadWrite;
2903 case READ_WRITE_PLAINTEXT_ONLY:
2904 m_value.valueID = CSSValueReadWritePlaintextOnly;
2909 template<> inline CSSPrimitiveValue::operator EUserModify() const
2911 ASSERT(isValueID());
2913 switch (m_value.valueID) {
2914 case CSSValueReadOnly:
2916 case CSSValueReadWrite:
2918 case CSSValueReadWritePlaintextOnly:
2919 return READ_WRITE_PLAINTEXT_ONLY;
2924 ASSERT_NOT_REACHED();
2928 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EUserSelect e)
2929 : CSSValue(PrimitiveClass)
2931 m_primitiveUnitType = CSS_VALUE_ID;
2934 m_value.valueID = CSSValueNone;
2937 m_value.valueID = CSSValueText;
2940 m_value.valueID = CSSValueAll;
2945 template<> inline CSSPrimitiveValue::operator EUserSelect() const
2947 ASSERT(isValueID());
2949 switch (m_value.valueID) {
2962 ASSERT_NOT_REACHED();
2966 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVerticalAlign a)
2967 : CSSValue(PrimitiveClass)
2969 m_primitiveUnitType = CSS_VALUE_ID;
2972 m_value.valueID = CSSValueTop;
2975 m_value.valueID = CSSValueBottom;
2978 m_value.valueID = CSSValueMiddle;
2981 m_value.valueID = CSSValueBaseline;
2984 m_value.valueID = CSSValueTextBottom;
2987 m_value.valueID = CSSValueTextTop;
2990 m_value.valueID = CSSValueSub;
2993 m_value.valueID = CSSValueSuper;
2995 case BASELINE_MIDDLE:
2996 m_value.valueID = CSSValueWebkitBaselineMiddle;
2999 m_value.valueID = CSSValueInvalid;
3003 template<> inline CSSPrimitiveValue::operator EVerticalAlign() const
3005 ASSERT(isValueID());
3007 switch (m_value.valueID) {
3010 case CSSValueBottom:
3012 case CSSValueMiddle:
3014 case CSSValueBaseline:
3016 case CSSValueTextBottom:
3018 case CSSValueTextTop:
3024 case CSSValueWebkitBaselineMiddle:
3025 return BASELINE_MIDDLE;
3030 ASSERT_NOT_REACHED();
3034 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EVisibility e)
3035 : CSSValue(PrimitiveClass)
3037 m_primitiveUnitType = CSS_VALUE_ID;
3040 m_value.valueID = CSSValueVisible;
3043 m_value.valueID = CSSValueHidden;
3046 m_value.valueID = CSSValueCollapse;
3051 template<> inline CSSPrimitiveValue::operator EVisibility() const
3053 ASSERT(isValueID());
3055 switch (m_value.valueID) {
3056 case CSSValueHidden:
3058 case CSSValueVisible:
3060 case CSSValueCollapse:
3066 ASSERT_NOT_REACHED();
3070 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWhiteSpace e)
3071 : CSSValue(PrimitiveClass)
3073 m_primitiveUnitType = CSS_VALUE_ID;
3076 m_value.valueID = CSSValueNormal;
3079 m_value.valueID = CSSValuePre;
3082 m_value.valueID = CSSValuePreWrap;
3085 m_value.valueID = CSSValuePreLine;
3088 m_value.valueID = CSSValueNowrap;
3091 m_value.valueID = CSSValueWebkitNowrap;
3096 template<> inline CSSPrimitiveValue::operator EWhiteSpace() const
3098 ASSERT(isValueID());
3100 switch (m_value.valueID) {
3101 case CSSValueWebkitNowrap:
3102 return KHTML_NOWRAP;
3103 case CSSValueNowrap:
3107 case CSSValuePreWrap:
3109 case CSSValuePreLine:
3111 case CSSValueNormal:
3117 ASSERT_NOT_REACHED();
3121 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EWordBreak e)
3122 : CSSValue(PrimitiveClass)
3124 m_primitiveUnitType = CSS_VALUE_ID;
3126 case NormalWordBreak:
3127 m_value.valueID = CSSValueNormal;
3129 case BreakAllWordBreak:
3130 m_value.valueID = CSSValueBreakAll;
3132 case KeepAllWordBreak:
3133 m_value.valueID = CSSValueKeepAll;
3135 case BreakWordBreak:
3136 m_value.valueID = CSSValueBreakWord;
3141 template<> inline CSSPrimitiveValue::operator EWordBreak() const
3143 ASSERT(isValueID());
3145 switch (m_value.valueID) {
3146 case CSSValueBreakAll:
3147 return BreakAllWordBreak;
3148 case CSSValueKeepAll:
3149 return KeepAllWordBreak;
3150 case CSSValueBreakWord:
3151 return BreakWordBreak;
3152 case CSSValueNormal:
3153 return NormalWordBreak;
3158 ASSERT_NOT_REACHED();
3159 return NormalWordBreak;
3162 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflowWrap e)
3163 : CSSValue(PrimitiveClass)
3165 m_primitiveUnitType = CSS_VALUE_ID;
3167 case NormalOverflowWrap:
3168 m_value.valueID = CSSValueNormal;
3170 case BreakOverflowWrap:
3171 m_value.valueID = CSSValueBreakWord;
3176 template<> inline CSSPrimitiveValue::operator EOverflowWrap() const
3178 ASSERT(isValueID());
3180 switch (m_value.valueID) {
3181 case CSSValueBreakWord:
3182 return BreakOverflowWrap;
3183 case CSSValueNormal:
3184 return NormalOverflowWrap;
3189 ASSERT_NOT_REACHED();
3190 return NormalOverflowWrap;
3193 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextDirection e)
3194 : CSSValue(PrimitiveClass)
3196 m_primitiveUnitType = CSS_VALUE_ID;
3199 m_value.valueID = CSSValueLtr;
3202 m_value.valueID = CSSValueRtl;
3207 template<> inline CSSPrimitiveValue::operator TextDirection() const
3209 ASSERT(isValueID());
3211 switch (m_value.valueID) {
3220 ASSERT_NOT_REACHED();
3224 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WritingMode e)
3225 : CSSValue(PrimitiveClass)
3227 m_primitiveUnitType = CSS_VALUE_ID;
3229 case TopToBottomWritingMode:
3230 m_value.valueID = CSSValueHorizontalTb;
3232 case RightToLeftWritingMode:
3233 m_value.valueID = CSSValueVerticalRl;
3235 case LeftToRightWritingMode:
3236 m_value.valueID = CSSValueVerticalLr;
3238 case BottomToTopWritingMode:
3239 m_value.valueID = CSSValueHorizontalBt;
3244 template<> inline CSSPrimitiveValue::operator WritingMode() const
3246 ASSERT(isValueID());
3248 switch (m_value.valueID) {
3249 case CSSValueHorizontalTb:
3253 return TopToBottomWritingMode;
3254 case CSSValueVerticalRl:
3257 return RightToLeftWritingMode;
3258 case CSSValueVerticalLr:
3259 return LeftToRightWritingMode;
3260 case CSSValueHorizontalBt:
3261 return BottomToTopWritingMode;
3266 ASSERT_NOT_REACHED();
3267 return TopToBottomWritingMode;
3270 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextCombine e)
3271 : CSSValue(PrimitiveClass)
3273 m_primitiveUnitType = CSS_VALUE_ID;
3275 case TextCombineNone:
3276 m_value.valueID = CSSValueNone;
3278 case TextCombineHorizontal:
3279 m_value.valueID = CSSValueHorizontal;
3284 template<> inline CSSPrimitiveValue::operator TextCombine() const
3286 ASSERT(isValueID());
3288 switch (m_value.valueID) {
3290 return TextCombineNone;
3291 case CSSValueHorizontal:
3292 return TextCombineHorizontal;
3297 ASSERT_NOT_REACHED();
3298 return TextCombineNone;
3301 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(RubyPosition position)
3302 : CSSValue(PrimitiveClass)
3304 m_primitiveUnitType = CSS_VALUE_ID;
3306 case RubyPositionBefore:
3307 m_value.valueID = CSSValueBefore;
3309 case RubyPositionAfter:
3310 m_value.valueID = CSSValueAfter;
3312 case RubyPositionInterCharacter:
3313 m_value.valueID = CSSValueInterCharacter;
3318 template<> inline CSSPrimitiveValue::operator RubyPosition() const
3320 ASSERT(isValueID());
3322 switch (m_value.valueID) {
3323 case CSSValueBefore:
3324 return RubyPositionBefore;
3326 return RubyPositionAfter;
3327 case CSSValueInterCharacter:
3328 return RubyPositionInterCharacter;
3333 ASSERT_NOT_REACHED();
3334 return RubyPositionBefore;
3337 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOverflow overflow)
3338 : CSSValue(PrimitiveClass)
3340 m_primitiveUnitType = CSS_VALUE_ID;
3342 case TextOverflowClip:
3343 m_value.valueID = CSSValueClip;
3345 case TextOverflowEllipsis:
3346 m_value.valueID = CSSValueEllipsis;
3351 template<> inline CSSPrimitiveValue::operator TextOverflow() const
3353 ASSERT(isValueID());
3355 switch (m_value.valueID) {
3357 return TextOverflowClip;
3358 case CSSValueEllipsis:
3359 return TextOverflowEllipsis;
3364 ASSERT_NOT_REACHED();
3365 return TextOverflowClip;
3368 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisFill fill)
3369 : CSSValue(PrimitiveClass)
3371 m_primitiveUnitType = CSS_VALUE_ID;
3373 case TextEmphasisFillFilled:
3374 m_value.valueID = CSSValueFilled;
3376 case TextEmphasisFillOpen:
3377 m_value.valueID = CSSValueOpen;
3382 template<> inline CSSPrimitiveValue::operator TextEmphasisFill() const
3384 ASSERT(isValueID());
3386 switch (m_value.valueID) {
3387 case CSSValueFilled:
3388 return TextEmphasisFillFilled;
3390 return TextEmphasisFillOpen;
3395 ASSERT_NOT_REACHED();
3396 return TextEmphasisFillFilled;
3399 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEmphasisMark mark)
3400 : CSSValue(PrimitiveClass)
3402 m_primitiveUnitType = CSS_VALUE_ID;
3404 case TextEmphasisMarkDot:
3405 m_value.valueID = CSSValueDot;
3407 case TextEmphasisMarkCircle:
3408 m_value.valueID = CSSValueCircle;
3410 case TextEmphasisMarkDoubleCircle:
3411 m_value.valueID = CSSValueDoubleCircle;
3413 case TextEmphasisMarkTriangle:
3414 m_value.valueID = CSSValueTriangle;
3416 case TextEmphasisMarkSesame:
3417 m_value.valueID = CSSValueSesame;
3419 case TextEmphasisMarkNone:
3420 case TextEmphasisMarkAuto:
3421 case TextEmphasisMarkCustom:
3422 ASSERT_NOT_REACHED();
3423 m_value.valueID = CSSValueNone;
3428 template<> inline CSSPrimitiveValue::operator TextEmphasisMark() const
3430 ASSERT(isValueID());
3432 switch (m_value.valueID) {
3434 return TextEmphasisMarkNone;
3436 return TextEmphasisMarkDot;
3437 case CSSValueCircle:
3438 return TextEmphasisMarkCircle;
3439 case CSSValueDoubleCircle:
3440 return TextEmphasisMarkDoubleCircle;
3441 case CSSValueTriangle:
3442 return TextEmphasisMarkTriangle;
3443 case CSSValueSesame:
3444 return TextEmphasisMarkSesame;
3449 ASSERT_NOT_REACHED();
3450 return TextEmphasisMarkNone;
3453 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextOrientation e)
3454 : CSSValue(PrimitiveClass)
3456 m_primitiveUnitType = CSS_VALUE_ID;
3458 case TextOrientation::Sideways:
3459 m_value.valueID = CSSValueSideways;
3461 case TextOrientation::Mixed:
3462 m_value.valueID = CSSValueMixed;
3464 case TextOrientation::Upright:
3465 m_value.valueID = CSSValueUpright;
3470 template<> inline CSSPrimitiveValue::operator TextOrientation() const
3472 ASSERT(isValueID());
3474 switch (m_value.valueID) {
3475 case CSSValueSideways:
3476 return TextOrientation::Sideways;
3477 case CSSValueSidewaysRight:
3478 return TextOrientation::Sideways;
3479 case CSSValueVerticalRight:
3480 return TextOrientation::Mixed;
3482 return TextOrientation::Mixed;
3483 case CSSValueUpright:
3484 return TextOrientation::Upright;
3489 ASSERT_NOT_REACHED();
3490 return TextOrientation::Mixed;
3493 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EPointerEvents e)
3494 : CSSValue(PrimitiveClass)
3496 m_primitiveUnitType = CSS_VALUE_ID;
3499 m_value.valueID = CSSValueNone;
3502 m_value.valueID = CSSValueStroke;
3505 m_value.valueID = CSSValueFill;
3508 m_value.valueID = CSSValuePainted;
3511 m_value.valueID = CSSValueVisible;
3513 case PE_VISIBLE_STROKE:
3514 m_value.valueID = CSSValueVisibleStroke;
3516 case PE_VISIBLE_FILL:
3517 m_value.valueID = CSSValueVisibleFill;
3519 case PE_VISIBLE_PAINTED:
3520 m_value.valueID = CSSValueVisiblePainted;
3523 m_value.valueID = CSSValueAuto;
3526 m_value.valueID = CSSValueAll;
3531 template<> inline CSSPrimitiveValue::operator EPointerEvents() const
3533 ASSERT(isValueID());
3535 switch (m_value.valueID) {
3542 case CSSValueVisiblePainted:
3543 return PE_VISIBLE_PAINTED;
3544 case CSSValueVisibleFill:
3545 return PE_VISIBLE_FILL;
3546 case CSSValueVisibleStroke:
3547 return PE_VISIBLE_STROKE;
3548 case CSSValueVisible:
3550 case CSSValuePainted:
3554 case CSSValueStroke:
3560 ASSERT_NOT_REACHED();
3564 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Kerning kerning)
3565 : CSSValue(PrimitiveClass)
3567 m_primitiveUnitType = CSS_VALUE_ID;
3570 m_value.valueID = CSSValueAuto;
3572 case Kerning::Normal:
3573 m_value.valueID = CSSValueNormal;
3575 case Kerning::NoShift:
3576 m_value.valueID = CSSValueNone;
3580 ASSERT_NOT_REACHED();
3581 m_value.valueID = CSSValueAuto;
3584 template<> inline CSSPrimitiveValue::operator Kerning() const
3586 ASSERT(isValueID());
3588 switch (m_value.valueID) {
3590 return Kerning::Auto;
3591 case CSSValueNormal:
3592 return Kerning::Normal;
3594 return Kerning::NoShift;
3599 ASSERT_NOT_REACHED();
3600 return Kerning::Auto;
3603 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ObjectFit fit)
3604 : CSSValue(PrimitiveClass)
3606 m_primitiveUnitType = CSS_VALUE_ID;
3609 m_value.valueID = CSSValueFill;
3611 case ObjectFitContain:
3612 m_value.valueID = CSSValueContain;
3614 case ObjectFitCover:
3615 m_value.valueID = CSSValueCover;
3618 m_value.valueID = CSSValueNone;
3620 case ObjectFitScaleDown:
3621 m_value.valueID = CSSValueScaleDown;
3626 template<> inline CSSPrimitiveValue::operator ObjectFit() const
3628 ASSERT(isValueID());
3630 switch (m_value.valueID) {
3632 return ObjectFitFill;
3633 case CSSValueContain:
3634 return ObjectFitContain;
3636 return ObjectFitCover;
3638 return ObjectFitNone;
3639 case CSSValueScaleDown:
3640 return ObjectFitScaleDown;
3642 ASSERT_NOT_REACHED();
3643 return ObjectFitFill;
3647 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmoothingMode smoothing)
3648 : CSSValue(PrimitiveClass)
3650 m_primitiveUnitType = CSS_VALUE_ID;
3651 switch (smoothing) {
3653 m_value.valueID = CSSValueAuto;
3656 m_value.valueID = CSSValueNone;
3659 m_value.valueID = CSSValueAntialiased;
3661 case SubpixelAntialiased:
3662 m_value.valueID = CSSValueSubpixelAntialiased;
3666 ASSERT_NOT_REACHED();
3667 m_value.valueID = CSSValueAuto;
3670 template<> inline CSSPrimitiveValue::operator FontSmoothingMode() const
3672 ASSERT(isValueID());
3674 switch (m_value.valueID) {
3676 return AutoSmoothing;
3679 case CSSValueAntialiased:
3681 case CSSValueSubpixelAntialiased:
3682 return SubpixelAntialiased;
3687 ASSERT_NOT_REACHED();
3688 return AutoSmoothing;
3691 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmallCaps smallCaps)
3692 : CSSValue(PrimitiveClass)
3694 m_primitiveUnitType = CSS_VALUE_ID;
3695 switch (smallCaps) {
3696 case FontSmallCapsOff:
3697 m_value.valueID = CSSValueNormal;
3699 case FontSmallCapsOn:
3700 m_value.valueID = CSSValueSmallCaps;
3704 ASSERT_NOT_REACHED();
3705 m_value.valueID = CSSValueNormal;
3708 template<> inline CSSPrimitiveValue::operator FontSmallCaps() const
3710 ASSERT(isValueID());
3712 switch (m_value.valueID) {
3713 case CSSValueSmallCaps:
3714 return FontSmallCapsOn;
3715 case CSSValueNormal:
3716 return FontSmallCapsOff;
3720 ASSERT_NOT_REACHED();
3721 return FontSmallCapsOff;
3724 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextRenderingMode e)
3725 : CSSValue(PrimitiveClass)
3727 m_primitiveUnitType = CSS_VALUE_ID;
3729 case AutoTextRendering:
3730 m_value.valueID = CSSValueAuto;
3733 m_value.valueID = CSSValueOptimizeSpeed;
3735 case OptimizeLegibility:
3736 m_value.valueID = CSSValueOptimizeLegibility;
3738 case GeometricPrecision:
3739 m_value.valueID = CSSValueGeometricPrecision;
3744 template<> inline CSSPrimitiveValue::operator TextRenderingMode() const
3746 ASSERT(isValueID());
3748 switch (m_value.valueID) {
3750 return AutoTextRendering;
3751 case CSSValueOptimizeSpeed:
3752 return OptimizeSpeed;
3753 case CSSValueOptimizeLegibility:
3754 return OptimizeLegibility;
3755 case CSSValueGeometricPrecision:
3756 return GeometricPrecision;
3761 ASSERT_NOT_REACHED();
3762 return AutoTextRendering;
3765 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Hyphens hyphens)
3766 : CSSValue(PrimitiveClass)
3768 m_primitiveUnitType = CSS_VALUE_ID;
3771 m_value.valueID = CSSValueNone;
3774 m_value.valueID = CSSValueManual;
3777 m_value.valueID = CSSValueAuto;
3782 template<> inline CSSPrimitiveValue::operator Hyphens() const
3784 ASSERT(isValueID());
3786 switch (m_value.valueID) {
3789 case CSSValueManual:
3790 return HyphensManual;
3797 ASSERT_NOT_REACHED();
3801 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineSnap gridSnap)
3802 : CSSValue(PrimitiveClass)
3804 m_primitiveUnitType = CSS_VALUE_ID;
3807 m_value.valueID = CSSValueNone;
3809 case LineSnapBaseline:
3810 m_value.valueID = CSSValueBaseline;
3812 case LineSnapContain:
3813 m_value.valueID = CSSValueContain;
3818 template<> inline CSSPrimitiveValue::operator LineSnap() const
3820 ASSERT(isValueID());
3822 switch (m_value.valueID) {
3824 return LineSnapNone;
3825 case CSSValueBaseline:
3826 return LineSnapBaseline;
3827 case CSSValueContain:
3828 return LineSnapContain;
3833 ASSERT_NOT_REACHED();
3834 return LineSnapNone;
3837 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineAlign lineAlign)
3838 : CSSValue(PrimitiveClass)
3840 m_primitiveUnitType = CSS_VALUE_ID;
3841 switch (lineAlign) {
3843 m_value.valueID = CSSValueNone;
3845 case LineAlignEdges:
3846 m_value.valueID = CSSValueEdges;
3851 template<> inline CSSPrimitiveValue::operator LineAlign() const
3853 ASSERT(isValueID());
3855 switch (m_value.valueID) {
3857 return LineAlignNone;
3859 return LineAlignEdges;
3864 ASSERT_NOT_REACHED();
3865 return LineAlignNone;
3868 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ESpeak e)
3869 : CSSValue(PrimitiveClass)
3871 m_primitiveUnitType = CSS_VALUE_ID;
3874 m_value.valueID = CSSValueNone;
3877 m_value.valueID = CSSValueNormal;
3880 m_value.valueID = CSSValueSpellOut;
3883 m_value.valueID = CSSValueDigits;
3885 case SpeakLiteralPunctuation:
3886 m_value.valueID = CSSValueLiteralPunctuation;
3888 case SpeakNoPunctuation:
3889 m_value.valueID = CSSValueNoPunctuation;
3894 template<> inline CSSPrimitiveValue::operator Order() const
3896 ASSERT(isValueID());
3898 switch (m_value.valueID) {
3899 case CSSValueLogical:
3900 return LogicalOrder;
3901 case CSSValueVisual:
3907 ASSERT_NOT_REACHED();
3908 return LogicalOrder;
3911 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Order e)
3912 : CSSValue(PrimitiveClass)
3914 m_primitiveUnitType = CSS_VALUE_ID;
3917 m_value.valueID = CSSValueLogical;
3920 m_value.valueID = CSSValueVisual;
3925 template<> inline CSSPrimitiveValue::operator ESpeak() const
3927 ASSERT(isValueID());
3929 switch (m_value.valueID) {
3932 case CSSValueNormal:
3934 case CSSValueSpellOut:
3935 return SpeakSpellOut;
3936 case CSSValueDigits:
3938 case CSSValueLiteralPunctuation:
3939 return SpeakLiteralPunctuation;
3940 case CSSValueNoPunctuation:
3941 return SpeakNoPunctuation;
3946 ASSERT_NOT_REACHED();
3950 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BlendMode blendMode)
3951 : CSSValue(PrimitiveClass)
3953 m_primitiveUnitType = CSS_VALUE_ID;
3954 switch (blendMode) {
3955 case BlendModeNormal:
3956 m_value.valueID = CSSValueNormal;
3958 case BlendModeMultiply:
3959 m_value.valueID = CSSValueMultiply;
3961 case BlendModeScreen:
3962 m_value.valueID = CSSValueScreen;
3964 case BlendModeOverlay:
3965 m_value.valueID = CSSValueOverlay;
3967 case BlendModeDarken:
3968 m_value.valueID = CSSValueDarken;
3970 case BlendModeLighten:
3971 m_value.valueID = CSSValueLighten;
3973 case BlendModeColorDodge:
3974 m_value.valueID = CSSValueColorDodge;
3976 case BlendModeColorBurn:
3977 m_value.valueID = CSSValueColorBurn;
3979 case BlendModeHardLight:
3980 m_value.valueID = CSSValueHardLight;
3982 case BlendModeSoftLight:
3983 m_value.valueID = CSSValueSoftLight;
3985 case BlendModeDifference:
3986 m_value.valueID = CSSValueDifference;
3988 case BlendModeExclusion:
3989 m_value.valueID = CSSValueExclusion;
3992 m_value.valueID = CSSValueHue;
3994 case BlendModeSaturation:
3995 m_value.valueID = CSSValueSaturation;
3997 case BlendModeColor:
3998 m_value.valueID = CSSValueColor;
4000 case BlendModeLuminosity:
4001 m_value.valueID = CSSValueLuminosity;
4003 case BlendModePlusDarker:
4004 m_value.valueID = CSSValuePlusDarker;
4006 case BlendModePlusLighter:
4007 m_value.valueID = CSSValuePlusLighter;
4012 template<> inline CSSPrimitiveValue::operator BlendMode() const
4014 ASSERT(isValueID());
4016 switch (m_value.valueID) {
4017 case CSSValueNormal:
4018 return BlendModeNormal;
4019 case CSSValueMultiply:
4020 return BlendModeMultiply;
4021 case CSSValueScreen:
4022 return BlendModeScreen;
4023 case CSSValueOverlay:
4024 return BlendModeOverlay;
4025 case CSSValueDarken:
4026 return BlendModeDarken;
4027 case CSSValueLighten:
4028 return BlendModeLighten;
4029 case CSSValueColorDodge:
4030 return BlendModeColorDodge;
4031 case CSSValueColorBurn:
4032 return BlendModeColorBurn;
4033 case CSSValueHardLight:
4034 return BlendModeHardLight;
4035 case CSSValueSoftLight:
4036 return BlendModeSoftLight;
4037 case CSSValueDifference:
4038 return BlendModeDifference;
4039 case CSSValueExclusion:
4040 return BlendModeExclusion;
4042 return BlendModeHue;
4043 case CSSValueSaturation:
4044 return BlendModeSaturation;
4046 return BlendModeColor;
4047 case CSSValueLuminosity:
4048 return BlendModeLuminosity;
4049 case CSSValuePlusDarker:
4050 return BlendModePlusDarker;
4051 case CSSValuePlusLighter:
4052 return BlendModePlusLighter;
4057 ASSERT_NOT_REACHED();
4058 return BlendModeNormal;
4061 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(Isolation isolation)
4062 : CSSValue(PrimitiveClass)
4064 m_primitiveUnitType = CSS_VALUE_ID;
4065 switch (isolation) {
4067 m_value.valueID = CSSValueAuto;
4069 case IsolationIsolate:
4070 m_value.valueID = CSSValueIsolate;
4073 ASSERT_NOT_REACHED();
4077 template<> inline CSSPrimitiveValue::operator Isolation() const
4079 ASSERT(isValueID());
4080 switch (m_value.valueID) {
4082 return IsolationAuto;
4083 case CSSValueIsolate:
4084 return IsolationIsolate;
4089 ASSERT_NOT_REACHED();
4090 return IsolationAuto;
4093 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineCap e)
4094 : CSSValue(PrimitiveClass)
4096 m_primitiveUnitType = CSS_VALUE_ID;
4099 m_value.valueID = CSSValueButt;
4102 m_value.valueID = CSSValueRound;
4105 m_value.valueID = CSSValueSquare;
4110 template<> inline CSSPrimitiveValue::operator LineCap() const
4112 ASSERT(isValueID());
4114 switch (m_value.valueID) {
4119 case CSSValueSquare:
4125 ASSERT_NOT_REACHED();
4129 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(LineJoin e)
4130 : CSSValue(PrimitiveClass)
4132 m_primitiveUnitType = CSS_VALUE_ID;
4135 m_value.valueID = CSSValueMiter;
4138 m_value.valueID = CSSValueRound;
4141 m_value.valueID = CSSValueBevel;
4146 template<> inline CSSPrimitiveValue::operator LineJoin() const
4148 ASSERT(isValueID());
4150 switch (m_value.valueID) {
4161 ASSERT_NOT_REACHED();
4165 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(WindRule e)
4166 : CSSValue(PrimitiveClass)
4168 m_primitiveUnitType = CSS_VALUE_ID;
4171 m_value.valueID = CSSValueNonzero;
4174 m_value.valueID = CSSValueEvenodd;
4179 template<> inline CSSPrimitiveValue::operator WindRule() const
4181 ASSERT(isValueID());
4183 switch (m_value.valueID) {
4184 case CSSValueNonzero:
4185 return RULE_NONZERO;
4186 case CSSValueEvenodd:
4187 return RULE_EVENODD;
4192 ASSERT_NOT_REACHED();
4193 return RULE_NONZERO;
4197 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EAlignmentBaseline e)
4198 : CSSValue(PrimitiveClass)
4200 m_primitiveUnitType = CSS_VALUE_ID;
4203 m_value.valueID = CSSValueAuto;
4206 m_value.valueID = CSSValueBaseline;
4208 case AB_BEFORE_EDGE:
4209 m_value.valueID = CSSValueBeforeEdge;
4211 case AB_TEXT_BEFORE_EDGE:
4212 m_value.valueID = CSSValueTextBeforeEdge;
4215 m_value.valueID = CSSValueMiddle;
4218 m_value.valueID = CSSValueCentral;
4221 m_value.valueID = CSSValueAfterEdge;
4223 case AB_TEXT_AFTER_EDGE:
4224 m_value.valueID = CSSValueTextAfterEdge;
4226 case AB_IDEOGRAPHIC:
4227 m_value.valueID = CSSValueIdeographic;
4230 m_value.valueID = CSSValueAlphabetic;
4233 m_value.valueID = CSSValueHanging;
4235 case AB_MATHEMATICAL:
4236 m_value.valueID = CSSValueMathematical;
4241 template<> inline CSSPrimitiveValue::operator EAlignmentBaseline() const
4243 ASSERT(isValueID());
4245 switch (m_value.valueID) {
4248 case CSSValueBaseline:
4250 case CSSValueBeforeEdge:
4251 return AB_BEFORE_EDGE;
4252 case CSSValueTextBeforeEdge: