| /* |
| * Copyright (C) 2007 Alexey Proskuryakov <ap@nypop.com>. |
| * Copyright (C) 2008-2023 Apple Inc. All rights reserved. |
| * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) |
| * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> |
| * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| * Copyright (C) 2025 Samuel Weinig <sam@webkit.org> |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #include "AnchorPositionEvaluator.h" |
| #include "CSSCalcSymbolTable.h" |
| #include "CSSCalcValue.h" |
| #include "CSSFontFaceSrcValue.h" |
| #include "CSSPrimitiveValue.h" |
| #include "CSSToLengthConversionData.h" |
| #include "CSSValueKeywords.h" |
| #include "FontSizeAdjust.h" |
| #include "GraphicsTypes.h" |
| #include "Length.h" |
| #include "PositionTryFallback.h" |
| #include "RenderStyleConstants.h" |
| #include "SVGRenderStyleDefs.h" |
| #include "ScrollAxis.h" |
| #include "ScrollTypes.h" |
| #include "StyleBuilderState.h" |
| #include "StyleScrollBehavior.h" |
| #include "StyleWebKitOverflowScrolling.h" |
| #include "StyleWebKitTouchCallout.h" |
| #include "TextFlags.h" |
| #include "ThemeTypes.h" |
| #include "TouchAction.h" |
| #include "UnicodeBidi.h" |
| #include "WritingMode.h" |
| #include <wtf/MathExtras.h> |
| |
| #if ENABLE(APPLE_PAY) |
| #include "ApplePayButtonPart.h" |
| #endif |
| |
| #if HAVE(CORE_MATERIAL) |
| #include "AppleVisualEffect.h" |
| #endif |
| |
| namespace WebCore { |
| |
| template<typename TargetType> TargetType fromCSSValue(const CSSValue& value) |
| { |
| return fromCSSValueID<TargetType>(value.valueID()); |
| } |
| |
| class TypeDeducingCSSValueMapper { |
| public: |
| TypeDeducingCSSValueMapper(const Style::BuilderState& builderState, const CSSValue& value) |
| : m_builderState { builderState } |
| , m_value { value } |
| { |
| } |
| |
| template<typename TargetType> operator TargetType() const |
| { |
| return fromCSSValue<TargetType>(m_value); |
| } |
| |
| operator const CSSPrimitiveValue&() const |
| { |
| return downcast<CSSPrimitiveValue>(m_value); |
| } |
| |
| operator const CSSValue&() const |
| { |
| return m_value; |
| } |
| |
| operator unsigned short() const |
| { |
| return protectedNumericValue()->resolveAsNumber<unsigned short>(m_builderState.cssToLengthConversionData()); |
| } |
| |
| operator int() const |
| { |
| return protectedNumericValue()->resolveAsNumber<int>(m_builderState.cssToLengthConversionData()); |
| } |
| |
| operator unsigned() const |
| { |
| return protectedNumericValue()->resolveAsNumber<unsigned>(m_builderState.cssToLengthConversionData()); |
| } |
| |
| operator float() const |
| { |
| return protectedNumericValue()->resolveAsNumber<float>(m_builderState.cssToLengthConversionData()); |
| } |
| |
| operator double() const |
| { |
| return protectedNumericValue()->resolveAsNumber<double>(m_builderState.cssToLengthConversionData()); |
| } |
| |
| private: |
| Ref<const CSSPrimitiveValue> protectedNumericValue() const |
| { |
| Ref value = downcast<const CSSPrimitiveValue>(m_value); |
| ASSERT(value->isNumberOrInteger()); |
| return value; |
| } |
| |
| const Style::BuilderState& m_builderState; |
| Ref<const CSSValue> m_value; |
| }; |
| |
| inline TypeDeducingCSSValueMapper fromCSSValueDeducingType(const Style::BuilderState& builderState, const CSSValue& value) |
| { |
| return { builderState, value }; |
| } |
| |
| #define EMIT_TO_CSS_SWITCH_CASE(VALUE) case TYPE::VALUE: return CSSValue##VALUE; |
| #define EMIT_FROM_CSS_SWITCH_CASE(VALUE) case CSSValue##VALUE: return TYPE::VALUE; |
| |
| #define DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS \ |
| constexpr CSSValueID toCSSValueID(TYPE value) { \ |
| switch (value) { \ |
| FOR_EACH(EMIT_TO_CSS_SWITCH_CASE) \ |
| } \ |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); \ |
| return CSSValueInvalid; \ |
| } \ |
| \ |
| template<> constexpr TYPE fromCSSValueID(CSSValueID value) { \ |
| switch (value) { \ |
| FOR_EACH(EMIT_FROM_CSS_SWITCH_CASE) \ |
| default: \ |
| break; \ |
| } \ |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); \ |
| return { }; \ |
| } |
| |
| #define TYPE ReflectionDirection |
| #define FOR_EACH(CASE) CASE(Above) CASE(Below) CASE(Left) CASE(Right) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColumnFill |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Balance) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColumnSpan |
| #define FOR_EACH(CASE) CASE(All) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE PrintColorAdjust |
| #define FOR_EACH(CASE) CASE(Exact) CASE(Economy) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BlockStepAlign |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Center) CASE(Start) CASE(End) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BlockStepInsert |
| #define FOR_EACH(CASE) CASE(MarginBox) CASE(PaddingBox) CASE(ContentBox) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BlockStepRound |
| #define FOR_EACH(CASE) CASE(Up) CASE(Down) CASE(Nearest) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| |
| constexpr CSSValueID toCSSValueID(BorderStyle e) |
| { |
| switch (e) { |
| case BorderStyle::None: |
| return CSSValueNone; |
| case BorderStyle::Hidden: |
| return CSSValueHidden; |
| case BorderStyle::Inset: |
| return CSSValueInset; |
| case BorderStyle::Groove: |
| return CSSValueGroove; |
| case BorderStyle::Ridge: |
| return CSSValueRidge; |
| case BorderStyle::Outset: |
| return CSSValueOutset; |
| case BorderStyle::Dotted: |
| return CSSValueDotted; |
| case BorderStyle::Dashed: |
| return CSSValueDashed; |
| case BorderStyle::Solid: |
| return CSSValueSolid; |
| case BorderStyle::Double: |
| return CSSValueDouble; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr BorderStyle fromCSSValueID(CSSValueID valueID) |
| { |
| return static_cast<BorderStyle>(valueID - CSSValueNone); |
| } |
| |
| #define TYPE OutlineStyle |
| #define FOR_EACH(CASE) CASE(Auto) CASE(None) CASE(Inset) CASE(Groove) CASE(Ridge) CASE(Outset) CASE(Dotted) CASE(Dashed) CASE(Solid) CASE(Double) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(CompositeOperator e, CSSPropertyID propertyID) |
| { |
| if (propertyID == CSSPropertyMaskComposite) { |
| switch (e) { |
| case CompositeOperator::SourceOver: |
| return CSSValueAdd; |
| case CompositeOperator::SourceIn: |
| return CSSValueIntersect; |
| case CompositeOperator::SourceOut: |
| return CSSValueSubtract; |
| case CompositeOperator::XOR: |
| return CSSValueExclude; |
| default: |
| break; |
| } |
| } else { |
| switch (e) { |
| case CompositeOperator::Clear: |
| return CSSValueClear; |
| case CompositeOperator::Copy: |
| return CSSValueCopy; |
| case CompositeOperator::SourceOver: |
| return CSSValueSourceOver; |
| case CompositeOperator::SourceIn: |
| return CSSValueSourceIn; |
| case CompositeOperator::SourceOut: |
| return CSSValueSourceOut; |
| case CompositeOperator::SourceAtop: |
| return CSSValueSourceAtop; |
| case CompositeOperator::DestinationOver: |
| return CSSValueDestinationOver; |
| case CompositeOperator::DestinationIn: |
| return CSSValueDestinationIn; |
| case CompositeOperator::DestinationOut: |
| return CSSValueDestinationOut; |
| case CompositeOperator::DestinationAtop: |
| return CSSValueDestinationAtop; |
| case CompositeOperator::XOR: |
| return CSSValueXor; |
| case CompositeOperator::PlusDarker: |
| return CSSValuePlusDarker; |
| case CompositeOperator::PlusLighter: |
| return CSSValuePlusLighter; |
| case CompositeOperator::Difference: |
| break; |
| } |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr CompositeOperator fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueClear: |
| return CompositeOperator::Clear; |
| case CSSValueCopy: |
| return CompositeOperator::Copy; |
| case CSSValueSourceOver: |
| case CSSValueAdd: |
| return CompositeOperator::SourceOver; |
| case CSSValueSourceIn: |
| case CSSValueIntersect: |
| return CompositeOperator::SourceIn; |
| case CSSValueSourceOut: |
| case CSSValueSubtract: |
| return CompositeOperator::SourceOut; |
| case CSSValueSourceAtop: |
| return CompositeOperator::SourceAtop; |
| case CSSValueDestinationOver: |
| return CompositeOperator::DestinationOver; |
| case CSSValueDestinationIn: |
| return CompositeOperator::DestinationIn; |
| case CSSValueDestinationOut: |
| return CompositeOperator::DestinationOut; |
| case CSSValueDestinationAtop: |
| return CompositeOperator::DestinationAtop; |
| case CSSValueXor: |
| case CSSValueExclude: |
| return CompositeOperator::XOR; |
| case CSSValuePlusDarker: |
| return CompositeOperator::PlusDarker; |
| case CSSValuePlusLighter: |
| return CompositeOperator::PlusLighter; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CompositeOperator::Clear; |
| } |
| |
| constexpr CSSValueID toCSSValueID(StyleAppearance e) |
| { |
| switch (e) { |
| case StyleAppearance::None: |
| return CSSValueNone; |
| case StyleAppearance::Auto: |
| return CSSValueAuto; |
| case StyleAppearance::Base: |
| return CSSValueBase; |
| case StyleAppearance::Checkbox: |
| return CSSValueCheckbox; |
| case StyleAppearance::Radio: |
| return CSSValueRadio; |
| case StyleAppearance::PushButton: |
| return CSSValuePushButton; |
| case StyleAppearance::SquareButton: |
| return CSSValueSquareButton; |
| case StyleAppearance::Button: |
| return CSSValueButton; |
| case StyleAppearance::DefaultButton: |
| return CSSValueDefaultButton; |
| case StyleAppearance::Listbox: |
| return CSSValueListbox; |
| case StyleAppearance::Menulist: |
| return CSSValueMenulist; |
| case StyleAppearance::MenulistButton: |
| return CSSValueMenulistButton; |
| case StyleAppearance::Meter: |
| return CSSValueMeter; |
| case StyleAppearance::ProgressBar: |
| return CSSValueProgressBar; |
| case StyleAppearance::SliderHorizontal: |
| return CSSValueSliderHorizontal; |
| case StyleAppearance::SliderVertical: |
| return CSSValueSliderVertical; |
| case StyleAppearance::SearchField: |
| return CSSValueSearchfield; |
| case StyleAppearance::TextField: |
| return CSSValueTextfield; |
| case StyleAppearance::TextArea: |
| return CSSValueTextarea; |
| #if ENABLE(ATTACHMENT_ELEMENT) |
| case StyleAppearance::Attachment: |
| return CSSValueAttachment; |
| case StyleAppearance::BorderlessAttachment: |
| return CSSValueBorderlessAttachment; |
| #endif |
| #if ENABLE(APPLE_PAY) |
| case StyleAppearance::ApplePayButton: |
| return CSSValueApplePayButton; |
| #endif |
| case StyleAppearance::ColorWell: |
| case StyleAppearance::ColorWellSwatch: |
| case StyleAppearance::ColorWellSwatchOverlay: |
| case StyleAppearance::ColorWellSwatchWrapper: |
| #if ENABLE(SERVICE_CONTROLS) |
| case StyleAppearance::ImageControlsButton: |
| #endif |
| case StyleAppearance::InnerSpinButton: |
| case StyleAppearance::ListButton: |
| case StyleAppearance::SearchFieldDecoration: |
| case StyleAppearance::SearchFieldResultsDecoration: |
| case StyleAppearance::SearchFieldResultsButton: |
| case StyleAppearance::SearchFieldCancelButton: |
| case StyleAppearance::SliderThumbHorizontal: |
| case StyleAppearance::SliderThumbVertical: |
| case StyleAppearance::Switch: |
| case StyleAppearance::SwitchThumb: |
| case StyleAppearance::SwitchTrack: |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueNone; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr StyleAppearance fromCSSValueID(CSSValueID valueID) |
| { |
| if (valueID == CSSValueNone) |
| return StyleAppearance::None; |
| |
| if (valueID == CSSValueAuto) |
| return StyleAppearance::Auto; |
| |
| return StyleAppearance(valueID - CSSValueBase + static_cast<unsigned>(StyleAppearance::Base)); |
| } |
| |
| #define TYPE BackfaceVisibility |
| #define FOR_EACH(CASE) CASE(Visible) CASE(Hidden) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE FieldSizing |
| #define FOR_EACH(CASE) CASE(Fixed) CASE(Content) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(FillAttachment e) |
| { |
| switch (e) { |
| case FillAttachment::ScrollBackground: |
| return CSSValueScroll; |
| case FillAttachment::LocalBackground: |
| return CSSValueLocal; |
| case FillAttachment::FixedBackground: |
| return CSSValueFixed; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FillAttachment fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueScroll: |
| return FillAttachment::ScrollBackground; |
| case CSSValueLocal: |
| return FillAttachment::LocalBackground; |
| case CSSValueFixed: |
| return FillAttachment::FixedBackground; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FillAttachment::ScrollBackground; |
| } |
| |
| constexpr CSSValueID toCSSValueID(FillBox e) |
| { |
| switch (e) { |
| case FillBox::BorderBox: |
| return CSSValueBorderBox; |
| case FillBox::PaddingBox: |
| return CSSValuePaddingBox; |
| case FillBox::ContentBox: |
| return CSSValueContentBox; |
| case FillBox::BorderArea: |
| return CSSValueBorderArea; |
| case FillBox::Text: |
| return CSSValueText; |
| case FillBox::NoClip: |
| return CSSValueNoClip; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FillBox fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueBorder: |
| case CSSValueBorderBox: |
| return FillBox::BorderBox; |
| case CSSValuePadding: |
| case CSSValuePaddingBox: |
| return FillBox::PaddingBox; |
| case CSSValueContent: |
| case CSSValueContentBox: |
| return FillBox::ContentBox; |
| case CSSValueBorderArea: |
| return FillBox::BorderArea; |
| case CSSValueText: |
| case CSSValueWebkitText: |
| return FillBox::Text; |
| case CSSValueNoClip: |
| return FillBox::NoClip; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FillBox::BorderBox; |
| } |
| |
| #define TYPE FillRepeat |
| #define FOR_EACH(CASE) CASE(Repeat) CASE(NoRepeat) CASE(Round) CASE(Space) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxPack |
| #define FOR_EACH(CASE) CASE(Start) CASE(Center) CASE(End) CASE(Justify) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxAlignment |
| #define FOR_EACH(CASE) CASE(Stretch) CASE(Start) CASE(Center) CASE(End) CASE(Baseline) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxDecorationBreak |
| #define FOR_EACH(CASE) CASE(Slice) CASE(Clone) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Edge |
| #define FOR_EACH(CASE) CASE(Top) CASE(Right) CASE(Bottom) CASE(Left) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxSizing |
| #define FOR_EACH(CASE) CASE(BorderBox) CASE(ContentBox) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxDirection |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Reverse) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BoxLines |
| #define FOR_EACH(CASE) CASE(Single) CASE(Multiple) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(BoxOrient e) |
| { |
| switch (e) { |
| case BoxOrient::Horizontal: |
| return CSSValueHorizontal; |
| case BoxOrient::Vertical: |
| return CSSValueVertical; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr BoxOrient fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueHorizontal: |
| case CSSValueInlineAxis: |
| return BoxOrient::Horizontal; |
| case CSSValueVertical: |
| case CSSValueBlockAxis: |
| return BoxOrient::Vertical; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return BoxOrient::Horizontal; |
| } |
| |
| #define TYPE CaptionSide |
| #define FOR_EACH(CASE) CASE(Top) CASE(Bottom) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Clear |
| #define FOR_EACH(CASE) CASE(None) CASE(Left) CASE(Right) CASE(InlineStart) CASE(InlineEnd) CASE(Both) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextBoxTrim |
| #define FOR_EACH(CASE) CASE(None) CASE(TrimStart) CASE(TrimEnd) CASE(TrimBoth) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(CursorType e) |
| { |
| switch (e) { |
| case CursorType::Auto: |
| return CSSValueAuto; |
| case CursorType::Default: |
| return CSSValueDefault; |
| case CursorType::None: |
| return CSSValueNone; |
| case CursorType::ContextMenu: |
| return CSSValueContextMenu; |
| case CursorType::Help: |
| return CSSValueHelp; |
| case CursorType::Pointer: |
| return CSSValuePointer; |
| case CursorType::Progress: |
| return CSSValueProgress; |
| case CursorType::Wait: |
| return CSSValueWait; |
| case CursorType::Cell: |
| return CSSValueCell; |
| case CursorType::Crosshair: |
| return CSSValueCrosshair; |
| case CursorType::Text: |
| return CSSValueText; |
| case CursorType::VerticalText: |
| return CSSValueVerticalText; |
| case CursorType::Alias: |
| return CSSValueAlias; |
| case CursorType::Copy: |
| return CSSValueCopy; |
| case CursorType::Move: |
| return CSSValueMove; |
| case CursorType::NoDrop: |
| return CSSValueNoDrop; |
| case CursorType::NotAllowed: |
| return CSSValueNotAllowed; |
| case CursorType::Grab: |
| return CSSValueGrab; |
| case CursorType::Grabbing: |
| return CSSValueGrabbing; |
| case CursorType::EResize: |
| return CSSValueEResize; |
| case CursorType::NResize: |
| return CSSValueNResize; |
| case CursorType::NEResize: |
| return CSSValueNeResize; |
| case CursorType::NWResize: |
| return CSSValueNwResize; |
| case CursorType::SResize: |
| return CSSValueSResize; |
| case CursorType::SEResize: |
| return CSSValueSeResize; |
| case CursorType::SWResize: |
| return CSSValueSwResize; |
| case CursorType::WResize: |
| return CSSValueWResize; |
| case CursorType::EWResize: |
| return CSSValueEwResize; |
| case CursorType::NSResize: |
| return CSSValueNsResize; |
| case CursorType::NESWResize: |
| return CSSValueNeswResize; |
| case CursorType::NWSEResize: |
| return CSSValueNwseResize; |
| case CursorType::ColumnResize: |
| return CSSValueColResize; |
| case CursorType::RowResize: |
| return CSSValueRowResize; |
| case CursorType::AllScroll: |
| return CSSValueAllScroll; |
| case CursorType::ZoomIn: |
| return CSSValueZoomIn; |
| case CursorType::ZoomOut: |
| return CSSValueZoomOut; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr CursorType fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueCopy: |
| return CursorType::Copy; |
| case CSSValueWebkitGrab: |
| return CursorType::Grab; |
| case CSSValueWebkitGrabbing: |
| return CursorType::Grabbing; |
| case CSSValueWebkitZoomIn: |
| return CursorType::ZoomIn; |
| case CSSValueWebkitZoomOut: |
| return CursorType::ZoomOut; |
| case CSSValueNone: |
| return CursorType::None; |
| default: |
| return static_cast<CursorType>(valueID - CSSValueAuto); |
| } |
| } |
| |
| #if ENABLE(CURSOR_VISIBILITY) |
| |
| #define TYPE CursorVisibility |
| #define FOR_EACH(CASE) CASE(Auto) CASE(AutoHide) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #endif |
| |
| constexpr CSSValueID toCSSValueID(DisplayType e) |
| { |
| switch (e) { |
| case DisplayType::Inline: |
| return CSSValueInline; |
| case DisplayType::Block: |
| return CSSValueBlock; |
| case DisplayType::ListItem: |
| return CSSValueListItem; |
| case DisplayType::InlineBlock: |
| return CSSValueInlineBlock; |
| case DisplayType::Table: |
| return CSSValueTable; |
| case DisplayType::InlineTable: |
| return CSSValueInlineTable; |
| case DisplayType::TableRowGroup: |
| return CSSValueTableRowGroup; |
| case DisplayType::TableHeaderGroup: |
| return CSSValueTableHeaderGroup; |
| case DisplayType::TableFooterGroup: |
| return CSSValueTableFooterGroup; |
| case DisplayType::TableRow: |
| return CSSValueTableRow; |
| case DisplayType::TableColumnGroup: |
| return CSSValueTableColumnGroup; |
| case DisplayType::TableColumn: |
| return CSSValueTableColumn; |
| case DisplayType::TableCell: |
| return CSSValueTableCell; |
| case DisplayType::TableCaption: |
| return CSSValueTableCaption; |
| case DisplayType::Box: |
| return CSSValueWebkitBox; |
| case DisplayType::InlineBox: |
| return CSSValueWebkitInlineBox; |
| case DisplayType::Flex: |
| return CSSValueFlex; |
| case DisplayType::InlineFlex: |
| return CSSValueInlineFlex; |
| case DisplayType::Grid: |
| return CSSValueGrid; |
| case DisplayType::InlineGrid: |
| return CSSValueInlineGrid; |
| case DisplayType::None: |
| return CSSValueNone; |
| case DisplayType::Contents: |
| return CSSValueContents; |
| case DisplayType::FlowRoot: |
| return CSSValueFlowRoot; |
| case DisplayType::Ruby: |
| return CSSValueRuby; |
| case DisplayType::RubyBlock: |
| return CSSValueBlockRuby; |
| case DisplayType::RubyBase: |
| return CSSValueRubyBase; |
| case DisplayType::RubyAnnotation: |
| return CSSValueRubyText; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr DisplayType fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueInline: |
| return DisplayType::Inline; |
| case CSSValueBlock: |
| return DisplayType::Block; |
| case CSSValueListItem: |
| return DisplayType::ListItem; |
| case CSSValueInlineBlock: |
| return DisplayType::InlineBlock; |
| case CSSValueTable: |
| return DisplayType::Table; |
| case CSSValueInlineTable: |
| return DisplayType::InlineTable; |
| case CSSValueTableRowGroup: |
| return DisplayType::TableRowGroup; |
| case CSSValueTableHeaderGroup: |
| return DisplayType::TableHeaderGroup; |
| case CSSValueTableFooterGroup: |
| return DisplayType::TableFooterGroup; |
| case CSSValueTableRow: |
| return DisplayType::TableRow; |
| case CSSValueTableColumnGroup: |
| return DisplayType::TableColumnGroup; |
| case CSSValueTableColumn: |
| return DisplayType::TableColumn; |
| case CSSValueTableCell: |
| return DisplayType::TableCell; |
| case CSSValueTableCaption: |
| return DisplayType::TableCaption; |
| case CSSValueWebkitBox: |
| return DisplayType::Box; |
| case CSSValueWebkitInlineBox: |
| return DisplayType::InlineBox; |
| case CSSValueFlex: |
| return DisplayType::Flex; |
| case CSSValueInlineFlex: |
| return DisplayType::InlineFlex; |
| case CSSValueGrid: |
| return DisplayType::Grid; |
| case CSSValueInlineGrid: |
| return DisplayType::InlineGrid; |
| case CSSValueNone: |
| return DisplayType::None; |
| case CSSValueContents: |
| return DisplayType::Contents; |
| case CSSValueFlowRoot: |
| return DisplayType::FlowRoot; |
| case CSSValueRuby: |
| return DisplayType::Ruby; |
| case CSSValueBlockRuby: |
| return DisplayType::RubyBlock; |
| case CSSValueRubyBase: |
| return DisplayType::RubyBase; |
| case CSSValueRubyText: |
| return DisplayType::RubyAnnotation; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return DisplayType::Inline; |
| } |
| |
| #define TYPE EmptyCell |
| #define FOR_EACH(CASE) CASE(Show) CASE(Hide) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE FlexDirection |
| #define FOR_EACH(CASE) CASE(Row) CASE(RowReverse) CASE(Column) CASE(ColumnReverse) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(FlexWrap e) |
| { |
| switch (e) { |
| case FlexWrap::NoWrap: |
| return CSSValueNowrap; |
| case FlexWrap::Wrap: |
| return CSSValueWrap; |
| case FlexWrap::Reverse: |
| return CSSValueWrapReverse; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FlexWrap fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNowrap: |
| return FlexWrap::NoWrap; |
| case CSSValueWrap: |
| return FlexWrap::Wrap; |
| case CSSValueWrapReverse: |
| return FlexWrap::Reverse; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FlexWrap::NoWrap; |
| } |
| |
| #define TYPE Float |
| #define FOR_EACH(CASE) CASE(None) CASE(Left) CASE(Right) CASE(InlineStart) CASE(InlineEnd) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE LineBreak |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Loose) CASE(Normal) CASE(Strict) CASE(AfterWhiteSpace) CASE(Anywhere) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE HangingPunctuation |
| #define FOR_EACH(CASE) CASE(First) CASE(Last) CASE(AllowEnd) CASE(ForceEnd) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ListStylePosition |
| #define FOR_EACH(CASE) CASE(Outside) CASE(Inside) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE MarqueeBehavior |
| #define FOR_EACH(CASE) CASE(None) CASE(Scroll) CASE(Slide) CASE(Alternate) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(MarqueeDirection direction) |
| { |
| switch (direction) { |
| case MarqueeDirection::Forward: |
| return CSSValueForwards; |
| case MarqueeDirection::Backward: |
| return CSSValueBackwards; |
| case MarqueeDirection::Auto: |
| return CSSValueAuto; |
| case MarqueeDirection::Up: |
| return CSSValueUp; |
| case MarqueeDirection::Down: |
| return CSSValueDown; |
| case MarqueeDirection::Left: |
| return CSSValueLeft; |
| case MarqueeDirection::Right: |
| return CSSValueRight; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr MarqueeDirection fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueForwards: |
| return MarqueeDirection::Forward; |
| case CSSValueBackwards: |
| return MarqueeDirection::Backward; |
| case CSSValueAuto: |
| return MarqueeDirection::Auto; |
| case CSSValueAhead: |
| case CSSValueUp: // We don't support vertical languages, so AHEAD just maps to UP. |
| return MarqueeDirection::Up; |
| case CSSValueReverse: |
| case CSSValueDown: // REVERSE just maps to DOWN, since we don't do vertical text. |
| return MarqueeDirection::Down; |
| case CSSValueLeft: |
| return MarqueeDirection::Left; |
| case CSSValueRight: |
| return MarqueeDirection::Right; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return MarqueeDirection::Auto; |
| } |
| |
| #define TYPE NBSPMode |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Space) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(Overflow e) |
| { |
| switch (e) { |
| case Overflow::Visible: |
| return CSSValueVisible; |
| case Overflow::Hidden: |
| return CSSValueHidden; |
| case Overflow::Scroll: |
| return CSSValueScroll; |
| case Overflow::Auto: |
| return CSSValueAuto; |
| case Overflow::PagedX: |
| return CSSValueWebkitPagedX; |
| case Overflow::PagedY: |
| return CSSValueWebkitPagedY; |
| case Overflow::Clip: |
| return CSSValueClip; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr Overflow fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueVisible: |
| return Overflow::Visible; |
| case CSSValueHidden: |
| return Overflow::Hidden; |
| case CSSValueScroll: |
| return Overflow::Scroll; |
| case CSSValueOverlay: |
| case CSSValueAuto: |
| return Overflow::Auto; |
| case CSSValueWebkitPagedX: |
| return Overflow::PagedX; |
| case CSSValueWebkitPagedY: |
| return Overflow::PagedY; |
| case CSSValueClip: |
| return Overflow::Clip; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return Overflow::Visible; |
| } |
| |
| #define TYPE OverscrollBehavior |
| #define FOR_EACH(CASE) CASE(Contain) CASE(None) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE OverflowAnchor |
| #define FOR_EACH(CASE) CASE(None) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(BreakBetween e) |
| { |
| switch (e) { |
| case BreakBetween::Auto: |
| return CSSValueAuto; |
| case BreakBetween::Avoid: |
| return CSSValueAvoid; |
| case BreakBetween::AvoidColumn: |
| return CSSValueAvoidColumn; |
| case BreakBetween::AvoidPage: |
| return CSSValueAvoidPage; |
| case BreakBetween::Column: |
| return CSSValueColumn; |
| case BreakBetween::Page: |
| return CSSValuePage; |
| case BreakBetween::LeftPage: |
| return CSSValueLeft; |
| case BreakBetween::RightPage: |
| return CSSValueRight; |
| case BreakBetween::RectoPage: |
| return CSSValueRecto; |
| case BreakBetween::VersoPage: |
| return CSSValueVerso; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr BreakBetween fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return BreakBetween::Auto; |
| case CSSValueAvoid: |
| return BreakBetween::Avoid; |
| case CSSValueAvoidColumn: |
| return BreakBetween::AvoidColumn; |
| case CSSValueAvoidPage: |
| return BreakBetween::AvoidPage; |
| case CSSValueColumn: |
| return BreakBetween::Column; |
| case CSSValuePage: |
| return BreakBetween::Page; |
| case CSSValueLeft: |
| return BreakBetween::LeftPage; |
| case CSSValueRight: |
| return BreakBetween::RightPage; |
| case CSSValueRecto: |
| return BreakBetween::RectoPage; |
| case CSSValueVerso: |
| return BreakBetween::VersoPage; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return BreakBetween::Auto; |
| } |
| |
| #define TYPE BreakInside |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Avoid) CASE(AvoidColumn) CASE(AvoidPage) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(PositionType e) |
| { |
| switch (e) { |
| case PositionType::Static: |
| return CSSValueStatic; |
| case PositionType::Relative: |
| return CSSValueRelative; |
| case PositionType::Absolute: |
| return CSSValueAbsolute; |
| case PositionType::Fixed: |
| return CSSValueFixed; |
| case PositionType::Sticky: |
| return CSSValueSticky; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr PositionType fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueStatic: |
| return PositionType::Static; |
| case CSSValueRelative: |
| return PositionType::Relative; |
| case CSSValueAbsolute: |
| return PositionType::Absolute; |
| case CSSValueFixed: |
| return PositionType::Fixed; |
| case CSSValueSticky: |
| case CSSValueWebkitSticky: |
| return PositionType::Sticky; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return PositionType::Static; |
| } |
| |
| #define TYPE Resize |
| #define FOR_EACH(CASE) CASE(Both) CASE(Horizontal) CASE(Vertical) CASE(Block) CASE(Inline) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TableLayoutType |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Fixed) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextAlignMode e) |
| { |
| switch (e) { |
| case TextAlignMode::Start: |
| return CSSValueStart; |
| case TextAlignMode::End: |
| return CSSValueEnd; |
| case TextAlignMode::Left: |
| return CSSValueLeft; |
| case TextAlignMode::Right: |
| return CSSValueRight; |
| case TextAlignMode::Center: |
| return CSSValueCenter; |
| case TextAlignMode::Justify: |
| return CSSValueJustify; |
| case TextAlignMode::WebKitLeft: |
| return CSSValueWebkitLeft; |
| case TextAlignMode::WebKitRight: |
| return CSSValueWebkitRight; |
| case TextAlignMode::WebKitCenter: |
| return CSSValueWebkitCenter; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextAlignMode fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueWebkitAuto: // Legacy -webkit-auto. Eqiuvalent to start. |
| case CSSValueStart: |
| return TextAlignMode::Start; |
| case CSSValueEnd: |
| return TextAlignMode::End; |
| default: |
| return static_cast<TextAlignMode>(valueID - CSSValueLeft); |
| } |
| } |
| |
| #define TYPE TextAlignLast |
| #define FOR_EACH(CASE) CASE(Start) CASE(End) CASE(Left) CASE(Right) CASE(Center) CASE(Justify) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextGroupAlign |
| #define FOR_EACH(CASE) CASE(None) CASE(Start) CASE(End) CASE(Left) CASE(Right) CASE(Center) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextJustify e) |
| { |
| switch (e) { |
| case TextJustify::Auto: |
| return CSSValueAuto; |
| case TextJustify::None: |
| return CSSValueNone; |
| case TextJustify::InterWord: |
| return CSSValueInterWord; |
| case TextJustify::InterCharacter: |
| return CSSValueInterCharacter; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextJustify fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return TextJustify::Auto; |
| case CSSValueNone: |
| return TextJustify::None; |
| case CSSValueInterWord: |
| return TextJustify::InterWord; |
| case CSSValueInterCharacter: |
| case CSSValueDistribute: |
| return TextJustify::InterCharacter; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextJustify::Auto; |
| } |
| |
| #define TYPE TextDecorationLine |
| #define FOR_EACH(CASE) CASE(Underline) CASE(Overline) CASE(LineThrough) CASE(Blink) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextDecorationStyle |
| #define FOR_EACH(CASE) CASE(Solid) CASE(Double) CASE(Dotted) CASE(Dashed) CASE(Wavy) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextSecurity |
| #define FOR_EACH(CASE) CASE(None) CASE(Disc) CASE(Circle) CASE(Square) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextDecorationSkipInk |
| #define FOR_EACH(CASE) CASE(None) CASE(Auto) CASE(All) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextTransform |
| #define FOR_EACH(CASE) CASE(Capitalize) CASE(Uppercase) CASE(Lowercase) CASE(FullSizeKana) CASE(FullWidth) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(UnicodeBidi e) |
| { |
| switch (e) { |
| case UnicodeBidi::Normal: |
| return CSSValueNormal; |
| case UnicodeBidi::Embed: |
| return CSSValueEmbed; |
| case UnicodeBidi::Override: |
| return CSSValueBidiOverride; |
| case UnicodeBidi::Isolate: |
| return CSSValueIsolate; |
| case UnicodeBidi::IsolateOverride: |
| return CSSValueIsolateOverride; |
| case UnicodeBidi::Plaintext: |
| return CSSValuePlaintext; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr UnicodeBidi fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNormal: |
| return UnicodeBidi::Normal; |
| case CSSValueEmbed: |
| return UnicodeBidi::Embed; |
| case CSSValueBidiOverride: |
| return UnicodeBidi::Override; |
| case CSSValueIsolate: |
| case CSSValueWebkitIsolate: |
| return UnicodeBidi::Isolate; |
| case CSSValueIsolateOverride: |
| case CSSValueWebkitIsolateOverride: |
| return UnicodeBidi::IsolateOverride; |
| case CSSValuePlaintext: |
| case CSSValueWebkitPlaintext: |
| return UnicodeBidi::Plaintext; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return UnicodeBidi::Normal; |
| } |
| |
| #define TYPE UserDrag |
| #define FOR_EACH(CASE) CASE(Auto) CASE(None) CASE(Element) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE UserModify |
| #define FOR_EACH(CASE) CASE(ReadOnly) CASE(ReadWrite) CASE(ReadWritePlaintextOnly) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(UserSelect e) |
| { |
| switch (e) { |
| case UserSelect::None: |
| return CSSValueNone; |
| case UserSelect::Text: |
| return CSSValueText; |
| case UserSelect::All: |
| return CSSValueAll; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr UserSelect fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return UserSelect::Text; |
| case CSSValueNone: |
| return UserSelect::None; |
| case CSSValueText: |
| return UserSelect::Text; |
| case CSSValueAll: |
| return UserSelect::All; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return UserSelect::Text; |
| } |
| |
| #define TYPE Visibility |
| #define FOR_EACH(CASE) CASE(Visible) CASE(Hidden) CASE(Collapse) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE WhiteSpaceCollapse |
| #define FOR_EACH(CASE) CASE(Collapse) CASE(Preserve) CASE(PreserveBreaks) CASE(BreakSpaces) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE WordBreak |
| #define FOR_EACH(CASE) CASE(Normal) CASE(BreakAll) CASE(KeepAll) CASE(BreakWord) CASE(AutoPhrase) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE OverflowWrap |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Anywhere) CASE(BreakWord) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextDirection e) |
| { |
| switch (e) { |
| case TextDirection::LTR: |
| return CSSValueLtr; |
| case TextDirection::RTL: |
| return CSSValueRtl; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextDirection fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueLtr: |
| return TextDirection::LTR; |
| case CSSValueRtl: |
| return TextDirection::RTL; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextDirection::LTR; |
| } |
| |
| constexpr CSSValueID toCSSValueID(StyleWritingMode e) |
| { |
| switch (e) { |
| case StyleWritingMode::HorizontalTb: |
| return CSSValueHorizontalTb; |
| case StyleWritingMode::VerticalRl: |
| return CSSValueVerticalRl; |
| case StyleWritingMode::VerticalLr: |
| return CSSValueVerticalLr; |
| case StyleWritingMode::SidewaysRl: |
| return CSSValueSidewaysRl; |
| case StyleWritingMode::SidewaysLr: |
| return CSSValueSidewaysLr; |
| case StyleWritingMode::HorizontalBt: |
| return CSSValueHorizontalBt; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr StyleWritingMode fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueHorizontalTb: |
| case CSSValueLr: |
| case CSSValueLrTb: |
| case CSSValueRl: |
| case CSSValueRlTb: |
| return StyleWritingMode::HorizontalTb; |
| case CSSValueVerticalRl: |
| case CSSValueTb: |
| case CSSValueTbRl: |
| return StyleWritingMode::VerticalRl; |
| case CSSValueVerticalLr: |
| return StyleWritingMode::VerticalLr; |
| case CSSValueSidewaysLr: |
| return StyleWritingMode::SidewaysLr; |
| case CSSValueSidewaysRl: |
| return StyleWritingMode::SidewaysRl; |
| case CSSValueHorizontalBt: |
| return StyleWritingMode::HorizontalBt; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return StyleWritingMode::HorizontalTb; |
| } |
| |
| constexpr CSSValueID toCSSValueID(TextCombine e) |
| { |
| switch (e) { |
| case TextCombine::None: |
| return CSSValueNone; |
| case TextCombine::All: |
| return CSSValueAll; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextCombine fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNone: |
| return TextCombine::None; |
| case CSSValueAll: |
| case CSSValueHorizontal: // -webkit-text-combine only |
| return TextCombine::All; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextCombine::None; |
| } |
| |
| constexpr CSSValueID toCSSValueID(RubyPosition e) |
| { |
| switch (e) { |
| case RubyPosition::Over: |
| return CSSValueOver; |
| case RubyPosition::Under: |
| return CSSValueUnder; |
| case RubyPosition::InterCharacter: |
| return CSSValueInterCharacter; |
| case RubyPosition::LegacyInterCharacter: |
| return CSSValueLegacyInterCharacter; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr RubyPosition fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueOver: |
| case CSSValueBefore: // -webkit-ruby-position only |
| return RubyPosition::Over; |
| case CSSValueUnder: |
| case CSSValueAfter: // -webkit-ruby-position only |
| return RubyPosition::Under; |
| case CSSValueInterCharacter: |
| return RubyPosition::InterCharacter; |
| case CSSValueLegacyInterCharacter: |
| return RubyPosition::LegacyInterCharacter; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return RubyPosition::Over; |
| } |
| |
| #define TYPE RubyAlign |
| #define FOR_EACH(CASE) CASE(Start) CASE(Center) CASE(SpaceBetween) CASE(SpaceAround) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE RubyOverhang |
| #define FOR_EACH(CASE) CASE(Auto) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextOverflow |
| #define FOR_EACH(CASE) CASE(Clip) CASE(Ellipsis) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextWrapMode wrap) |
| { |
| switch (wrap) { |
| case TextWrapMode::Wrap: |
| return CSSValueWrap; |
| case TextWrapMode::NoWrap: |
| return CSSValueNowrap; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextWrapMode fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueWrap: |
| return TextWrapMode::Wrap; |
| case CSSValueNowrap: |
| return TextWrapMode::NoWrap; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextWrapMode::Wrap; |
| } |
| |
| #define TYPE TextWrapStyle |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Balance) CASE(Pretty) CASE(Stable) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextEmphasisFill |
| #define FOR_EACH(CASE) CASE(Filled) CASE(Open) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextEmphasisMark mark) |
| { |
| switch (mark) { |
| case TextEmphasisMark::Dot: |
| return CSSValueDot; |
| case TextEmphasisMark::Circle: |
| return CSSValueCircle; |
| case TextEmphasisMark::DoubleCircle: |
| return CSSValueDoubleCircle; |
| case TextEmphasisMark::Triangle: |
| return CSSValueTriangle; |
| case TextEmphasisMark::Sesame: |
| return CSSValueSesame; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextEmphasisMark fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueDot: |
| return TextEmphasisMark::Dot; |
| case CSSValueCircle: |
| return TextEmphasisMark::Circle; |
| case CSSValueDoubleCircle: |
| return TextEmphasisMark::DoubleCircle; |
| case CSSValueTriangle: |
| return TextEmphasisMark::Triangle; |
| case CSSValueSesame: |
| return TextEmphasisMark::Sesame; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextEmphasisMark::Dot; |
| } |
| |
| #define TYPE TextOrientation |
| #define FOR_EACH(CASE) CASE(Sideways) CASE(Mixed) CASE(Upright) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE PointerEvents |
| #define FOR_EACH(CASE) CASE(None) CASE(Stroke) CASE(Fill) CASE(Painted) \ |
| CASE(Visible) CASE(VisibleStroke) CASE(VisibleFill) CASE(VisiblePainted) \ |
| CASE(BoundingBox) CASE(Auto) CASE(All) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(Kerning kerning) |
| { |
| switch (kerning) { |
| case Kerning::Auto: |
| return CSSValueAuto; |
| case Kerning::Normal: |
| return CSSValueNormal; |
| case Kerning::NoShift: |
| return CSSValueNone; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr Kerning fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return Kerning::Auto; |
| case CSSValueNormal: |
| return Kerning::Normal; |
| case CSSValueNone: |
| return Kerning::NoShift; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return Kerning::Auto; |
| } |
| |
| #define TYPE ObjectFit |
| #define FOR_EACH(CASE) CASE(Fill) CASE(Contain) CASE(Cover) CASE(None) CASE(ScaleDown) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(FontSizeAdjust::Metric metric) |
| { |
| switch (metric) { |
| case FontSizeAdjust::Metric::ExHeight: |
| return CSSValueExHeight; |
| case FontSizeAdjust::Metric::CapHeight: |
| return CSSValueCapHeight; |
| case FontSizeAdjust::Metric::ChWidth: |
| return CSSValueChWidth; |
| case FontSizeAdjust::Metric::IcWidth: |
| return CSSValueIcWidth; |
| case FontSizeAdjust::Metric::IcHeight: |
| return CSSValueIcHeight; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueAuto; |
| } |
| |
| template<> constexpr FontSizeAdjust::Metric fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueExHeight: |
| return FontSizeAdjust::Metric::ExHeight; |
| case CSSValueCapHeight: |
| return FontSizeAdjust::Metric::CapHeight; |
| case CSSValueChWidth: |
| return FontSizeAdjust::Metric::ChWidth; |
| case CSSValueIcWidth: |
| return FontSizeAdjust::Metric::IcWidth; |
| case CSSValueIcHeight: |
| return FontSizeAdjust::Metric::IcHeight; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontSizeAdjust::Metric::ExHeight; |
| } |
| |
| constexpr CSSValueID toCSSValueID(FontSmoothingMode smoothing) |
| { |
| switch (smoothing) { |
| case FontSmoothingMode::AutoSmoothing: |
| return CSSValueAuto; |
| case FontSmoothingMode::NoSmoothing: |
| return CSSValueNone; |
| case FontSmoothingMode::Antialiased: |
| return CSSValueAntialiased; |
| case FontSmoothingMode::SubpixelAntialiased: |
| return CSSValueSubpixelAntialiased; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FontSmoothingMode fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return FontSmoothingMode::AutoSmoothing; |
| case CSSValueNone: |
| return FontSmoothingMode::NoSmoothing; |
| case CSSValueAntialiased: |
| return FontSmoothingMode::Antialiased; |
| case CSSValueSubpixelAntialiased: |
| return FontSmoothingMode::SubpixelAntialiased; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontSmoothingMode::AutoSmoothing; |
| } |
| |
| constexpr CSSValueID toCSSValueID(FontSmallCaps smallCaps) |
| { |
| switch (smallCaps) { |
| case FontSmallCaps::Off: |
| return CSSValueNormal; |
| case FontSmallCaps::On: |
| return CSSValueSmallCaps; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FontSmallCaps fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueSmallCaps: |
| return FontSmallCaps::On; |
| case CSSValueNormal: |
| return FontSmallCaps::Off; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontSmallCaps::Off; |
| } |
| |
| constexpr CSSValueID toCSSValueID(TextRenderingMode e) |
| { |
| switch (e) { |
| case TextRenderingMode::AutoTextRendering: |
| return CSSValueAuto; |
| case TextRenderingMode::OptimizeSpeed: |
| return CSSValueOptimizeSpeed; |
| case TextRenderingMode::OptimizeLegibility: |
| return CSSValueOptimizeLegibility; |
| case TextRenderingMode::GeometricPrecision: |
| return CSSValueGeometricPrecision; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextRenderingMode fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return TextRenderingMode::AutoTextRendering; |
| case CSSValueOptimizeSpeed: |
| return TextRenderingMode::OptimizeSpeed; |
| case CSSValueOptimizeLegibility: |
| return TextRenderingMode::OptimizeLegibility; |
| case CSSValueGeometricPrecision: |
| return TextRenderingMode::GeometricPrecision; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextRenderingMode::AutoTextRendering; |
| } |
| |
| #define TYPE Hyphens |
| #define FOR_EACH(CASE) CASE(None) CASE(Manual) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE LineSnap |
| #define FOR_EACH(CASE) CASE(None) CASE(Baseline) CASE(Contain) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE LineAlign |
| #define FOR_EACH(CASE) CASE(None) CASE(Edges) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE SpeakAs |
| #define FOR_EACH(CASE) CASE(SpellOut) CASE(Digits) CASE(LiteralPunctuation) CASE(NoPunctuation) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Order |
| #define FOR_EACH(CASE) CASE(Logical) CASE(Visual) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BlendMode |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Multiply) CASE(Screen) CASE(Overlay) \ |
| CASE(Darken) CASE(Lighten) CASE(ColorDodge) CASE(ColorBurn) \ |
| CASE(HardLight) CASE(SoftLight) CASE(Difference) CASE(Exclusion) \ |
| CASE(Hue) CASE(Saturation) CASE(Color) CASE(Luminosity) CASE(PlusDarker) CASE(PlusLighter) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Isolation |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Isolate) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE LineCap |
| #define FOR_EACH(CASE) CASE(Butt) CASE(Round) CASE(Square) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE LineJoin |
| #define FOR_EACH(CASE) CASE(Miter) CASE(Round) CASE(Bevel) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(WindRule e) |
| { |
| switch (e) { |
| case WindRule::NonZero: |
| return CSSValueNonzero; |
| case WindRule::EvenOdd: |
| return CSSValueEvenodd; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr WindRule fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNonzero: |
| return WindRule::NonZero; |
| case CSSValueEvenodd: |
| return WindRule::EvenOdd; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return WindRule::NonZero; |
| } |
| |
| #define TYPE AlignmentBaseline |
| #define FOR_EACH(CASE) CASE(AfterEdge) CASE(Alphabetic) CASE(Baseline) \ |
| CASE(BeforeEdge) CASE(Central) CASE(Hanging) CASE(Ideographic) CASE(Mathematical) \ |
| CASE(Middle) CASE(TextAfterEdge) CASE(TextBeforeEdge) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BorderCollapse |
| #define FOR_EACH(CASE) CASE(Separate) CASE(Collapse) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(ImageRendering imageRendering) |
| { |
| switch (imageRendering) { |
| case ImageRendering::Auto: |
| return CSSValueAuto; |
| case ImageRendering::CrispEdges: |
| return CSSValueCrispEdges; |
| case ImageRendering::Pixelated: |
| return CSSValuePixelated; |
| case ImageRendering::OptimizeSpeed: |
| return CSSValueOptimizeSpeed; |
| case ImageRendering::OptimizeQuality: |
| return CSSValueOptimizeQuality; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr ImageRendering fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return ImageRendering::Auto; |
| case CSSValueWebkitOptimizeContrast: |
| case CSSValueCrispEdges: |
| case CSSValueWebkitCrispEdges: |
| return ImageRendering::CrispEdges; |
| case CSSValuePixelated: |
| return ImageRendering::Pixelated; |
| case CSSValueOptimizeSpeed: |
| return ImageRendering::OptimizeSpeed; |
| case CSSValueOptimizeQuality: |
| return ImageRendering::OptimizeQuality; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return ImageRendering::Auto; |
| } |
| |
| #if HAVE(CORE_MATERIAL) |
| |
| constexpr CSSValueID toCSSValueID(AppleVisualEffect effect) |
| { |
| switch (effect) { |
| case AppleVisualEffect::None: |
| return CSSValueNone; |
| case AppleVisualEffect::BlurUltraThinMaterial: |
| return CSSValueAppleSystemBlurMaterialUltraThin; |
| case AppleVisualEffect::BlurThinMaterial: |
| return CSSValueAppleSystemBlurMaterialThin; |
| case AppleVisualEffect::BlurMaterial: |
| return CSSValueAppleSystemBlurMaterial; |
| case AppleVisualEffect::BlurThickMaterial: |
| return CSSValueAppleSystemBlurMaterialThick; |
| case AppleVisualEffect::BlurChromeMaterial: |
| return CSSValueAppleSystemBlurMaterialChrome; |
| #if HAVE(MATERIAL_HOSTING) |
| case AppleVisualEffect::GlassMaterial: |
| return CSSValueAppleSystemGlassMaterial; |
| case AppleVisualEffect::GlassClearMaterial: |
| return CSSValueAppleSystemGlassMaterialClear; |
| case AppleVisualEffect::GlassSubduedMaterial: |
| return CSSValueAppleSystemGlassMaterialSubdued; |
| case AppleVisualEffect::GlassMediaControlsMaterial: |
| return CSSValueAppleSystemGlassMaterialMediaControls; |
| case AppleVisualEffect::GlassSubduedMediaControlsMaterial: |
| return CSSValueAppleSystemGlassMaterialMediaControlsSubdued; |
| #endif |
| case AppleVisualEffect::VibrancyLabel: |
| return CSSValueAppleSystemVibrancyLabel; |
| case AppleVisualEffect::VibrancySecondaryLabel: |
| return CSSValueAppleSystemVibrancySecondaryLabel; |
| case AppleVisualEffect::VibrancyTertiaryLabel: |
| return CSSValueAppleSystemVibrancyTertiaryLabel; |
| case AppleVisualEffect::VibrancyQuaternaryLabel: |
| return CSSValueAppleSystemVibrancyQuaternaryLabel; |
| case AppleVisualEffect::VibrancyFill: |
| return CSSValueAppleSystemVibrancyFill; |
| case AppleVisualEffect::VibrancySecondaryFill: |
| return CSSValueAppleSystemVibrancySecondaryFill; |
| case AppleVisualEffect::VibrancyTertiaryFill: |
| return CSSValueAppleSystemVibrancyTertiaryFill; |
| case AppleVisualEffect::VibrancySeparator: |
| return CSSValueAppleSystemVibrancySeparator; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr AppleVisualEffect fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNone: |
| return AppleVisualEffect::None; |
| case CSSValueAppleSystemBlurMaterialUltraThin: |
| return AppleVisualEffect::BlurUltraThinMaterial; |
| case CSSValueAppleSystemBlurMaterialThin: |
| return AppleVisualEffect::BlurThinMaterial; |
| case CSSValueAppleSystemBlurMaterial: |
| return AppleVisualEffect::BlurMaterial; |
| case CSSValueAppleSystemBlurMaterialThick: |
| return AppleVisualEffect::BlurThickMaterial; |
| case CSSValueAppleSystemBlurMaterialChrome: |
| return AppleVisualEffect::BlurChromeMaterial; |
| #if HAVE(MATERIAL_HOSTING) |
| case CSSValueAppleSystemGlassMaterial: |
| return AppleVisualEffect::GlassMaterial; |
| case CSSValueAppleSystemGlassMaterialClear: |
| return AppleVisualEffect::GlassClearMaterial; |
| case CSSValueAppleSystemGlassMaterialSubdued: |
| return AppleVisualEffect::GlassSubduedMaterial; |
| case CSSValueAppleSystemGlassMaterialMediaControls: |
| return AppleVisualEffect::GlassMediaControlsMaterial; |
| case CSSValueAppleSystemGlassMaterialMediaControlsSubdued: |
| return AppleVisualEffect::GlassSubduedMediaControlsMaterial; |
| #endif |
| case CSSValueAppleSystemVibrancyLabel: |
| return AppleVisualEffect::VibrancyLabel; |
| case CSSValueAppleSystemVibrancySecondaryLabel: |
| return AppleVisualEffect::VibrancySecondaryLabel; |
| case CSSValueAppleSystemVibrancyTertiaryLabel: |
| return AppleVisualEffect::VibrancyTertiaryLabel; |
| case CSSValueAppleSystemVibrancyQuaternaryLabel: |
| return AppleVisualEffect::VibrancyQuaternaryLabel; |
| case CSSValueAppleSystemVibrancyFill: |
| return AppleVisualEffect::VibrancyFill; |
| case CSSValueAppleSystemVibrancySecondaryFill: |
| return AppleVisualEffect::VibrancySecondaryFill; |
| case CSSValueAppleSystemVibrancyTertiaryFill: |
| return AppleVisualEffect::VibrancyTertiaryFill; |
| case CSSValueAppleSystemVibrancySeparator: |
| return AppleVisualEffect::VibrancySeparator; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return AppleVisualEffect::None; |
| } |
| |
| #endif // HAVE(CORE_MATERIAL) |
| |
| #define TYPE InputSecurity |
| #define FOR_EACH(CASE) CASE(Auto) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TransformStyle3D e) |
| { |
| switch (e) { |
| case TransformStyle3D::Flat: |
| return CSSValueFlat; |
| case TransformStyle3D::Preserve3D: |
| return CSSValuePreserve3d; |
| #if HAVE(CORE_ANIMATION_SEPARATED_LAYERS) |
| case TransformStyle3D::Separated: |
| return CSSValueSeparated; |
| #endif |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TransformStyle3D fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueFlat: |
| return TransformStyle3D::Flat; |
| case CSSValuePreserve3d: |
| return TransformStyle3D::Preserve3D; |
| #if HAVE(CORE_ANIMATION_SEPARATED_LAYERS) |
| case CSSValueSeparated: |
| return TransformStyle3D::Separated; |
| #endif |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TransformStyle3D::Flat; |
| } |
| |
| #define TYPE TransformBox |
| #define FOR_EACH(CASE) CASE(StrokeBox) CASE(ContentBox) CASE(BorderBox) CASE(FillBox) CASE(ViewBox) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColumnAxis |
| #define FOR_EACH(CASE) CASE(Horizontal) CASE(Vertical) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColumnProgression |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Reverse) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE BufferedRendering |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Dynamic) CASE(Static) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColorInterpolation |
| #define FOR_EACH(CASE) CASE(Auto) CASE(SRGB) CASE(LinearRGB) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ColorRendering |
| #define FOR_EACH(CASE) CASE(Auto) CASE(OptimizeSpeed) CASE(OptimizeQuality) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| |
| #define TYPE DominantBaseline |
| #define FOR_EACH(CASE) CASE(Auto) CASE(UseScript) CASE(NoChange) CASE(ResetSize) CASE(Central) \ |
| CASE(Middle) CASE(TextBeforeEdge) CASE(TextAfterEdge) CASE(Ideographic) CASE(Alphabetic) \ |
| CASE(Hanging) CASE(Mathematical) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(ShapeRendering e) |
| { |
| switch (e) { |
| case ShapeRendering::Auto: |
| return CSSValueAuto; |
| case ShapeRendering::OptimizeSpeed: |
| return CSSValueOptimizeSpeed; |
| case ShapeRendering::CrispEdges: |
| return CSSValueCrispedges; // "crispedges", not "crisp-edges" |
| case ShapeRendering::GeometricPrecision: |
| return CSSValueGeometricPrecision; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr ShapeRendering fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return ShapeRendering::Auto; |
| case CSSValueOptimizeSpeed: |
| return ShapeRendering::OptimizeSpeed; |
| case CSSValueCrispedges: // "crispedges", not "crisp-edges" |
| return ShapeRendering::CrispEdges; |
| case CSSValueGeometricPrecision: |
| return ShapeRendering::GeometricPrecision; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return ShapeRendering::Auto; |
| } |
| |
| #define TYPE TextAnchor |
| #define FOR_EACH(CASE) CASE(Start) CASE(Middle) CASE(End) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE VectorEffect |
| #define FOR_EACH(CASE) CASE(None) CASE(NonScalingStroke) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE MaskType |
| #define FOR_EACH(CASE) CASE(Luminance) CASE(Alpha) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(CSSBoxType cssBox) |
| { |
| switch (cssBox) { |
| case CSSBoxType::MarginBox: |
| return CSSValueMarginBox; |
| case CSSBoxType::BorderBox: |
| return CSSValueBorderBox; |
| case CSSBoxType::PaddingBox: |
| return CSSValuePaddingBox; |
| case CSSBoxType::ContentBox: |
| return CSSValueContentBox; |
| case CSSBoxType::FillBox: |
| return CSSValueFillBox; |
| case CSSBoxType::StrokeBox: |
| return CSSValueStrokeBox; |
| case CSSBoxType::ViewBox: |
| return CSSValueViewBox; |
| case CSSBoxType::BoxMissing: |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueNone; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr CSSBoxType fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueMarginBox: |
| return CSSBoxType::MarginBox; |
| case CSSValueBorderBox: |
| return CSSBoxType::BorderBox; |
| case CSSValuePaddingBox: |
| return CSSBoxType::PaddingBox; |
| case CSSValueContentBox: |
| return CSSBoxType::ContentBox; |
| // The following are used in an SVG context. |
| case CSSValueFillBox: |
| return CSSBoxType::FillBox; |
| case CSSValueStrokeBox: |
| return CSSBoxType::StrokeBox; |
| case CSSValueViewBox: |
| return CSSBoxType::ViewBox; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSBoxType::BoxMissing; |
| } |
| |
| #define TYPE ItemPosition |
| #define FOR_EACH(CASE) CASE(Legacy) CASE(Auto) CASE(Normal) CASE(Stretch) CASE(Baseline) \ |
| CASE(LastBaseline) CASE(Center) CASE(Start) CASE(End) CASE(SelfStart) CASE(SelfEnd) \ |
| CASE(FlexStart) CASE(FlexEnd) CASE(Left) CASE(Right) CASE(AnchorCenter) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE OverflowAlignment |
| #define FOR_EACH(CASE) CASE(Default) CASE(Unsafe) CASE(Safe) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ContentPosition |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Baseline) CASE(LastBaseline) CASE(Center) CASE(Start) \ |
| CASE(End) CASE(FlexStart) CASE(FlexEnd) CASE(Left) CASE(Right) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ContentDistribution |
| #define FOR_EACH(CASE) CASE(Default) CASE(SpaceBetween) CASE(SpaceAround) CASE(SpaceEvenly) CASE(Stretch) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TextZoom |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Reset) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE TouchAction |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Manipulation) CASE(None) CASE(PanX) CASE(PanY) CASE(PinchZoom) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ScrollSnapStrictness |
| #define FOR_EACH(CASE) CASE(None) CASE(Proximity) CASE(Mandatory) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(ScrollSnapAxis axis) |
| { |
| switch (axis) { |
| case ScrollSnapAxis::XAxis: |
| return CSSValueX; |
| case ScrollSnapAxis::YAxis: |
| return CSSValueY; |
| case ScrollSnapAxis::Block: |
| return CSSValueBlock; |
| case ScrollSnapAxis::Inline: |
| return CSSValueInline; |
| case ScrollSnapAxis::Both: |
| return CSSValueBoth; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr ScrollSnapAxis fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueX: |
| return ScrollSnapAxis::XAxis; |
| case CSSValueY: |
| return ScrollSnapAxis::YAxis; |
| case CSSValueBlock: |
| return ScrollSnapAxis::Block; |
| case CSSValueInline: |
| return ScrollSnapAxis::Inline; |
| case CSSValueBoth: |
| return ScrollSnapAxis::Both; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return ScrollSnapAxis::Both; |
| } |
| |
| #define TYPE ScrollSnapAxisAlignType |
| #define FOR_EACH(CASE) CASE(None) CASE(Start) CASE(Center) CASE(End) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ScrollSnapStop |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Always) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ScrollbarWidth |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Thin) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(TextEdgeType textEdgeType) |
| { |
| switch (textEdgeType) { |
| case TextEdgeType::Auto: |
| return CSSValueAuto; |
| case TextEdgeType::Leading: |
| return CSSValueLeading; |
| case TextEdgeType::Text: |
| return CSSValueText; |
| case TextEdgeType::CapHeight: |
| return CSSValueCap; |
| case TextEdgeType::ExHeight: |
| return CSSValueEx; |
| case TextEdgeType::Alphabetic: |
| return CSSValueAlphabetic; |
| case TextEdgeType::CJKIdeographic: |
| return CSSValueIdeographic; |
| case TextEdgeType::CJKIdeographicInk: |
| return CSSValueIdeographicInk; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr TextEdgeType fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return TextEdgeType::Auto; |
| case CSSValueLeading: |
| return TextEdgeType::Leading; |
| case CSSValueText: |
| return TextEdgeType::Text; |
| case CSSValueCap: |
| return TextEdgeType::CapHeight; |
| case CSSValueEx: |
| return TextEdgeType::ExHeight; |
| case CSSValueAlphabetic: |
| return TextEdgeType::Alphabetic; |
| case CSSValueIdeographic: |
| return TextEdgeType::CJKIdeographic; |
| case CSSValueIdeographicInk: |
| return TextEdgeType::CJKIdeographicInk; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return TextEdgeType::Auto; |
| } |
| |
| #if ENABLE(APPLE_PAY) |
| |
| #define TYPE ApplePayButtonStyle |
| #define FOR_EACH(CASE) CASE(White) CASE(WhiteOutline) CASE(Black) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ApplePayButtonType |
| #if !ENABLE(APPLE_PAY_NEW_BUTTON_TYPES) |
| #define FOR_EACH(CASE) CASE(Plain) CASE(Buy) CASE(SetUp) CASE(Donate) CASE(CheckOut) CASE(Book) CASE(Subscribe) |
| #else |
| #define FOR_EACH(CASE) CASE(Plain) CASE(Buy) CASE(SetUp) CASE(Donate) CASE(CheckOut) CASE(Book) CASE(Subscribe) \ |
| CASE(Reload) CASE(AddMoney) CASE(TopUp) CASE(Order) CASE(Rent) CASE(Support) CASE(Contribute) CASE(Tip) |
| #endif |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #endif |
| |
| constexpr CSSValueID toCSSValueID(FontVariantPosition position) |
| { |
| switch (position) { |
| case FontVariantPosition::Normal: |
| return CSSValueNormal; |
| case FontVariantPosition::Subscript: |
| return CSSValueSub; |
| case FontVariantPosition::Superscript: |
| return CSSValueSuper; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FontVariantPosition fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNormal: |
| return FontVariantPosition::Normal; |
| case CSSValueSub: |
| return FontVariantPosition::Subscript; |
| case CSSValueSuper: |
| return FontVariantPosition::Superscript; |
| default: |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontVariantPosition::Normal; |
| } |
| } |
| |
| constexpr CSSValueID toCSSValueID(FontVariantCaps caps) |
| { |
| switch (caps) { |
| case FontVariantCaps::Normal: |
| return CSSValueNormal; |
| case FontVariantCaps::Small: |
| return CSSValueSmallCaps; |
| case FontVariantCaps::AllSmall: |
| return CSSValueAllSmallCaps; |
| case FontVariantCaps::Petite: |
| return CSSValuePetiteCaps; |
| case FontVariantCaps::AllPetite: |
| return CSSValueAllPetiteCaps; |
| case FontVariantCaps::Unicase: |
| return CSSValueUnicase; |
| case FontVariantCaps::Titling: |
| return CSSValueTitlingCaps; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FontVariantCaps fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueNormal: |
| return FontVariantCaps::Normal; |
| case CSSValueSmallCaps: |
| return FontVariantCaps::Small; |
| case CSSValueAllSmallCaps: |
| return FontVariantCaps::AllSmall; |
| case CSSValuePetiteCaps: |
| return FontVariantCaps::Petite; |
| case CSSValueAllPetiteCaps: |
| return FontVariantCaps::AllPetite; |
| case CSSValueUnicase: |
| return FontVariantCaps::Unicase; |
| case CSSValueTitlingCaps: |
| return FontVariantCaps::Titling; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontVariantCaps::Normal; |
| } |
| |
| #define TYPE FontVariantEmoji |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Text) CASE(Emoji) CASE(Unicode) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| constexpr CSSValueID toCSSValueID(FontOpticalSizing sizing) |
| { |
| switch (sizing) { |
| case FontOpticalSizing::Enabled: |
| return CSSValueAuto; |
| case FontOpticalSizing::Disabled: |
| return CSSValueNone; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return CSSValueInvalid; |
| } |
| |
| template<> constexpr FontOpticalSizing fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueAuto: |
| return FontOpticalSizing::Enabled; |
| case CSSValueNone: |
| return FontOpticalSizing::Disabled; |
| default: |
| break; |
| } |
| ASSERT_NOT_REACHED_UNDER_CONSTEXPR_CONTEXT(); |
| return FontOpticalSizing::Enabled; |
| } |
| |
| template<> constexpr FontTechnology fromCSSValueID(CSSValueID valueID) |
| { |
| switch (valueID) { |
| case CSSValueColorColrv0: |
| return FontTechnology::ColorColrv0; |
| case CSSValueColorColrv1: |
| return FontTechnology::ColorColrv1; |
| case CSSValueColorCbdt: |
| return FontTechnology::ColorCbdt; |
| case CSSValueColorSbix: |
| return FontTechnology::ColorSbix; |
| case CSSValueColorSvg: |
| return FontTechnology::ColorSvg; |
| case CSSValueFeaturesAat: |
| return FontTechnology::FeaturesAat; |
| case CSSValueFeaturesGraphite: |
| return FontTechnology::FeaturesGraphite; |
| case CSSValueFeaturesOpentype: |
| return FontTechnology::FeaturesOpentype; |
| case CSSValueIncremental: |
| return FontTechnology::Incremental; |
| case CSSValuePalettes: |
| return FontTechnology::Palettes; |
| case CSSValueVariations: |
| return FontTechnology::Variations; |
| default: |
| break; |
| } |
| return FontTechnology::Invalid; |
| } |
| |
| #define TYPE FontSynthesisLonghandValue |
| #define FOR_EACH(CASE) CASE(Auto) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE FontLoadingBehavior |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Block) CASE(Swap) CASE(Fallback) CASE(Optional) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE MathStyle |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Compact) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ContainerType |
| #define FOR_EACH(CASE) CASE(Normal) CASE(Size) CASE(InlineSize) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ContentVisibility |
| #define FOR_EACH(CASE) CASE(Visible) CASE(Hidden) CASE(Auto) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE ScrollAxis |
| #define FOR_EACH(CASE) CASE(Block) CASE(Inline) CASE(X) CASE(Y) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE QuoteType |
| #define FOR_EACH(CASE) CASE(OpenQuote) CASE(CloseQuote) CASE(NoOpenQuote) CASE(NoCloseQuote) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE OverflowContinue |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Discard) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Style::PositionTryOrder |
| #define FOR_EACH(CASE) CASE(Normal) CASE(MostWidth) CASE(MostHeight) CASE(MostBlockSize) CASE(MostInlineSize) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE PositionVisibility |
| #define FOR_EACH(CASE) CASE(AnchorsValid) CASE(AnchorsVisible) CASE(NoOverflow) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Style::PositionTryFallback::Tactic |
| #define FOR_EACH(CASE) CASE(FlipBlock) CASE(FlipInline) CASE(FlipStart) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #define TYPE Style::ScrollBehavior |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Smooth) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #if ENABLE(WEBKIT_OVERFLOW_SCROLLING_CSS_PROPERTY) |
| |
| #define TYPE Style::WebkitOverflowScrolling |
| #define FOR_EACH(CASE) CASE(Auto) CASE(Touch) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #endif |
| |
| #if ENABLE(WEBKIT_TOUCH_CALLOUT_CSS_PROPERTY) |
| |
| #define TYPE Style::WebkitTouchCallout |
| #define FOR_EACH(CASE) CASE(Default) CASE(None) |
| DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| #undef TYPE |
| #undef FOR_EACH |
| |
| #endif |
| |
| #undef EMIT_TO_CSS_SWITCH_CASE |
| #undef EMIT_FROM_CSS_SWITCH_CASE |
| #undef DEFINE_TO_FROM_CSS_VALUE_ID_FUNCTIONS |
| |
| } |