/* This file is automatically generated from CSSPropertyNames.in by makeprop, do not edit */

#include "config.h"
#include "StylePropertyShorthandFunctions.h"

#include "StylePropertyShorthand.h"
#include <wtf/NeverDestroyed.h>

namespace WebCore {

StylePropertyShorthand allShorthand()
{
    static const CSSPropertyID allProperties[] = {
        CSSPropertyColor,
        CSSPropertyDisplay,
        CSSPropertyFontFamily,
        CSSPropertyFontSize,
        CSSPropertyFontStyle,
        CSSPropertyFontWeight,
        CSSPropertyTextRendering,
        CSSPropertyFontFeatureSettings,
        CSSPropertyWebkitFontKerning,
        CSSPropertyWebkitFontSmoothing,
        CSSPropertyFontVariantLigatures,
        CSSPropertyFontVariantPosition,
        CSSPropertyFontVariantCaps,
        CSSPropertyFontVariantNumeric,
        CSSPropertyFontVariantAlternates,
        CSSPropertyFontVariantEastAsian,
        CSSPropertyWebkitLocale,
        CSSPropertyWebkitTextOrientation,
        CSSPropertyWebkitWritingMode,
        CSSPropertyWebkitTextZoom,
        CSSPropertyZoom,
        CSSPropertyFontSynthesis,
        CSSPropertyWebkitRubyPosition,
        CSSPropertyAlignmentBaseline,
        CSSPropertyAnimationDelay,
        CSSPropertyAnimationDirection,
        CSSPropertyAnimationDuration,
        CSSPropertyAnimationFillMode,
        CSSPropertyAnimationIterationCount,
        CSSPropertyAnimationName,
        CSSPropertyAnimationPlayState,
        CSSPropertyAnimationTimingFunction,
        CSSPropertyBackgroundAttachment,
        CSSPropertyBackgroundBlendMode,
        CSSPropertyBackgroundClip,
        CSSPropertyBackgroundColor,
        CSSPropertyBackgroundImage,
        CSSPropertyBackgroundOrigin,
        CSSPropertyBackgroundPositionX,
        CSSPropertyBackgroundPositionY,
        CSSPropertyBackgroundRepeatX,
        CSSPropertyBackgroundRepeatY,
        CSSPropertyBackgroundSize,
        CSSPropertyBaselineShift,
        CSSPropertyBorderBottomColor,
        CSSPropertyBorderBottomLeftRadius,
        CSSPropertyBorderBottomRightRadius,
        CSSPropertyBorderBottomStyle,
        CSSPropertyBorderBottomWidth,
        CSSPropertyBorderCollapse,
        CSSPropertyBorderImageOutset,
        CSSPropertyBorderImageRepeat,
        CSSPropertyBorderImageSlice,
        CSSPropertyBorderImageSource,
        CSSPropertyBorderImageWidth,
        CSSPropertyBorderLeftColor,
        CSSPropertyBorderLeftStyle,
        CSSPropertyBorderLeftWidth,
        CSSPropertyBorderRightColor,
        CSSPropertyBorderRightStyle,
        CSSPropertyBorderRightWidth,
        CSSPropertyBorderTopColor,
        CSSPropertyBorderTopLeftRadius,
        CSSPropertyBorderTopRightRadius,
        CSSPropertyBorderTopStyle,
        CSSPropertyBorderTopWidth,
        CSSPropertyBottom,
        CSSPropertyBoxShadow,
        CSSPropertyBoxSizing,
        CSSPropertyBreakAfter,
        CSSPropertyBreakBefore,
        CSSPropertyBreakInside,
        CSSPropertyBufferedRendering,
        CSSPropertyCaptionSide,
        CSSPropertyClear,
        CSSPropertyClip,
        CSSPropertyWebkitClipPath,
        CSSPropertyClipPath,
        CSSPropertyClipRule,
        CSSPropertyColorInterpolation,
        CSSPropertyColorInterpolationFilters,
        CSSPropertyColorProfile,
        CSSPropertyColorRendering,
        CSSPropertyContent,
        CSSPropertyCounterIncrement,
        CSSPropertyCounterReset,
        CSSPropertyCursor,
        CSSPropertyWebkitCursorVisibility,
        CSSPropertyCx,
        CSSPropertyCy,
        CSSPropertyDominantBaseline,
        CSSPropertyEmptyCells,
        CSSPropertyEnableBackground,
        CSSPropertyFill,
        CSSPropertyFillOpacity,
        CSSPropertyFillRule,
        CSSPropertyFloat,
        CSSPropertyFloodColor,
        CSSPropertyFloodOpacity,
        CSSPropertyFontStretch,
        CSSPropertyGlyphOrientationHorizontal,
        CSSPropertyGlyphOrientationVertical,
        CSSPropertyHangingPunctuation,
        CSSPropertyHeight,
        CSSPropertyImageRendering,
        CSSPropertyKerning,
        CSSPropertyLeft,
        CSSPropertyLetterSpacing,
        CSSPropertyLightingColor,
        CSSPropertyLineHeight,
        CSSPropertyListStyleImage,
        CSSPropertyListStylePosition,
        CSSPropertyListStyleType,
        CSSPropertyMarginBottom,
        CSSPropertyMarginLeft,
        CSSPropertyMarginRight,
        CSSPropertyMarginTop,
        CSSPropertyMarkerEnd,
        CSSPropertyMarkerMid,
        CSSPropertyMarkerStart,
        CSSPropertyMask,
        CSSPropertyMaskType,
        CSSPropertyMaxHeight,
        CSSPropertyMaxWidth,
        CSSPropertyMinHeight,
        CSSPropertyMinWidth,
        CSSPropertyObjectFit,
        CSSPropertyObjectPosition,
        CSSPropertyOpacity,
        CSSPropertyOrphans,
        CSSPropertyOutlineColor,
        CSSPropertyOutlineOffset,
        CSSPropertyOutlineStyle,
        CSSPropertyOutlineWidth,
        CSSPropertyOverflowWrap,
        CSSPropertyOverflowX,
        CSSPropertyOverflowY,
        CSSPropertyPaddingBottom,
        CSSPropertyPaddingLeft,
        CSSPropertyPaddingRight,
        CSSPropertyPaddingTop,
        CSSPropertyPage,
        CSSPropertyPageBreakAfter,
        CSSPropertyPageBreakBefore,
        CSSPropertyPageBreakInside,
        CSSPropertyPaintOrder,
        CSSPropertyPointerEvents,
        CSSPropertyPosition,
        CSSPropertyQuotes,
        CSSPropertyR,
        CSSPropertyResize,
        CSSPropertyRight,
        CSSPropertyRx,
        CSSPropertyRy,
        CSSPropertyShapeRendering,
        CSSPropertySize,
        CSSPropertySrc,
        CSSPropertyStopColor,
        CSSPropertyStopOpacity,
        CSSPropertyStroke,
        CSSPropertyStrokeDasharray,
        CSSPropertyStrokeDashoffset,
        CSSPropertyStrokeLinecap,
        CSSPropertyStrokeLinejoin,
        CSSPropertyStrokeMiterlimit,
        CSSPropertyStrokeOpacity,
        CSSPropertyStrokeWidth,
        CSSPropertySpeak,
        CSSPropertyTableLayout,
        CSSPropertyTabSize,
        CSSPropertyTextAlign,
        CSSPropertyTextAnchor,
        CSSPropertyTextDecoration,
        CSSPropertyTextIndent,
        CSSPropertyTextLineThrough,
        CSSPropertyTextLineThroughColor,
        CSSPropertyTextLineThroughMode,
        CSSPropertyTextLineThroughStyle,
        CSSPropertyTextLineThroughWidth,
        CSSPropertyTextOverflow,
        CSSPropertyTextOverline,
        CSSPropertyTextOverlineColor,
        CSSPropertyTextOverlineMode,
        CSSPropertyTextOverlineStyle,
        CSSPropertyTextOverlineWidth,
        CSSPropertyTextShadow,
        CSSPropertyTextTransform,
        CSSPropertyTextUnderline,
        CSSPropertyTextUnderlineColor,
        CSSPropertyTextUnderlineMode,
        CSSPropertyTextUnderlineStyle,
        CSSPropertyTextUnderlineWidth,
        CSSPropertyTop,
        CSSPropertyTransitionDelay,
        CSSPropertyTransitionDuration,
        CSSPropertyTransitionProperty,
        CSSPropertyTransitionTimingFunction,
        CSSPropertyUnicodeRange,
        CSSPropertyVectorEffect,
        CSSPropertyVerticalAlign,
        CSSPropertyVisibility,
        CSSPropertyWhiteSpace,
        CSSPropertyWidows,
        CSSPropertyWidth,
        CSSPropertyWillChange,
        CSSPropertyWordBreak,
        CSSPropertyWordSpacing,
        CSSPropertyWordWrap,
        CSSPropertyWritingMode,
        CSSPropertyX,
        CSSPropertyY,
        CSSPropertyZIndex,
        CSSPropertyAlt,
        CSSPropertyWebkitAppearance,
        CSSPropertyWebkitAspectRatio,
        CSSPropertyWebkitBackfaceVisibility,
        CSSPropertyWebkitBackgroundClip,
        CSSPropertyWebkitBackgroundComposite,
        CSSPropertyWebkitBackgroundOrigin,
        CSSPropertyWebkitBackgroundSize,
        CSSPropertyWebkitBorderAfterColor,
        CSSPropertyWebkitBorderAfterStyle,
        CSSPropertyWebkitBorderAfterWidth,
        CSSPropertyWebkitBorderBeforeColor,
        CSSPropertyWebkitBorderBeforeStyle,
        CSSPropertyWebkitBorderBeforeWidth,
        CSSPropertyWebkitBorderEndColor,
        CSSPropertyWebkitBorderEndStyle,
        CSSPropertyWebkitBorderEndWidth,
        CSSPropertyWebkitBorderFit,
        CSSPropertyWebkitBorderHorizontalSpacing,
        CSSPropertyWebkitBorderImage,
        CSSPropertyWebkitBorderStartColor,
        CSSPropertyWebkitBorderStartStyle,
        CSSPropertyWebkitBorderStartWidth,
        CSSPropertyWebkitBorderVerticalSpacing,
        CSSPropertyWebkitBoxAlign,
        CSSPropertyWebkitBoxDirection,
        CSSPropertyWebkitBoxFlex,
        CSSPropertyWebkitBoxFlexGroup,
        CSSPropertyWebkitBoxLines,
        CSSPropertyWebkitBoxOrdinalGroup,
        CSSPropertyWebkitBoxOrient,
        CSSPropertyWebkitBoxPack,
        CSSPropertyWebkitBoxReflect,
        CSSPropertyWebkitBoxShadow,
        CSSPropertyWebkitColumnAxis,
        CSSPropertyWebkitColumnBreakAfter,
        CSSPropertyWebkitColumnBreakBefore,
        CSSPropertyWebkitColumnBreakInside,
        CSSPropertyColumnCount,
        CSSPropertyColumnFill,
        CSSPropertyColumnGap,
        CSSPropertyColumnProgression,
        CSSPropertyColumnRuleColor,
        CSSPropertyColumnRuleStyle,
        CSSPropertyColumnRuleWidth,
        CSSPropertyColumnSpan,
        CSSPropertyColumnWidth,
        CSSPropertyWebkitBoxDecorationBreak,
        CSSPropertyFilter,
        CSSPropertyAlignContent,
        CSSPropertyAlignItems,
        CSSPropertyAlignSelf,
        CSSPropertyFlexBasis,
        CSSPropertyFlexDirection,
        CSSPropertyFlexGrow,
        CSSPropertyFlexShrink,
        CSSPropertyFlexWrap,
        CSSPropertyJustifyContent,
        CSSPropertyWebkitBackdropFilter,
        CSSPropertyWebkitFontSizeDelta,
        CSSPropertyJustifySelf,
        CSSPropertyJustifyItems,
        CSSPropertyGridAutoColumns,
        CSSPropertyGridAutoRows,
        CSSPropertyGridColumnEnd,
        CSSPropertyGridColumnGap,
        CSSPropertyGridColumnStart,
        CSSPropertyGridTemplateColumns,
        CSSPropertyGridTemplateRows,
        CSSPropertyGridRowEnd,
        CSSPropertyGridRowGap,
        CSSPropertyGridRowStart,
        CSSPropertyGridTemplateAreas,
        CSSPropertyGridAutoFlow,
        CSSPropertyWebkitHyphenateCharacter,
        CSSPropertyWebkitHyphenateLimitAfter,
        CSSPropertyWebkitHyphenateLimitBefore,
        CSSPropertyWebkitHyphenateLimitLines,
        CSSPropertyWebkitHyphens,
        CSSPropertyWebkitInitialLetter,
        CSSPropertyWebkitLineBoxContain,
        CSSPropertyWebkitLineAlign,
        CSSPropertyWebkitLineBreak,
        CSSPropertyWebkitLineClamp,
        CSSPropertyWebkitLineGrid,
        CSSPropertyWebkitLineSnap,
        CSSPropertyWebkitLogicalWidth,
        CSSPropertyWebkitLogicalHeight,
        CSSPropertyWebkitMarginAfterCollapse,
        CSSPropertyWebkitMarginBeforeCollapse,
        CSSPropertyWebkitMarginBottomCollapse,
        CSSPropertyWebkitMarginTopCollapse,
        CSSPropertyWebkitMarginAfter,
        CSSPropertyWebkitMarginBefore,
        CSSPropertyWebkitMarginEnd,
        CSSPropertyWebkitMarginStart,
        CSSPropertyWebkitMarqueeDirection,
        CSSPropertyWebkitMarqueeIncrement,
        CSSPropertyWebkitMarqueeRepetition,
        CSSPropertyWebkitMarqueeSpeed,
        CSSPropertyWebkitMarqueeStyle,
        CSSPropertyWebkitMaskBoxImage,
        CSSPropertyWebkitMaskBoxImageOutset,
        CSSPropertyWebkitMaskBoxImageRepeat,
        CSSPropertyWebkitMaskBoxImageSlice,
        CSSPropertyWebkitMaskBoxImageSource,
        CSSPropertyWebkitMaskBoxImageWidth,
        CSSPropertyWebkitMaskClip,
        CSSPropertyWebkitMaskComposite,
        CSSPropertyWebkitMaskImage,
        CSSPropertyWebkitMaskOrigin,
        CSSPropertyWebkitMaskPositionX,
        CSSPropertyWebkitMaskPositionY,
        CSSPropertyWebkitMaskRepeatX,
        CSSPropertyWebkitMaskRepeatY,
        CSSPropertyWebkitMaskSize,
        CSSPropertyWebkitMaskSourceType,
        CSSPropertyWebkitMaxLogicalWidth,
        CSSPropertyWebkitMaxLogicalHeight,
        CSSPropertyWebkitMinLogicalWidth,
        CSSPropertyWebkitMinLogicalHeight,
        CSSPropertyWebkitNbspMode,
        CSSPropertyOrder,
        CSSPropertyWebkitPaddingAfter,
        CSSPropertyWebkitPaddingBefore,
        CSSPropertyWebkitPaddingEnd,
        CSSPropertyWebkitPaddingStart,
        CSSPropertyPerspective,
        CSSPropertyPerspectiveOriginX,
        CSSPropertyPerspectiveOriginY,
        CSSPropertyWebkitPrintColorAdjust,
        CSSPropertyWebkitRtlOrdering,
        CSSPropertyWebkitSvgShadow,
        CSSPropertyWebkitTextCombine,
        CSSPropertyWebkitTextDecorationLine,
        CSSPropertyWebkitTextDecorationStyle,
        CSSPropertyWebkitTextDecorationColor,
        CSSPropertyWebkitTextDecorationSkip,
        CSSPropertyWebkitTextUnderlinePosition,
        CSSPropertyWebkitTextDecorationsInEffect,
        CSSPropertyWebkitTextEmphasisColor,
        CSSPropertyWebkitTextEmphasisPosition,
        CSSPropertyWebkitTextEmphasisStyle,
        CSSPropertyWebkitTextFillColor,
        CSSPropertyWebkitTextSecurity,
        CSSPropertyWebkitTextStrokeColor,
        CSSPropertyWebkitTextStrokeWidth,
        CSSPropertyTransform,
        CSSPropertyTransformOriginX,
        CSSPropertyTransformOriginY,
        CSSPropertyTransformOriginZ,
        CSSPropertyTransformStyle,
        CSSPropertyWebkitTransformStyle,
        CSSPropertyWebkitUserDrag,
        CSSPropertyWebkitUserModify,
        CSSPropertyWebkitUserSelect,
        CSSPropertyWebkitFlowInto,
        CSSPropertyWebkitFlowFrom,
        CSSPropertyWebkitRegionFragment,
        CSSPropertyWebkitRegionBreakAfter,
        CSSPropertyWebkitRegionBreakBefore,
        CSSPropertyWebkitRegionBreakInside,
        CSSPropertyWebkitShapeOutside,
        CSSPropertyWebkitShapeMargin,
        CSSPropertyWebkitShapeImageThreshold,
        CSSPropertyWebkitDashboardRegion,
    };
    return StylePropertyShorthand(CSSPropertyAll, allProperties);
}

StylePropertyShorthand animationShorthand()
{
    static const CSSPropertyID animationProperties[] = {
        CSSPropertyAnimationName,
        CSSPropertyAnimationDuration,
        CSSPropertyAnimationTimingFunction,
        CSSPropertyAnimationDelay,
        CSSPropertyAnimationIterationCount,
        CSSPropertyAnimationDirection,
        CSSPropertyAnimationFillMode,
        CSSPropertyAnimationPlayState,
    };
    return StylePropertyShorthand(CSSPropertyAnimation, animationProperties);
}

StylePropertyShorthand backgroundShorthand()
{
    static const CSSPropertyID backgroundProperties[] = {
        CSSPropertyBackgroundImage,
        CSSPropertyBackgroundPositionX,
        CSSPropertyBackgroundPositionY,
        CSSPropertyBackgroundSize,
        CSSPropertyBackgroundRepeatX,
        CSSPropertyBackgroundRepeatY,
        CSSPropertyBackgroundAttachment,
        CSSPropertyBackgroundOrigin,
        CSSPropertyBackgroundClip,
        CSSPropertyBackgroundColor,
    };
    return StylePropertyShorthand(CSSPropertyBackground, backgroundProperties);
}

StylePropertyShorthand backgroundPositionShorthand()
{
    static const CSSPropertyID backgroundPositionProperties[] = {
        CSSPropertyBackgroundPositionX,
        CSSPropertyBackgroundPositionY,
    };
    return StylePropertyShorthand(CSSPropertyBackgroundPosition, backgroundPositionProperties);
}

StylePropertyShorthand backgroundRepeatShorthand()
{
    static const CSSPropertyID backgroundRepeatProperties[] = {
        CSSPropertyBackgroundRepeatX,
        CSSPropertyBackgroundRepeatY,
    };
    return StylePropertyShorthand(CSSPropertyBackgroundRepeat, backgroundRepeatProperties);
}

StylePropertyShorthand borderShorthand()
{
    static const CSSPropertyID borderProperties[] = {
        CSSPropertyBorderTopColor,
        CSSPropertyBorderTopStyle,
        CSSPropertyBorderTopWidth,
        CSSPropertyBorderRightColor,
        CSSPropertyBorderRightStyle,
        CSSPropertyBorderRightWidth,
        CSSPropertyBorderBottomColor,
        CSSPropertyBorderBottomStyle,
        CSSPropertyBorderBottomWidth,
        CSSPropertyBorderLeftColor,
        CSSPropertyBorderLeftStyle,
        CSSPropertyBorderLeftWidth,
    };
    return StylePropertyShorthand(CSSPropertyBorder, borderProperties);
}

StylePropertyShorthand borderBottomShorthand()
{
    static const CSSPropertyID borderBottomProperties[] = {
        CSSPropertyBorderBottomWidth,
        CSSPropertyBorderBottomStyle,
        CSSPropertyBorderBottomColor,
    };
    return StylePropertyShorthand(CSSPropertyBorderBottom, borderBottomProperties);
}

StylePropertyShorthand borderColorShorthand()
{
    static const CSSPropertyID borderColorProperties[] = {
        CSSPropertyBorderTopColor,
        CSSPropertyBorderRightColor,
        CSSPropertyBorderBottomColor,
        CSSPropertyBorderLeftColor,
    };
    return StylePropertyShorthand(CSSPropertyBorderColor, borderColorProperties);
}

StylePropertyShorthand borderImageShorthand()
{
    static const CSSPropertyID borderImageProperties[] = {
        CSSPropertyBorderImageSource,
        CSSPropertyBorderImageSlice,
        CSSPropertyBorderImageWidth,
        CSSPropertyBorderImageOutset,
        CSSPropertyBorderImageRepeat,
    };
    return StylePropertyShorthand(CSSPropertyBorderImage, borderImageProperties);
}

StylePropertyShorthand borderLeftShorthand()
{
    static const CSSPropertyID borderLeftProperties[] = {
        CSSPropertyBorderLeftWidth,
        CSSPropertyBorderLeftStyle,
        CSSPropertyBorderLeftColor,
    };
    return StylePropertyShorthand(CSSPropertyBorderLeft, borderLeftProperties);
}

StylePropertyShorthand borderRadiusShorthand()
{
    static const CSSPropertyID borderRadiusProperties[] = {
        CSSPropertyBorderTopLeftRadius,
        CSSPropertyBorderTopRightRadius,
        CSSPropertyBorderBottomRightRadius,
        CSSPropertyBorderBottomLeftRadius,
    };
    return StylePropertyShorthand(CSSPropertyBorderRadius, borderRadiusProperties);
}

StylePropertyShorthand borderRightShorthand()
{
    static const CSSPropertyID borderRightProperties[] = {
        CSSPropertyBorderRightWidth,
        CSSPropertyBorderRightStyle,
        CSSPropertyBorderRightColor,
    };
    return StylePropertyShorthand(CSSPropertyBorderRight, borderRightProperties);
}

StylePropertyShorthand borderSpacingShorthand()
{
    static const CSSPropertyID borderSpacingProperties[] = {
        CSSPropertyWebkitBorderHorizontalSpacing,
        CSSPropertyWebkitBorderVerticalSpacing,
    };
    return StylePropertyShorthand(CSSPropertyBorderSpacing, borderSpacingProperties);
}

StylePropertyShorthand borderStyleShorthand()
{
    static const CSSPropertyID borderStyleProperties[] = {
        CSSPropertyBorderTopStyle,
        CSSPropertyBorderRightStyle,
        CSSPropertyBorderBottomStyle,
        CSSPropertyBorderLeftStyle,
    };
    return StylePropertyShorthand(CSSPropertyBorderStyle, borderStyleProperties);
}

StylePropertyShorthand borderTopShorthand()
{
    static const CSSPropertyID borderTopProperties[] = {
        CSSPropertyBorderTopWidth,
        CSSPropertyBorderTopStyle,
        CSSPropertyBorderTopColor,
    };
    return StylePropertyShorthand(CSSPropertyBorderTop, borderTopProperties);
}

StylePropertyShorthand borderWidthShorthand()
{
    static const CSSPropertyID borderWidthProperties[] = {
        CSSPropertyBorderTopWidth,
        CSSPropertyBorderRightWidth,
        CSSPropertyBorderBottomWidth,
        CSSPropertyBorderLeftWidth,
    };
    return StylePropertyShorthand(CSSPropertyBorderWidth, borderWidthProperties);
}

StylePropertyShorthand fontShorthand()
{
    static const CSSPropertyID fontProperties[] = {
        CSSPropertyFontFamily,
        CSSPropertyFontSize,
        CSSPropertyFontStyle,
        CSSPropertyFontVariantCaps,
        CSSPropertyFontWeight,
        CSSPropertyLineHeight,
    };
    return StylePropertyShorthand(CSSPropertyFont, fontProperties);
}

StylePropertyShorthand fontVariantShorthand()
{
    static const CSSPropertyID fontVariantProperties[] = {
        CSSPropertyFontVariantLigatures,
        CSSPropertyFontVariantPosition,
        CSSPropertyFontVariantCaps,
        CSSPropertyFontVariantNumeric,
        CSSPropertyFontVariantAlternates,
        CSSPropertyFontVariantEastAsian,
    };
    return StylePropertyShorthand(CSSPropertyFontVariant, fontVariantProperties);
}

StylePropertyShorthand listStyleShorthand()
{
    static const CSSPropertyID listStyleProperties[] = {
        CSSPropertyListStyleType,
        CSSPropertyListStylePosition,
        CSSPropertyListStyleImage,
    };
    return StylePropertyShorthand(CSSPropertyListStyle, listStyleProperties);
}

StylePropertyShorthand marginShorthand()
{
    static const CSSPropertyID marginProperties[] = {
        CSSPropertyMarginTop,
        CSSPropertyMarginRight,
        CSSPropertyMarginBottom,
        CSSPropertyMarginLeft,
    };
    return StylePropertyShorthand(CSSPropertyMargin, marginProperties);
}

StylePropertyShorthand markerShorthand()
{
    static const CSSPropertyID markerProperties[] = {
        CSSPropertyMarkerStart,
        CSSPropertyMarkerMid,
        CSSPropertyMarkerEnd,
    };
    return StylePropertyShorthand(CSSPropertyMarker, markerProperties);
}

StylePropertyShorthand outlineShorthand()
{
    static const CSSPropertyID outlineProperties[] = {
        CSSPropertyOutlineColor,
        CSSPropertyOutlineStyle,
        CSSPropertyOutlineWidth,
    };
    return StylePropertyShorthand(CSSPropertyOutline, outlineProperties);
}

StylePropertyShorthand overflowShorthand()
{
    static const CSSPropertyID overflowProperties[] = {
        CSSPropertyOverflowX,
        CSSPropertyOverflowY,
    };
    return StylePropertyShorthand(CSSPropertyOverflow, overflowProperties);
}

StylePropertyShorthand paddingShorthand()
{
    static const CSSPropertyID paddingProperties[] = {
        CSSPropertyPaddingTop,
        CSSPropertyPaddingRight,
        CSSPropertyPaddingBottom,
        CSSPropertyPaddingLeft,
    };
    return StylePropertyShorthand(CSSPropertyPadding, paddingProperties);
}

StylePropertyShorthand transitionShorthand()
{
    static const CSSPropertyID transitionProperties[] = {
        CSSPropertyTransitionProperty,
        CSSPropertyTransitionDuration,
        CSSPropertyTransitionTimingFunction,
        CSSPropertyTransitionDelay,
    };
    return StylePropertyShorthand(CSSPropertyTransition, transitionProperties);
}

StylePropertyShorthand webkitBorderAfterShorthand()
{
    static const CSSPropertyID webkitBorderAfterProperties[] = {
        CSSPropertyWebkitBorderAfterWidth,
        CSSPropertyWebkitBorderAfterStyle,
        CSSPropertyWebkitBorderAfterColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitBorderAfter, webkitBorderAfterProperties);
}

StylePropertyShorthand webkitBorderBeforeShorthand()
{
    static const CSSPropertyID webkitBorderBeforeProperties[] = {
        CSSPropertyWebkitBorderBeforeWidth,
        CSSPropertyWebkitBorderBeforeStyle,
        CSSPropertyWebkitBorderBeforeColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitBorderBefore, webkitBorderBeforeProperties);
}

StylePropertyShorthand webkitBorderEndShorthand()
{
    static const CSSPropertyID webkitBorderEndProperties[] = {
        CSSPropertyWebkitBorderEndWidth,
        CSSPropertyWebkitBorderEndStyle,
        CSSPropertyWebkitBorderEndColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitBorderEnd, webkitBorderEndProperties);
}

StylePropertyShorthand webkitBorderRadiusShorthand()
{
    static const CSSPropertyID webkitBorderRadiusProperties[] = {
        CSSPropertyBorderTopLeftRadius,
        CSSPropertyBorderTopRightRadius,
        CSSPropertyBorderBottomRightRadius,
        CSSPropertyBorderBottomLeftRadius,
    };
    return StylePropertyShorthand(CSSPropertyWebkitBorderRadius, webkitBorderRadiusProperties);
}

StylePropertyShorthand webkitBorderStartShorthand()
{
    static const CSSPropertyID webkitBorderStartProperties[] = {
        CSSPropertyWebkitBorderStartWidth,
        CSSPropertyWebkitBorderStartStyle,
        CSSPropertyWebkitBorderStartColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitBorderStart, webkitBorderStartProperties);
}

StylePropertyShorthand columnRuleShorthand()
{
    static const CSSPropertyID columnRuleProperties[] = {
        CSSPropertyColumnRuleWidth,
        CSSPropertyColumnRuleStyle,
        CSSPropertyColumnRuleColor,
    };
    return StylePropertyShorthand(CSSPropertyColumnRule, columnRuleProperties);
}

StylePropertyShorthand columnsShorthand()
{
    static const CSSPropertyID columnsProperties[] = {
        CSSPropertyColumnWidth,
        CSSPropertyColumnCount,
    };
    return StylePropertyShorthand(CSSPropertyColumns, columnsProperties);
}

StylePropertyShorthand flexShorthand()
{
    static const CSSPropertyID flexProperties[] = {
        CSSPropertyFlexGrow,
        CSSPropertyFlexShrink,
        CSSPropertyFlexBasis,
    };
    return StylePropertyShorthand(CSSPropertyFlex, flexProperties);
}

StylePropertyShorthand flexFlowShorthand()
{
    static const CSSPropertyID flexFlowProperties[] = {
        CSSPropertyFlexDirection,
        CSSPropertyFlexWrap,
    };
    return StylePropertyShorthand(CSSPropertyFlexFlow, flexFlowProperties);
}

StylePropertyShorthand gridShorthand()
{
    static const CSSPropertyID gridProperties[] = {
        CSSPropertyGridTemplateRows,
        CSSPropertyGridTemplateColumns,
        CSSPropertyGridTemplateAreas,
        CSSPropertyGridAutoFlow,
        CSSPropertyGridAutoRows,
        CSSPropertyGridAutoColumns,
        CSSPropertyGridColumnGap,
        CSSPropertyGridRowGap,
    };
    return StylePropertyShorthand(CSSPropertyGrid, gridProperties);
}

StylePropertyShorthand gridAreaShorthand()
{
    static const CSSPropertyID gridAreaProperties[] = {
        CSSPropertyGridRowStart,
        CSSPropertyGridColumnStart,
        CSSPropertyGridRowEnd,
        CSSPropertyGridColumnEnd,
    };
    return StylePropertyShorthand(CSSPropertyGridArea, gridAreaProperties);
}

StylePropertyShorthand gridTemplateShorthand()
{
    static const CSSPropertyID gridTemplateProperties[] = {
        CSSPropertyGridTemplateRows,
        CSSPropertyGridTemplateColumns,
        CSSPropertyGridTemplateAreas,
    };
    return StylePropertyShorthand(CSSPropertyGridTemplate, gridTemplateProperties);
}

StylePropertyShorthand gridColumnShorthand()
{
    static const CSSPropertyID gridColumnProperties[] = {
        CSSPropertyGridColumnStart,
        CSSPropertyGridColumnEnd,
    };
    return StylePropertyShorthand(CSSPropertyGridColumn, gridColumnProperties);
}

StylePropertyShorthand gridGapShorthand()
{
    static const CSSPropertyID gridGapProperties[] = {
        CSSPropertyGridRowGap,
        CSSPropertyGridColumnGap,
    };
    return StylePropertyShorthand(CSSPropertyGridGap, gridGapProperties);
}

StylePropertyShorthand gridRowShorthand()
{
    static const CSSPropertyID gridRowProperties[] = {
        CSSPropertyGridRowStart,
        CSSPropertyGridRowEnd,
    };
    return StylePropertyShorthand(CSSPropertyGridRow, gridRowProperties);
}

StylePropertyShorthand webkitMarginCollapseShorthand()
{
    static const CSSPropertyID webkitMarginCollapseProperties[] = {
        CSSPropertyWebkitMarginBeforeCollapse,
        CSSPropertyWebkitMarginAfterCollapse,
    };
    return StylePropertyShorthand(CSSPropertyWebkitMarginCollapse, webkitMarginCollapseProperties);
}

StylePropertyShorthand webkitMarqueeShorthand()
{
    static const CSSPropertyID webkitMarqueeProperties[] = {
        CSSPropertyWebkitMarqueeDirection,
        CSSPropertyWebkitMarqueeIncrement,
        CSSPropertyWebkitMarqueeRepetition,
        CSSPropertyWebkitMarqueeStyle,
        CSSPropertyWebkitMarqueeSpeed,
    };
    return StylePropertyShorthand(CSSPropertyWebkitMarquee, webkitMarqueeProperties);
}

StylePropertyShorthand webkitMaskShorthand()
{
    static const CSSPropertyID webkitMaskProperties[] = {
        CSSPropertyWebkitMaskImage,
        CSSPropertyWebkitMaskSourceType,
        CSSPropertyWebkitMaskPositionX,
        CSSPropertyWebkitMaskPositionY,
        CSSPropertyWebkitMaskSize,
        CSSPropertyWebkitMaskRepeatX,
        CSSPropertyWebkitMaskRepeatY,
        CSSPropertyWebkitMaskOrigin,
        CSSPropertyWebkitMaskClip,
    };
    return StylePropertyShorthand(CSSPropertyWebkitMask, webkitMaskProperties);
}

StylePropertyShorthand webkitMaskPositionShorthand()
{
    static const CSSPropertyID webkitMaskPositionProperties[] = {
        CSSPropertyWebkitMaskPositionX,
        CSSPropertyWebkitMaskPositionY,
    };
    return StylePropertyShorthand(CSSPropertyWebkitMaskPosition, webkitMaskPositionProperties);
}

StylePropertyShorthand webkitMaskRepeatShorthand()
{
    static const CSSPropertyID webkitMaskRepeatProperties[] = {
        CSSPropertyWebkitMaskRepeatX,
        CSSPropertyWebkitMaskRepeatY,
    };
    return StylePropertyShorthand(CSSPropertyWebkitMaskRepeat, webkitMaskRepeatProperties);
}

StylePropertyShorthand perspectiveOriginShorthand()
{
    static const CSSPropertyID perspectiveOriginProperties[] = {
        CSSPropertyPerspectiveOriginX,
        CSSPropertyPerspectiveOriginY,
    };
    return StylePropertyShorthand(CSSPropertyPerspectiveOrigin, perspectiveOriginProperties);
}

StylePropertyShorthand webkitTextDecorationShorthand()
{
    static const CSSPropertyID webkitTextDecorationProperties[] = {
        CSSPropertyWebkitTextDecorationLine,
        CSSPropertyWebkitTextDecorationStyle,
        CSSPropertyWebkitTextDecorationColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitTextDecoration, webkitTextDecorationProperties);
}

StylePropertyShorthand webkitTextEmphasisShorthand()
{
    static const CSSPropertyID webkitTextEmphasisProperties[] = {
        CSSPropertyWebkitTextEmphasisStyle,
        CSSPropertyWebkitTextEmphasisColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitTextEmphasis, webkitTextEmphasisProperties);
}

StylePropertyShorthand webkitTextStrokeShorthand()
{
    static const CSSPropertyID webkitTextStrokeProperties[] = {
        CSSPropertyWebkitTextStrokeWidth,
        CSSPropertyWebkitTextStrokeColor,
    };
    return StylePropertyShorthand(CSSPropertyWebkitTextStroke, webkitTextStrokeProperties);
}

StylePropertyShorthand transformOriginShorthand()
{
    static const CSSPropertyID transformOriginProperties[] = {
        CSSPropertyTransformOriginX,
        CSSPropertyTransformOriginY,
        CSSPropertyTransformOriginZ,
    };
    return StylePropertyShorthand(CSSPropertyTransformOrigin, transformOriginProperties);
}

StylePropertyShorthand shorthandForProperty(CSSPropertyID propertyID)
{
    static NeverDestroyed<StylePropertyShorthand> emptyShorthand;

    switch (propertyID) {
    case CSSPropertyAll:
        return allShorthand();
    case CSSPropertyAnimation:
        return animationShorthand();
    case CSSPropertyBackground:
        return backgroundShorthand();
    case CSSPropertyBackgroundPosition:
        return backgroundPositionShorthand();
    case CSSPropertyBackgroundRepeat:
        return backgroundRepeatShorthand();
    case CSSPropertyBorder:
        return borderShorthand();
    case CSSPropertyBorderBottom:
        return borderBottomShorthand();
    case CSSPropertyBorderColor:
        return borderColorShorthand();
    case CSSPropertyBorderImage:
        return borderImageShorthand();
    case CSSPropertyBorderLeft:
        return borderLeftShorthand();
    case CSSPropertyBorderRadius:
        return borderRadiusShorthand();
    case CSSPropertyBorderRight:
        return borderRightShorthand();
    case CSSPropertyBorderSpacing:
        return borderSpacingShorthand();
    case CSSPropertyBorderStyle:
        return borderStyleShorthand();
    case CSSPropertyBorderTop:
        return borderTopShorthand();
    case CSSPropertyBorderWidth:
        return borderWidthShorthand();
    case CSSPropertyFont:
        return fontShorthand();
    case CSSPropertyFontVariant:
        return fontVariantShorthand();
    case CSSPropertyListStyle:
        return listStyleShorthand();
    case CSSPropertyMargin:
        return marginShorthand();
    case CSSPropertyMarker:
        return markerShorthand();
    case CSSPropertyOutline:
        return outlineShorthand();
    case CSSPropertyOverflow:
        return overflowShorthand();
    case CSSPropertyPadding:
        return paddingShorthand();
    case CSSPropertyTransition:
        return transitionShorthand();
    case CSSPropertyWebkitBorderAfter:
        return webkitBorderAfterShorthand();
    case CSSPropertyWebkitBorderBefore:
        return webkitBorderBeforeShorthand();
    case CSSPropertyWebkitBorderEnd:
        return webkitBorderEndShorthand();
    case CSSPropertyWebkitBorderRadius:
        return webkitBorderRadiusShorthand();
    case CSSPropertyWebkitBorderStart:
        return webkitBorderStartShorthand();
    case CSSPropertyColumnRule:
        return columnRuleShorthand();
    case CSSPropertyColumns:
        return columnsShorthand();
    case CSSPropertyFlex:
        return flexShorthand();
    case CSSPropertyFlexFlow:
        return flexFlowShorthand();
    case CSSPropertyGrid:
        return gridShorthand();
    case CSSPropertyGridArea:
        return gridAreaShorthand();
    case CSSPropertyGridTemplate:
        return gridTemplateShorthand();
    case CSSPropertyGridColumn:
        return gridColumnShorthand();
    case CSSPropertyGridGap:
        return gridGapShorthand();
    case CSSPropertyGridRow:
        return gridRowShorthand();
    case CSSPropertyWebkitMarginCollapse:
        return webkitMarginCollapseShorthand();
    case CSSPropertyWebkitMarquee:
        return webkitMarqueeShorthand();
    case CSSPropertyWebkitMask:
        return webkitMaskShorthand();
    case CSSPropertyWebkitMaskPosition:
        return webkitMaskPositionShorthand();
    case CSSPropertyWebkitMaskRepeat:
        return webkitMaskRepeatShorthand();
    case CSSPropertyPerspectiveOrigin:
        return perspectiveOriginShorthand();
    case CSSPropertyWebkitTextDecoration:
        return webkitTextDecorationShorthand();
    case CSSPropertyWebkitTextEmphasis:
        return webkitTextEmphasisShorthand();
    case CSSPropertyWebkitTextStroke:
        return webkitTextStrokeShorthand();
    case CSSPropertyTransformOrigin:
        return transformOriginShorthand();
    default:
        return emptyShorthand;
    }
}
StylePropertyShorthandVector matchingShorthandsForLonghand(CSSPropertyID propertyID)
{
    switch (propertyID) {
    case CSSPropertyAnimationDelay:
    case CSSPropertyAnimationDirection:
    case CSSPropertyAnimationDuration:
    case CSSPropertyAnimationFillMode:
    case CSSPropertyAnimationIterationCount:
    case CSSPropertyAnimationName:
    case CSSPropertyAnimationPlayState:
    case CSSPropertyAnimationTimingFunction:
        return StylePropertyShorthandVector{allShorthand(), animationShorthand()};
    case CSSPropertyBackgroundPositionX:
    case CSSPropertyBackgroundPositionY:
        return StylePropertyShorthandVector{allShorthand(), backgroundShorthand(), backgroundPositionShorthand()};
    case CSSPropertyBackgroundRepeatX:
    case CSSPropertyBackgroundRepeatY:
        return StylePropertyShorthandVector{allShorthand(), backgroundShorthand(), backgroundRepeatShorthand()};
    case CSSPropertyBackgroundAttachment:
    case CSSPropertyBackgroundClip:
    case CSSPropertyBackgroundColor:
    case CSSPropertyBackgroundImage:
    case CSSPropertyBackgroundOrigin:
    case CSSPropertyBackgroundSize:
        return StylePropertyShorthandVector{allShorthand(), backgroundShorthand()};
    case CSSPropertyBorderImageOutset:
    case CSSPropertyBorderImageRepeat:
    case CSSPropertyBorderImageSlice:
    case CSSPropertyBorderImageSource:
    case CSSPropertyBorderImageWidth:
        return StylePropertyShorthandVector{allShorthand(), borderImageShorthand()};
    case CSSPropertyBorderBottomColor:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderBottomShorthand(), borderColorShorthand()};
    case CSSPropertyBorderBottomStyle:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderBottomShorthand(), borderStyleShorthand()};
    case CSSPropertyBorderBottomWidth:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderBottomShorthand(), borderWidthShorthand()};
    case CSSPropertyBorderLeftColor:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderColorShorthand(), borderLeftShorthand()};
    case CSSPropertyBorderRightColor:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderColorShorthand(), borderRightShorthand()};
    case CSSPropertyBorderTopColor:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderColorShorthand(), borderTopShorthand()};
    case CSSPropertyBorderLeftStyle:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderLeftShorthand(), borderStyleShorthand()};
    case CSSPropertyBorderLeftWidth:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderLeftShorthand(), borderWidthShorthand()};
    case CSSPropertyBorderRightStyle:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderRightShorthand(), borderStyleShorthand()};
    case CSSPropertyBorderRightWidth:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderRightShorthand(), borderWidthShorthand()};
    case CSSPropertyBorderTopStyle:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderStyleShorthand(), borderTopShorthand()};
    case CSSPropertyBorderTopWidth:
        return StylePropertyShorthandVector{allShorthand(), borderShorthand(), borderTopShorthand(), borderWidthShorthand()};
    case CSSPropertyWebkitBorderHorizontalSpacing:
    case CSSPropertyWebkitBorderVerticalSpacing:
        return StylePropertyShorthandVector{allShorthand(), borderSpacingShorthand()};
    case CSSPropertyColumnRuleColor:
    case CSSPropertyColumnRuleStyle:
    case CSSPropertyColumnRuleWidth:
        return StylePropertyShorthandVector{allShorthand(), columnRuleShorthand()};
    case CSSPropertyColumnCount:
    case CSSPropertyColumnWidth:
        return StylePropertyShorthandVector{allShorthand(), columnsShorthand()};
    case CSSPropertyFlexDirection:
    case CSSPropertyFlexWrap:
        return StylePropertyShorthandVector{allShorthand(), flexFlowShorthand()};
    case CSSPropertyFlexBasis:
    case CSSPropertyFlexGrow:
    case CSSPropertyFlexShrink:
        return StylePropertyShorthandVector{allShorthand(), flexShorthand()};
    case CSSPropertyFontVariantCaps:
        return StylePropertyShorthandVector{allShorthand(), fontShorthand(), fontVariantShorthand()};
    case CSSPropertyFontFamily:
    case CSSPropertyFontSize:
    case CSSPropertyFontStyle:
    case CSSPropertyFontWeight:
    case CSSPropertyLineHeight:
        return StylePropertyShorthandVector{allShorthand(), fontShorthand()};
    case CSSPropertyFontVariantAlternates:
    case CSSPropertyFontVariantEastAsian:
    case CSSPropertyFontVariantLigatures:
    case CSSPropertyFontVariantNumeric:
    case CSSPropertyFontVariantPosition:
        return StylePropertyShorthandVector{allShorthand(), fontVariantShorthand()};
    case CSSPropertyGridColumnEnd:
    case CSSPropertyGridColumnStart:
        return StylePropertyShorthandVector{allShorthand(), gridAreaShorthand(), gridColumnShorthand()};
    case CSSPropertyGridRowEnd:
    case CSSPropertyGridRowStart:
        return StylePropertyShorthandVector{allShorthand(), gridAreaShorthand(), gridRowShorthand()};
    case CSSPropertyGridColumnGap:
    case CSSPropertyGridRowGap:
        return StylePropertyShorthandVector{allShorthand(), gridShorthand(), gridGapShorthand()};
    case CSSPropertyGridTemplateAreas:
    case CSSPropertyGridTemplateColumns:
    case CSSPropertyGridTemplateRows:
        return StylePropertyShorthandVector{allShorthand(), gridShorthand(), gridTemplateShorthand()};
    case CSSPropertyGridAutoColumns:
    case CSSPropertyGridAutoFlow:
    case CSSPropertyGridAutoRows:
        return StylePropertyShorthandVector{allShorthand(), gridShorthand()};
    case CSSPropertyListStyleImage:
    case CSSPropertyListStylePosition:
    case CSSPropertyListStyleType:
        return StylePropertyShorthandVector{allShorthand(), listStyleShorthand()};
    case CSSPropertyMarginBottom:
    case CSSPropertyMarginLeft:
    case CSSPropertyMarginRight:
    case CSSPropertyMarginTop:
        return StylePropertyShorthandVector{allShorthand(), marginShorthand()};
    case CSSPropertyMarkerEnd:
    case CSSPropertyMarkerMid:
    case CSSPropertyMarkerStart:
        return StylePropertyShorthandVector{allShorthand(), markerShorthand()};
    case CSSPropertyOutlineColor:
    case CSSPropertyOutlineStyle:
    case CSSPropertyOutlineWidth:
        return StylePropertyShorthandVector{allShorthand(), outlineShorthand()};
    case CSSPropertyOverflowX:
    case CSSPropertyOverflowY:
        return StylePropertyShorthandVector{allShorthand(), overflowShorthand()};
    case CSSPropertyPaddingBottom:
    case CSSPropertyPaddingLeft:
    case CSSPropertyPaddingRight:
    case CSSPropertyPaddingTop:
        return StylePropertyShorthandVector{allShorthand(), paddingShorthand()};
    case CSSPropertyPerspectiveOriginX:
    case CSSPropertyPerspectiveOriginY:
        return StylePropertyShorthandVector{allShorthand(), perspectiveOriginShorthand()};
    case CSSPropertyTransformOriginX:
    case CSSPropertyTransformOriginY:
    case CSSPropertyTransformOriginZ:
        return StylePropertyShorthandVector{allShorthand(), transformOriginShorthand()};
    case CSSPropertyTransitionDelay:
    case CSSPropertyTransitionDuration:
    case CSSPropertyTransitionProperty:
    case CSSPropertyTransitionTimingFunction:
        return StylePropertyShorthandVector{allShorthand(), transitionShorthand()};
    case CSSPropertyWebkitAppearance:
    case CSSPropertyWebkitAspectRatio:
    case CSSPropertyWebkitBackdropFilter:
    case CSSPropertyWebkitBackfaceVisibility:
    case CSSPropertyWebkitBackgroundClip:
    case CSSPropertyWebkitBackgroundComposite:
    case CSSPropertyWebkitBackgroundOrigin:
    case CSSPropertyWebkitBackgroundSize:
    case CSSPropertyWebkitBorderFit:
    case CSSPropertyWebkitBorderImage:
    case CSSPropertyWebkitBoxAlign:
    case CSSPropertyWebkitBoxDecorationBreak:
    case CSSPropertyWebkitBoxDirection:
    case CSSPropertyWebkitBoxFlex:
    case CSSPropertyWebkitBoxFlexGroup:
    case CSSPropertyWebkitBoxLines:
    case CSSPropertyWebkitBoxOrdinalGroup:
    case CSSPropertyWebkitBoxOrient:
    case CSSPropertyWebkitBoxPack:
    case CSSPropertyWebkitBoxReflect:
    case CSSPropertyWebkitBoxShadow:
    case CSSPropertyWebkitClipPath:
    case CSSPropertyWebkitColumnAxis:
    case CSSPropertyWebkitColumnBreakAfter:
    case CSSPropertyWebkitColumnBreakBefore:
    case CSSPropertyWebkitColumnBreakInside:
    case CSSPropertyWebkitCursorVisibility:
    case CSSPropertyWebkitDashboardRegion:
    case CSSPropertyWebkitFlowFrom:
    case CSSPropertyWebkitFlowInto:
    case CSSPropertyWebkitFontKerning:
    case CSSPropertyWebkitFontSizeDelta:
    case CSSPropertyWebkitFontSmoothing:
    case CSSPropertyWebkitHyphenateCharacter:
    case CSSPropertyWebkitHyphenateLimitAfter:
    case CSSPropertyWebkitHyphenateLimitBefore:
    case CSSPropertyWebkitHyphenateLimitLines:
    case CSSPropertyWebkitHyphens:
    case CSSPropertyWebkitInitialLetter:
    case CSSPropertyWebkitLineAlign:
    case CSSPropertyWebkitLineBoxContain:
    case CSSPropertyWebkitLineBreak:
    case CSSPropertyWebkitLineClamp:
    case CSSPropertyWebkitLineGrid:
    case CSSPropertyWebkitLineSnap:
    case CSSPropertyWebkitLocale:
    case CSSPropertyWebkitLogicalHeight:
    case CSSPropertyWebkitLogicalWidth:
    case CSSPropertyWebkitMarginAfter:
    case CSSPropertyWebkitMarginBefore:
    case CSSPropertyWebkitMarginBottomCollapse:
    case CSSPropertyWebkitMarginEnd:
    case CSSPropertyWebkitMarginStart:
    case CSSPropertyWebkitMarginTopCollapse:
    case CSSPropertyWebkitMaskBoxImage:
    case CSSPropertyWebkitMaskBoxImageOutset:
    case CSSPropertyWebkitMaskBoxImageRepeat:
    case CSSPropertyWebkitMaskBoxImageSlice:
    case CSSPropertyWebkitMaskBoxImageSource:
    case CSSPropertyWebkitMaskBoxImageWidth:
    case CSSPropertyWebkitMaskComposite:
    case CSSPropertyWebkitMaxLogicalHeight:
    case CSSPropertyWebkitMaxLogicalWidth:
    case CSSPropertyWebkitMinLogicalHeight:
    case CSSPropertyWebkitMinLogicalWidth:
    case CSSPropertyWebkitNbspMode:
    case CSSPropertyWebkitPaddingAfter:
    case CSSPropertyWebkitPaddingBefore:
    case CSSPropertyWebkitPaddingEnd:
    case CSSPropertyWebkitPaddingStart:
    case CSSPropertyWebkitPrintColorAdjust:
    case CSSPropertyWebkitRegionBreakAfter:
    case CSSPropertyWebkitRegionBreakBefore:
    case CSSPropertyWebkitRegionBreakInside:
    case CSSPropertyWebkitRegionFragment:
    case CSSPropertyWebkitRtlOrdering:
    case CSSPropertyWebkitRubyPosition:
    case CSSPropertyWebkitShapeImageThreshold:
    case CSSPropertyWebkitShapeMargin:
    case CSSPropertyWebkitShapeOutside:
    case CSSPropertyWebkitSvgShadow:
    case CSSPropertyWebkitTextCombine:
    case CSSPropertyWebkitTextDecorationSkip:
    case CSSPropertyWebkitTextDecorationsInEffect:
    case CSSPropertyWebkitTextEmphasisPosition:
    case CSSPropertyWebkitTextFillColor:
    case CSSPropertyWebkitTextOrientation:
    case CSSPropertyWebkitTextSecurity:
    case CSSPropertyWebkitTextUnderlinePosition:
    case CSSPropertyWebkitTextZoom:
    case CSSPropertyWebkitTransformStyle:
    case CSSPropertyWebkitUserDrag:
    case CSSPropertyWebkitUserModify:
    case CSSPropertyWebkitUserSelect:
    case CSSPropertyWebkitWritingMode:
    case CSSPropertyAlignContent:
    case CSSPropertyAlignItems:
    case CSSPropertyAlignSelf:
    case CSSPropertyAlignmentBaseline:
    case CSSPropertyAlt:
    case CSSPropertyBackgroundBlendMode:
    case CSSPropertyBaselineShift:
    case CSSPropertyBorderCollapse:
    case CSSPropertyBottom:
    case CSSPropertyBoxShadow:
    case CSSPropertyBoxSizing:
    case CSSPropertyBreakAfter:
    case CSSPropertyBreakBefore:
    case CSSPropertyBreakInside:
    case CSSPropertyBufferedRendering:
    case CSSPropertyCaptionSide:
    case CSSPropertyClear:
    case CSSPropertyClip:
    case CSSPropertyClipPath:
    case CSSPropertyClipRule:
    case CSSPropertyColor:
    case CSSPropertyColorInterpolation:
    case CSSPropertyColorInterpolationFilters:
    case CSSPropertyColorProfile:
    case CSSPropertyColorRendering:
    case CSSPropertyColumnFill:
    case CSSPropertyColumnGap:
    case CSSPropertyColumnProgression:
    case CSSPropertyColumnSpan:
    case CSSPropertyContent:
    case CSSPropertyCounterIncrement:
    case CSSPropertyCounterReset:
    case CSSPropertyCursor:
    case CSSPropertyCx:
    case CSSPropertyCy:
    case CSSPropertyDisplay:
    case CSSPropertyDominantBaseline:
    case CSSPropertyEmptyCells:
    case CSSPropertyEnableBackground:
    case CSSPropertyFill:
    case CSSPropertyFillOpacity:
    case CSSPropertyFillRule:
    case CSSPropertyFilter:
    case CSSPropertyFloat:
    case CSSPropertyFloodColor:
    case CSSPropertyFloodOpacity:
    case CSSPropertyFontFeatureSettings:
    case CSSPropertyFontStretch:
    case CSSPropertyFontSynthesis:
    case CSSPropertyGlyphOrientationHorizontal:
    case CSSPropertyGlyphOrientationVertical:
    case CSSPropertyHangingPunctuation:
    case CSSPropertyHeight:
    case CSSPropertyImageRendering:
    case CSSPropertyJustifyContent:
    case CSSPropertyJustifyItems:
    case CSSPropertyJustifySelf:
    case CSSPropertyKerning:
    case CSSPropertyLeft:
    case CSSPropertyLetterSpacing:
    case CSSPropertyLightingColor:
    case CSSPropertyMask:
    case CSSPropertyMaskType:
    case CSSPropertyMaxHeight:
    case CSSPropertyMaxWidth:
    case CSSPropertyMinHeight:
    case CSSPropertyMinWidth:
    case CSSPropertyObjectFit:
    case CSSPropertyObjectPosition:
    case CSSPropertyOpacity:
    case CSSPropertyOrder:
    case CSSPropertyOrphans:
    case CSSPropertyOutlineOffset:
    case CSSPropertyOverflowWrap:
    case CSSPropertyPage:
    case CSSPropertyPageBreakAfter:
    case CSSPropertyPageBreakBefore:
    case CSSPropertyPageBreakInside:
    case CSSPropertyPaintOrder:
    case CSSPropertyPerspective:
    case CSSPropertyPointerEvents:
    case CSSPropertyPosition:
    case CSSPropertyQuotes:
    case CSSPropertyR:
    case CSSPropertyResize:
    case CSSPropertyRight:
    case CSSPropertyRx:
    case CSSPropertyRy:
    case CSSPropertyShapeRendering:
    case CSSPropertySize:
    case CSSPropertySpeak:
    case CSSPropertySrc:
    case CSSPropertyStopColor:
    case CSSPropertyStopOpacity:
    case CSSPropertyStroke:
    case CSSPropertyStrokeDasharray:
    case CSSPropertyStrokeDashoffset:
    case CSSPropertyStrokeLinecap:
    case CSSPropertyStrokeLinejoin:
    case CSSPropertyStrokeMiterlimit:
    case CSSPropertyStrokeOpacity:
    case CSSPropertyStrokeWidth:
    case CSSPropertyTabSize:
    case CSSPropertyTableLayout:
    case CSSPropertyTextAlign:
    case CSSPropertyTextAnchor:
    case CSSPropertyTextDecoration:
    case CSSPropertyTextIndent:
    case CSSPropertyTextLineThrough:
    case CSSPropertyTextLineThroughColor:
    case CSSPropertyTextLineThroughMode:
    case CSSPropertyTextLineThroughStyle:
    case CSSPropertyTextLineThroughWidth:
    case CSSPropertyTextOverflow:
    case CSSPropertyTextOverline:
    case CSSPropertyTextOverlineColor:
    case CSSPropertyTextOverlineMode:
    case CSSPropertyTextOverlineStyle:
    case CSSPropertyTextOverlineWidth:
    case CSSPropertyTextRendering:
    case CSSPropertyTextShadow:
    case CSSPropertyTextTransform:
    case CSSPropertyTextUnderline:
    case CSSPropertyTextUnderlineColor:
    case CSSPropertyTextUnderlineMode:
    case CSSPropertyTextUnderlineStyle:
    case CSSPropertyTextUnderlineWidth:
    case CSSPropertyTop:
    case CSSPropertyTransform:
    case CSSPropertyTransformStyle:
    case CSSPropertyUnicodeRange:
    case CSSPropertyVectorEffect:
    case CSSPropertyVerticalAlign:
    case CSSPropertyVisibility:
    case CSSPropertyWhiteSpace:
    case CSSPropertyWidows:
    case CSSPropertyWidth:
    case CSSPropertyWillChange:
    case CSSPropertyWordBreak:
    case CSSPropertyWordSpacing:
    case CSSPropertyWordWrap:
    case CSSPropertyWritingMode:
    case CSSPropertyX:
    case CSSPropertyY:
    case CSSPropertyZIndex:
    case CSSPropertyZoom:
        return StylePropertyShorthandVector{allShorthand()};
    case CSSPropertyWebkitBorderAfterColor:
    case CSSPropertyWebkitBorderAfterStyle:
    case CSSPropertyWebkitBorderAfterWidth:
        return StylePropertyShorthandVector{webkitBorderAfterShorthand(), allShorthand()};
    case CSSPropertyWebkitBorderBeforeColor:
    case CSSPropertyWebkitBorderBeforeStyle:
    case CSSPropertyWebkitBorderBeforeWidth:
        return StylePropertyShorthandVector{webkitBorderBeforeShorthand(), allShorthand()};
    case CSSPropertyWebkitBorderEndColor:
    case CSSPropertyWebkitBorderEndStyle:
    case CSSPropertyWebkitBorderEndWidth:
        return StylePropertyShorthandVector{webkitBorderEndShorthand(), allShorthand()};
    case CSSPropertyBorderBottomLeftRadius:
    case CSSPropertyBorderBottomRightRadius:
    case CSSPropertyBorderTopLeftRadius:
    case CSSPropertyBorderTopRightRadius:
        return StylePropertyShorthandVector{webkitBorderRadiusShorthand(), allShorthand(), borderRadiusShorthand()};
    case CSSPropertyWebkitBorderStartColor:
    case CSSPropertyWebkitBorderStartStyle:
    case CSSPropertyWebkitBorderStartWidth:
        return StylePropertyShorthandVector{webkitBorderStartShorthand(), allShorthand()};
    case CSSPropertyWebkitMarginAfterCollapse:
    case CSSPropertyWebkitMarginBeforeCollapse:
        return StylePropertyShorthandVector{webkitMarginCollapseShorthand(), allShorthand()};
    case CSSPropertyWebkitMarqueeDirection:
    case CSSPropertyWebkitMarqueeIncrement:
    case CSSPropertyWebkitMarqueeRepetition:
    case CSSPropertyWebkitMarqueeSpeed:
    case CSSPropertyWebkitMarqueeStyle:
        return StylePropertyShorthandVector{webkitMarqueeShorthand(), allShorthand()};
    case CSSPropertyWebkitMaskClip:
    case CSSPropertyWebkitMaskImage:
    case CSSPropertyWebkitMaskOrigin:
    case CSSPropertyWebkitMaskSize:
    case CSSPropertyWebkitMaskSourceType:
        return StylePropertyShorthandVector{webkitMaskShorthand(), allShorthand()};
    case CSSPropertyWebkitMaskPositionX:
    case CSSPropertyWebkitMaskPositionY:
        return StylePropertyShorthandVector{webkitMaskShorthand(), webkitMaskPositionShorthand(), allShorthand()};
    case CSSPropertyWebkitMaskRepeatX:
    case CSSPropertyWebkitMaskRepeatY:
        return StylePropertyShorthandVector{webkitMaskShorthand(), webkitMaskRepeatShorthand(), allShorthand()};
    case CSSPropertyWebkitTextDecorationColor:
    case CSSPropertyWebkitTextDecorationLine:
    case CSSPropertyWebkitTextDecorationStyle:
        return StylePropertyShorthandVector{webkitTextDecorationShorthand(), allShorthand()};
    case CSSPropertyWebkitTextEmphasisColor:
    case CSSPropertyWebkitTextEmphasisStyle:
        return StylePropertyShorthandVector{webkitTextEmphasisShorthand(), allShorthand()};
    case CSSPropertyWebkitTextStrokeColor:
    case CSSPropertyWebkitTextStrokeWidth:
        return StylePropertyShorthandVector{webkitTextStrokeShorthand(), allShorthand()};
    default:
        return { };
    }
}
} // namespace WebCore
