diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/css/StylePropertyShorthand.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/css/StylePropertyShorthand.cpp')
-rw-r--r-- | Source/WebCore/css/StylePropertyShorthand.cpp | 794 |
1 files changed, 22 insertions, 772 deletions
diff --git a/Source/WebCore/css/StylePropertyShorthand.cpp b/Source/WebCore/css/StylePropertyShorthand.cpp index d9f5b82d2..e9d7a4c86 100644 --- a/Source/WebCore/css/StylePropertyShorthand.cpp +++ b/Source/WebCore/css/StylePropertyShorthand.cpp @@ -21,801 +21,51 @@ #include "config.h" #include "StylePropertyShorthand.h" - -#include <wtf/StdLibExtras.h> - -// FIXME: How much of this file can we generate? +#include "StylePropertyShorthandFunctions.h" namespace WebCore { -StylePropertyShorthand backgroundShorthand() -{ - static const CSSPropertyID backgroundProperties[] = { - CSSPropertyBackgroundImage, - CSSPropertyBackgroundPositionX, - CSSPropertyBackgroundPositionY, - CSSPropertyBackgroundSize, - CSSPropertyBackgroundRepeatX, - CSSPropertyBackgroundRepeatY, - CSSPropertyBackgroundAttachment, - CSSPropertyBackgroundOrigin, - CSSPropertyBackgroundClip, - CSSPropertyBackgroundColor - }; - return StylePropertyShorthand(CSSPropertyBackground, backgroundProperties, WTF_ARRAY_LENGTH(backgroundProperties)); -} - -StylePropertyShorthand backgroundPositionShorthand() -{ - static const CSSPropertyID backgroundPositionProperties[] = { CSSPropertyBackgroundPositionX, CSSPropertyBackgroundPositionY }; - return StylePropertyShorthand(CSSPropertyBackgroundPosition, backgroundPositionProperties, WTF_ARRAY_LENGTH(backgroundPositionProperties)); -} - -StylePropertyShorthand backgroundRepeatShorthand() -{ - static const CSSPropertyID backgroundRepeatProperties[] = { CSSPropertyBackgroundRepeatX, CSSPropertyBackgroundRepeatY }; - return StylePropertyShorthand(CSSPropertyBackgroundRepeat, backgroundRepeatProperties, WTF_ARRAY_LENGTH(backgroundRepeatProperties)); -} - -StylePropertyShorthand borderShorthand() -{ - // Do not change the order of the following four shorthands, and keep them together. - static const CSSPropertyID borderProperties[4][3] = { - { CSSPropertyBorderTopColor, CSSPropertyBorderTopStyle, CSSPropertyBorderTopWidth }, - { CSSPropertyBorderRightColor, CSSPropertyBorderRightStyle, CSSPropertyBorderRightWidth }, - { CSSPropertyBorderBottomColor, CSSPropertyBorderBottomStyle, CSSPropertyBorderBottomWidth }, - { CSSPropertyBorderLeftColor, CSSPropertyBorderLeftStyle, CSSPropertyBorderLeftWidth } - }; - return StylePropertyShorthand(CSSPropertyBorder, borderProperties[0], sizeof(borderProperties) / sizeof(borderProperties[0][0])); -} - StylePropertyShorthand borderAbridgedShorthand() { static const CSSPropertyID borderAbridgedProperties[] = { CSSPropertyBorderWidth, CSSPropertyBorderStyle, CSSPropertyBorderColor }; static const StylePropertyShorthand propertiesForInitialization[] = { borderWidthShorthand(), borderStyleShorthand(), borderColorShorthand() }; - return StylePropertyShorthand(CSSPropertyBorder, borderAbridgedProperties, propertiesForInitialization, WTF_ARRAY_LENGTH(borderAbridgedProperties)); -} - -StylePropertyShorthand borderBottomShorthand() -{ - static const CSSPropertyID borderBottomProperties[] = { CSSPropertyBorderBottomWidth, CSSPropertyBorderBottomStyle, CSSPropertyBorderBottomColor }; - return StylePropertyShorthand(CSSPropertyBorderBottom, borderBottomProperties, WTF_ARRAY_LENGTH(borderBottomProperties)); -} - -StylePropertyShorthand borderColorShorthand() -{ - static const CSSPropertyID borderColorProperties[] = { - CSSPropertyBorderTopColor, - CSSPropertyBorderRightColor, - CSSPropertyBorderBottomColor, - CSSPropertyBorderLeftColor - }; - return StylePropertyShorthand(CSSPropertyBorderColor, borderColorProperties, WTF_ARRAY_LENGTH(borderColorProperties)); -} - -StylePropertyShorthand borderImageShorthand() -{ - static const CSSPropertyID borderImageProperties[] = { - CSSPropertyBorderImageSource, - CSSPropertyBorderImageSlice, - CSSPropertyBorderImageWidth, - CSSPropertyBorderImageOutset, - CSSPropertyBorderImageRepeat - }; - return StylePropertyShorthand(CSSPropertyBorderImage, borderImageProperties, WTF_ARRAY_LENGTH(borderImageProperties)); -} - -StylePropertyShorthand borderLeftShorthand() -{ - static const CSSPropertyID borderLeftProperties[] = { CSSPropertyBorderLeftWidth, CSSPropertyBorderLeftStyle, CSSPropertyBorderLeftColor }; - return StylePropertyShorthand(CSSPropertyBorderLeft, borderLeftProperties, WTF_ARRAY_LENGTH(borderLeftProperties)); -} - -StylePropertyShorthand borderRadiusShorthand() -{ - static const CSSPropertyID borderRadiusProperties[] = { - CSSPropertyBorderTopLeftRadius, - CSSPropertyBorderTopRightRadius, - CSSPropertyBorderBottomRightRadius, - CSSPropertyBorderBottomLeftRadius - }; - return StylePropertyShorthand(CSSPropertyBorderRadius, borderRadiusProperties, WTF_ARRAY_LENGTH(borderRadiusProperties)); -} - -StylePropertyShorthand webkitBorderRadiusShorthand() -{ - static const CSSPropertyID borderRadiusProperties[] = { - CSSPropertyBorderTopLeftRadius, - CSSPropertyBorderTopRightRadius, - CSSPropertyBorderBottomRightRadius, - CSSPropertyBorderBottomLeftRadius - }; - return StylePropertyShorthand(CSSPropertyWebkitBorderRadius, borderRadiusProperties, WTF_ARRAY_LENGTH(borderRadiusProperties)); -} - -StylePropertyShorthand borderRightShorthand() -{ - static const CSSPropertyID borderRightProperties[] = { CSSPropertyBorderRightWidth, CSSPropertyBorderRightStyle, CSSPropertyBorderRightColor }; - return StylePropertyShorthand(CSSPropertyBorderRight, borderRightProperties, WTF_ARRAY_LENGTH(borderRightProperties)); -} - -StylePropertyShorthand borderSpacingShorthand() -{ - static const CSSPropertyID borderSpacingProperties[] = { CSSPropertyWebkitBorderHorizontalSpacing, CSSPropertyWebkitBorderVerticalSpacing }; - return StylePropertyShorthand(CSSPropertyBorderSpacing, borderSpacingProperties, WTF_ARRAY_LENGTH(borderSpacingProperties)); -} - -StylePropertyShorthand borderStyleShorthand() -{ - static const CSSPropertyID borderStyleProperties[] = { - CSSPropertyBorderTopStyle, - CSSPropertyBorderRightStyle, - CSSPropertyBorderBottomStyle, - CSSPropertyBorderLeftStyle - }; - return StylePropertyShorthand(CSSPropertyBorderStyle, borderStyleProperties, WTF_ARRAY_LENGTH(borderStyleProperties)); + return StylePropertyShorthand(CSSPropertyBorder, borderAbridgedProperties, propertiesForInitialization); } -StylePropertyShorthand borderTopShorthand() +StylePropertyShorthand animationShorthandForParsing() { - static const CSSPropertyID borderTopProperties[] = { CSSPropertyBorderTopWidth, CSSPropertyBorderTopStyle, CSSPropertyBorderTopColor }; - return StylePropertyShorthand(CSSPropertyBorderTop, borderTopProperties, WTF_ARRAY_LENGTH(borderTopProperties)); -} - -StylePropertyShorthand borderWidthShorthand() -{ - static const CSSPropertyID borderWidthProperties[] = { - CSSPropertyBorderTopWidth, - CSSPropertyBorderRightWidth, - CSSPropertyBorderBottomWidth, - CSSPropertyBorderLeftWidth - }; - return StylePropertyShorthand(CSSPropertyBorderWidth, borderWidthProperties, WTF_ARRAY_LENGTH(borderWidthProperties)); -} - -StylePropertyShorthand listStyleShorthand() -{ - static const CSSPropertyID listStyleProperties[] = { - CSSPropertyListStyleType, - CSSPropertyListStylePosition, - CSSPropertyListStyleImage - }; - return StylePropertyShorthand(CSSPropertyListStyle, listStyleProperties, WTF_ARRAY_LENGTH(listStyleProperties)); -} - -StylePropertyShorthand fontShorthand() -{ - static const CSSPropertyID fontProperties[] = { - CSSPropertyFontFamily, - CSSPropertyFontSize, - CSSPropertyFontStyle, - CSSPropertyFontVariant, - CSSPropertyFontWeight, - CSSPropertyLineHeight - }; - return StylePropertyShorthand(CSSPropertyFont, fontProperties, WTF_ARRAY_LENGTH(fontProperties)); -} - -StylePropertyShorthand marginShorthand() -{ - static const CSSPropertyID marginProperties[] = { - CSSPropertyMarginTop, - CSSPropertyMarginRight, - CSSPropertyMarginBottom, - CSSPropertyMarginLeft - }; - return StylePropertyShorthand(CSSPropertyMargin, marginProperties, WTF_ARRAY_LENGTH(marginProperties)); -} - -#if ENABLE(SVG) -StylePropertyShorthand markerShorthand() -{ - static const CSSPropertyID markerProperties[] = { - CSSPropertyMarkerStart, - CSSPropertyMarkerMid, - CSSPropertyMarkerEnd - }; - return StylePropertyShorthand(CSSPropertyMarker, markerProperties, WTF_ARRAY_LENGTH(markerProperties)); -} -#endif - -StylePropertyShorthand outlineShorthand() -{ - static const CSSPropertyID outlineProperties[] = { - CSSPropertyOutlineColor, - CSSPropertyOutlineStyle, - CSSPropertyOutlineWidth - }; - return StylePropertyShorthand(CSSPropertyOutline, outlineProperties, WTF_ARRAY_LENGTH(outlineProperties)); -} - -StylePropertyShorthand overflowShorthand() -{ - static const CSSPropertyID overflowProperties[] = { CSSPropertyOverflowX, CSSPropertyOverflowY }; - return StylePropertyShorthand(CSSPropertyOverflow, overflowProperties, WTF_ARRAY_LENGTH(overflowProperties)); -} - -StylePropertyShorthand paddingShorthand() -{ - static const CSSPropertyID paddingProperties[] = { - CSSPropertyPaddingTop, - CSSPropertyPaddingRight, - CSSPropertyPaddingBottom, - CSSPropertyPaddingLeft - }; - return StylePropertyShorthand(CSSPropertyPadding, paddingProperties, WTF_ARRAY_LENGTH(paddingProperties)); -} - -StylePropertyShorthand transitionShorthand() -{ - static const CSSPropertyID transitionProperties[] = { - CSSPropertyTransitionProperty, - CSSPropertyTransitionDuration, - CSSPropertyTransitionTimingFunction, - CSSPropertyTransitionDelay - }; - return StylePropertyShorthand(CSSPropertyTransition, transitionProperties, WTF_ARRAY_LENGTH(transitionProperties)); -} - -StylePropertyShorthand webkitAnimationShorthand() -{ - static const CSSPropertyID animationProperties[] = { - CSSPropertyWebkitAnimationName, - CSSPropertyWebkitAnimationDuration, - CSSPropertyWebkitAnimationTimingFunction, - CSSPropertyWebkitAnimationDelay, - CSSPropertyWebkitAnimationIterationCount, - CSSPropertyWebkitAnimationDirection, - CSSPropertyWebkitAnimationFillMode - }; - return StylePropertyShorthand(CSSPropertyWebkitAnimation, animationProperties, WTF_ARRAY_LENGTH(animationProperties)); -} - -StylePropertyShorthand webkitAnimationShorthandForParsing() -{ - // When we parse the animation shorthand we need to look for animation-name - // last because otherwise it might match against the keywords for fill mode, - // timing functions and infinite iteration. This means that animation names - // that are the same as keywords (e.g. 'forwards') won't always match in the - // shorthand. In that case the authors should be using longhands (or - // reconsidering their approach). This is covered by the animations spec - // bug: https://www.w3.org/Bugs/Public/show_bug.cgi?id=14790 - // And in the spec (editor's draft) at: - // http://dev.w3.org/csswg/css3-animations/#animation-shorthand-property + // Animation-name must come last, so that keywords for other properties in the shorthand + // preferentially match those properties. static const CSSPropertyID animationPropertiesForParsing[] = { - CSSPropertyWebkitAnimationDuration, - CSSPropertyWebkitAnimationTimingFunction, - CSSPropertyWebkitAnimationDelay, - CSSPropertyWebkitAnimationIterationCount, - CSSPropertyWebkitAnimationDirection, - CSSPropertyWebkitAnimationFillMode, - CSSPropertyWebkitAnimationName - }; - - return StylePropertyShorthand(CSSPropertyWebkitAnimation, animationPropertiesForParsing, WTF_ARRAY_LENGTH(animationPropertiesForParsing)); -} - -StylePropertyShorthand webkitBorderAfterShorthand() -{ - static const CSSPropertyID borderAfterProperties[] = { CSSPropertyWebkitBorderAfterWidth, CSSPropertyWebkitBorderAfterStyle, CSSPropertyWebkitBorderAfterColor }; - return StylePropertyShorthand(CSSPropertyWebkitBorderAfter, borderAfterProperties, WTF_ARRAY_LENGTH(borderAfterProperties)); -} - -StylePropertyShorthand webkitBorderBeforeShorthand() -{ - static const CSSPropertyID borderBeforeProperties[] = { CSSPropertyWebkitBorderBeforeWidth, CSSPropertyWebkitBorderBeforeStyle, CSSPropertyWebkitBorderBeforeColor }; - return StylePropertyShorthand(CSSPropertyWebkitBorderBefore, borderBeforeProperties, WTF_ARRAY_LENGTH(borderBeforeProperties)); -} - -StylePropertyShorthand webkitBorderEndShorthand() -{ - static const CSSPropertyID borderEndProperties[] = { CSSPropertyWebkitBorderEndWidth, CSSPropertyWebkitBorderEndStyle, CSSPropertyWebkitBorderEndColor }; - return StylePropertyShorthand(CSSPropertyWebkitBorderEnd, borderEndProperties, WTF_ARRAY_LENGTH(borderEndProperties)); -} - -StylePropertyShorthand webkitBorderStartShorthand() -{ - static const CSSPropertyID borderStartProperties[] = { CSSPropertyWebkitBorderStartWidth, CSSPropertyWebkitBorderStartStyle, CSSPropertyWebkitBorderStartColor }; - return StylePropertyShorthand(CSSPropertyWebkitBorderStart, borderStartProperties, WTF_ARRAY_LENGTH(borderStartProperties)); -} - -StylePropertyShorthand webkitColumnsShorthand() -{ - static const CSSPropertyID columnsProperties[] = { CSSPropertyWebkitColumnWidth, CSSPropertyWebkitColumnCount }; - return StylePropertyShorthand(CSSPropertyWebkitColumns, columnsProperties, WTF_ARRAY_LENGTH(columnsProperties)); -} - -StylePropertyShorthand webkitColumnRuleShorthand() -{ - static const CSSPropertyID columnRuleProperties[] = { - CSSPropertyWebkitColumnRuleWidth, - CSSPropertyWebkitColumnRuleStyle, - CSSPropertyWebkitColumnRuleColor, - }; - return StylePropertyShorthand(CSSPropertyWebkitColumnRule, columnRuleProperties, WTF_ARRAY_LENGTH(columnRuleProperties)); -} - -StylePropertyShorthand webkitFlexFlowShorthand() -{ - static const CSSPropertyID flexFlowProperties[] = { CSSPropertyWebkitFlexDirection, CSSPropertyWebkitFlexWrap }; - return StylePropertyShorthand(CSSPropertyWebkitFlexFlow, flexFlowProperties, WTF_ARRAY_LENGTH(flexFlowProperties)); -} - -StylePropertyShorthand webkitFlexShorthand() -{ - static const CSSPropertyID flexProperties[] = { CSSPropertyWebkitFlexGrow, CSSPropertyWebkitFlexShrink, CSSPropertyWebkitFlexBasis }; - return StylePropertyShorthand(CSSPropertyWebkitFlex, flexProperties, WTF_ARRAY_LENGTH(flexProperties)); -} - -StylePropertyShorthand webkitMarginCollapseShorthand() -{ - static const CSSPropertyID marginCollapseProperties[] = { CSSPropertyWebkitMarginBeforeCollapse, CSSPropertyWebkitMarginAfterCollapse }; - return StylePropertyShorthand(CSSPropertyWebkitMarginCollapse, marginCollapseProperties, WTF_ARRAY_LENGTH(marginCollapseProperties)); -} - -StylePropertyShorthand webkitGridAreaShorthand() -{ - static const CSSPropertyID webkitGridAreaProperties[] = { - CSSPropertyWebkitGridRowStart, - CSSPropertyWebkitGridColumnStart, - CSSPropertyWebkitGridRowEnd, - CSSPropertyWebkitGridColumnEnd - }; - return StylePropertyShorthand(CSSPropertyWebkitGridArea, webkitGridAreaProperties, WTF_ARRAY_LENGTH(webkitGridAreaProperties)); -} - -StylePropertyShorthand webkitGridColumnShorthand() -{ - static const CSSPropertyID webkitGridColumnProperties[] = { - CSSPropertyWebkitGridColumnStart, - CSSPropertyWebkitGridColumnEnd - }; - return StylePropertyShorthand(CSSPropertyWebkitGridColumn, webkitGridColumnProperties, WTF_ARRAY_LENGTH(webkitGridColumnProperties)); - -} - -StylePropertyShorthand webkitGridRowShorthand() -{ - static const CSSPropertyID webkitGridRowProperties[] = { - CSSPropertyWebkitGridRowStart, - CSSPropertyWebkitGridRowEnd - }; - return StylePropertyShorthand(CSSPropertyWebkitGridRow, webkitGridRowProperties, WTF_ARRAY_LENGTH(webkitGridRowProperties)); - -} - -StylePropertyShorthand webkitMarqueeShorthand() -{ - static const CSSPropertyID marqueeProperties[] = { - CSSPropertyWebkitMarqueeDirection, - CSSPropertyWebkitMarqueeIncrement, - CSSPropertyWebkitMarqueeRepetition, - CSSPropertyWebkitMarqueeStyle, - CSSPropertyWebkitMarqueeSpeed + CSSPropertyAnimationDuration, + CSSPropertyAnimationTimingFunction, + CSSPropertyAnimationDelay, + CSSPropertyAnimationIterationCount, + CSSPropertyAnimationDirection, + CSSPropertyAnimationFillMode, + CSSPropertyAnimationPlayState, + CSSPropertyAnimationName }; - return StylePropertyShorthand(CSSPropertyWebkitMarquee, marqueeProperties, WTF_ARRAY_LENGTH(marqueeProperties)); -} -StylePropertyShorthand webkitMaskShorthand() -{ - static const CSSPropertyID maskProperties[] = { - CSSPropertyWebkitMaskImage, - CSSPropertyWebkitMaskSourceType, - CSSPropertyWebkitMaskPositionX, - CSSPropertyWebkitMaskPositionY, - CSSPropertyWebkitMaskSize, - CSSPropertyWebkitMaskRepeatX, - CSSPropertyWebkitMaskRepeatY, - CSSPropertyWebkitMaskOrigin, - CSSPropertyWebkitMaskClip - }; - return StylePropertyShorthand(CSSPropertyWebkitMask, maskProperties, WTF_ARRAY_LENGTH(maskProperties)); + return StylePropertyShorthand(CSSPropertyAnimation, animationPropertiesForParsing); } -StylePropertyShorthand webkitMaskPositionShorthand() -{ - static const CSSPropertyID maskPositionProperties[] = { CSSPropertyWebkitMaskPositionX, CSSPropertyWebkitMaskPositionY }; - return StylePropertyShorthand(CSSPropertyWebkitMaskPosition, maskPositionProperties, WTF_ARRAY_LENGTH(maskPositionProperties)); -} - -StylePropertyShorthand webkitMaskRepeatShorthand() -{ - static const CSSPropertyID maskRepeatProperties[] = { CSSPropertyWebkitMaskRepeatX, CSSPropertyWebkitMaskRepeatY }; - return StylePropertyShorthand(CSSPropertyWebkitMaskRepeat, maskRepeatProperties, WTF_ARRAY_LENGTH(maskRepeatProperties)); -} - -StylePropertyShorthand webkitTextDecorationShorthand() -{ - static const CSSPropertyID textDecorationProperties[] = { - CSSPropertyWebkitTextDecorationLine, - CSSPropertyWebkitTextDecorationStyle, - CSSPropertyWebkitTextDecorationColor - }; - return StylePropertyShorthand(CSSPropertyWebkitTextDecoration, textDecorationProperties, WTF_ARRAY_LENGTH(textDecorationProperties)); -} - -StylePropertyShorthand webkitTextEmphasisShorthand() -{ - static const CSSPropertyID textEmphasisProperties[] = { - CSSPropertyWebkitTextEmphasisStyle, - CSSPropertyWebkitTextEmphasisColor - }; - return StylePropertyShorthand(CSSPropertyWebkitTextEmphasis, textEmphasisProperties, WTF_ARRAY_LENGTH(textEmphasisProperties)); -} - -StylePropertyShorthand webkitTextStrokeShorthand() -{ - static const CSSPropertyID textStrokeProperties[] = { CSSPropertyWebkitTextStrokeWidth, CSSPropertyWebkitTextStrokeColor }; - return StylePropertyShorthand(CSSPropertyWebkitTextStroke, textStrokeProperties, WTF_ARRAY_LENGTH(textStrokeProperties)); -} - -StylePropertyShorthand webkitTransitionShorthand() +StylePropertyShorthand transitionShorthandForParsing() { + // Similar to animations, we have property after timing-function and delay after + // duration. static const CSSPropertyID transitionProperties[] = { - CSSPropertyWebkitTransitionProperty, - CSSPropertyWebkitTransitionDuration, - CSSPropertyWebkitTransitionTimingFunction, - CSSPropertyWebkitTransitionDelay - }; - return StylePropertyShorthand(CSSPropertyWebkitTransition, transitionProperties, WTF_ARRAY_LENGTH(transitionProperties)); -} - -StylePropertyShorthand webkitTransformOriginShorthand() -{ - static const CSSPropertyID transformOriginProperties[] = { - CSSPropertyWebkitTransformOriginX, - CSSPropertyWebkitTransformOriginY, - CSSPropertyWebkitTransformOriginZ - }; - return StylePropertyShorthand(CSSPropertyWebkitTransformOrigin, transformOriginProperties, WTF_ARRAY_LENGTH(transformOriginProperties)); -} - -StylePropertyShorthand widthShorthand() -{ - static const CSSPropertyID widthProperties[] = { - CSSPropertyMinWidth, - CSSPropertyMaxWidth - }; - return StylePropertyShorthand(CSSPropertyWidth, widthProperties, WTF_ARRAY_LENGTH(widthProperties)); + CSSPropertyTransitionDuration, CSSPropertyTransitionTimingFunction, + CSSPropertyTransitionDelay, CSSPropertyTransitionProperty}; + return StylePropertyShorthand(CSSPropertyTransition, transitionProperties); } -StylePropertyShorthand heightShorthand() +bool isShorthandCSSProperty(CSSPropertyID id) { - static const CSSPropertyID heightProperties[] = { - CSSPropertyMinHeight, - CSSPropertyMaxHeight - }; - return StylePropertyShorthand(CSSPropertyHeight, heightProperties, WTF_ARRAY_LENGTH(heightProperties)); -} - -// Returns an empty list if the property is not a shorthand. -StylePropertyShorthand shorthandForProperty(CSSPropertyID propertyID) -{ - switch (propertyID) { - 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 CSSPropertyListStyle: - return listStyleShorthand(); - case CSSPropertyFont: - return fontShorthand(); - case CSSPropertyMargin: - return marginShorthand(); - case CSSPropertyOutline: - return outlineShorthand(); - case CSSPropertyOverflow: - return overflowShorthand(); - case CSSPropertyPadding: - return paddingShorthand(); - case CSSPropertyTransition: - return transitionShorthand(); - case CSSPropertyWebkitAnimation: - return webkitAnimationShorthand(); - case CSSPropertyWebkitBorderAfter: - return webkitBorderAfterShorthand(); - case CSSPropertyWebkitBorderBefore: - return webkitBorderBeforeShorthand(); - case CSSPropertyWebkitBorderEnd: - return webkitBorderEndShorthand(); - case CSSPropertyWebkitBorderStart: - return webkitBorderStartShorthand(); - case CSSPropertyWebkitBorderRadius: - return borderRadiusShorthand(); - case CSSPropertyWebkitColumns: - return webkitColumnsShorthand(); - case CSSPropertyWebkitColumnRule: - return webkitColumnRuleShorthand(); - case CSSPropertyWebkitFlex: - return webkitFlexShorthand(); - case CSSPropertyWebkitFlexFlow: - return webkitFlexFlowShorthand(); - case CSSPropertyWebkitGridArea: - return webkitGridAreaShorthand(); - case CSSPropertyWebkitGridColumn: - return webkitGridColumnShorthand(); - case CSSPropertyWebkitGridRow: - return webkitGridRowShorthand(); - case CSSPropertyWebkitMarginCollapse: - return webkitMarginCollapseShorthand(); - case CSSPropertyWebkitMarquee: - return webkitMarqueeShorthand(); - case CSSPropertyWebkitMask: - return webkitMaskShorthand(); - case CSSPropertyWebkitMaskPosition: - return webkitMaskPositionShorthand(); - case CSSPropertyWebkitMaskRepeat: - return webkitMaskRepeatShorthand(); - case CSSPropertyWebkitTextEmphasis: - return webkitTextEmphasisShorthand(); - case CSSPropertyWebkitTextStroke: - return webkitTextStrokeShorthand(); - case CSSPropertyWebkitTransition: - return webkitTransitionShorthand(); - case CSSPropertyWebkitTransformOrigin: - return webkitTransformOriginShorthand(); - case CSSPropertyWebkitTextDecoration: - return webkitTextDecorationShorthand(); -#if ENABLE(SVG) - case CSSPropertyMarker: - return markerShorthand(); -#endif - default: - return StylePropertyShorthand(); - } -} - -bool isExpandedShorthand(CSSPropertyID id) -{ - // The system fonts bypass the normal style resolution by using RenderTheme, - // thus we need to special case it here. FIXME: This is a violation of CSS 3 Fonts - // as we should still be able to change the longhands. - // DON'T ADD ANY SHORTHAND HERE UNLESS IT ISN'T ALWAYS EXPANDED AT PARSE TIME (which is wrong). - if (id == CSSPropertyFont) - return false; - return shorthandForProperty(id).length(); } -static Vector<StylePropertyShorthand> makeVector(const StylePropertyShorthand& a) -{ - return Vector<StylePropertyShorthand>(1, a); -} - -static Vector<StylePropertyShorthand> makeVector(const StylePropertyShorthand& a, const StylePropertyShorthand& b) -{ - Vector<StylePropertyShorthand> vector; - vector.reserveInitialCapacity(2); - vector.uncheckedAppend(a); - vector.uncheckedAppend(b); - return vector; -} - -static Vector<StylePropertyShorthand> makeVector(const StylePropertyShorthand& a, const StylePropertyShorthand& b, const StylePropertyShorthand& c) -{ - Vector<StylePropertyShorthand> vector; - vector.reserveInitialCapacity(3); - vector.uncheckedAppend(a); - vector.uncheckedAppend(b); - vector.uncheckedAppend(c); - return vector; -} - -Vector<StylePropertyShorthand> matchingShorthandsForLonghand(CSSPropertyID propertyID) -{ - switch (propertyID) { - case CSSPropertyBackgroundImage: - case CSSPropertyBackgroundSize: - case CSSPropertyBackgroundAttachment: - case CSSPropertyBackgroundOrigin: - case CSSPropertyBackgroundClip: - case CSSPropertyBackgroundColor: - return makeVector(backgroundShorthand()); - case CSSPropertyBackgroundPositionX: - case CSSPropertyBackgroundPositionY: - return makeVector(backgroundShorthand(), backgroundPositionShorthand()); - case CSSPropertyBackgroundRepeatX: - case CSSPropertyBackgroundRepeatY: - return makeVector(backgroundShorthand(), backgroundRepeatShorthand()); - case CSSPropertyBorderBottomWidth: - return makeVector(borderShorthand(), borderBottomShorthand(), borderWidthShorthand()); - case CSSPropertyBorderTopColor: - return makeVector(borderShorthand(), borderTopShorthand(), borderColorShorthand()); - case CSSPropertyBorderRightColor: - return makeVector(borderShorthand(), borderRightShorthand(), borderColorShorthand()); - case CSSPropertyBorderLeftColor: - return makeVector(borderShorthand(), borderLeftShorthand(), borderColorShorthand()); - case CSSPropertyBorderBottomColor: - return makeVector(borderShorthand(), borderBottomShorthand(), borderColorShorthand()); - case CSSPropertyBorderImageSource: - case CSSPropertyBorderImageSlice: - case CSSPropertyBorderImageWidth: - case CSSPropertyBorderImageOutset: - case CSSPropertyBorderImageRepeat: - return makeVector(borderImageShorthand()); - case CSSPropertyBorderLeftWidth: - return makeVector(borderShorthand(), borderLeftShorthand(), borderWidthShorthand()); - case CSSPropertyBorderTopLeftRadius: - case CSSPropertyBorderTopRightRadius: - case CSSPropertyBorderBottomRightRadius: - case CSSPropertyBorderBottomLeftRadius: - return makeVector(borderRadiusShorthand(), webkitBorderRadiusShorthand()); - case CSSPropertyBorderRightWidth: - return makeVector(borderShorthand(), borderRightShorthand(), borderWidthShorthand()); - case CSSPropertyWebkitBorderHorizontalSpacing: - case CSSPropertyWebkitBorderVerticalSpacing: - return makeVector(borderSpacingShorthand()); - case CSSPropertyBorderTopStyle: - return makeVector(borderShorthand(), borderTopShorthand(), borderStyleShorthand()); - case CSSPropertyBorderBottomStyle: - return makeVector(borderShorthand(), borderBottomShorthand(), borderStyleShorthand()); - case CSSPropertyBorderLeftStyle: - return makeVector(borderShorthand(), borderLeftShorthand(), borderStyleShorthand()); - case CSSPropertyBorderRightStyle: - return makeVector(borderShorthand(), borderRightShorthand(), borderStyleShorthand()); - case CSSPropertyBorderTopWidth: - return makeVector(borderShorthand(), borderTopShorthand(), borderWidthShorthand()); - case CSSPropertyListStyleType: - case CSSPropertyListStylePosition: - case CSSPropertyListStyleImage: - return makeVector(listStyleShorthand()); - case CSSPropertyFontFamily: - case CSSPropertyFontSize: - case CSSPropertyFontStyle: - case CSSPropertyFontVariant: - case CSSPropertyFontWeight: - case CSSPropertyLineHeight: - return makeVector(fontShorthand()); - case CSSPropertyMarginTop: - case CSSPropertyMarginRight: - case CSSPropertyMarginBottom: - case CSSPropertyMarginLeft: - return makeVector(marginShorthand()); - case CSSPropertyOutlineColor: - case CSSPropertyOutlineStyle: - case CSSPropertyOutlineWidth: - return makeVector(outlineShorthand()); - case CSSPropertyPaddingTop: - case CSSPropertyPaddingRight: - case CSSPropertyPaddingBottom: - case CSSPropertyPaddingLeft: - return makeVector(paddingShorthand()); - case CSSPropertyOverflowX: - case CSSPropertyOverflowY: - return makeVector(overflowShorthand()); - case CSSPropertyTransitionProperty: - case CSSPropertyTransitionDuration: - case CSSPropertyTransitionTimingFunction: - case CSSPropertyTransitionDelay: - return makeVector(transitionShorthand()); - case CSSPropertyWebkitAnimationName: - case CSSPropertyWebkitAnimationDuration: - case CSSPropertyWebkitAnimationTimingFunction: - case CSSPropertyWebkitAnimationDelay: - case CSSPropertyWebkitAnimationIterationCount: - case CSSPropertyWebkitAnimationDirection: - case CSSPropertyWebkitAnimationFillMode: - return makeVector(webkitAnimationShorthand()); - case CSSPropertyWebkitBorderAfterWidth: - case CSSPropertyWebkitBorderAfterStyle: - case CSSPropertyWebkitBorderAfterColor: - return makeVector(webkitBorderAfterShorthand()); - case CSSPropertyWebkitBorderBeforeWidth: - case CSSPropertyWebkitBorderBeforeStyle: - case CSSPropertyWebkitBorderBeforeColor: - return makeVector(webkitBorderBeforeShorthand()); - case CSSPropertyWebkitBorderEndWidth: - case CSSPropertyWebkitBorderEndStyle: - case CSSPropertyWebkitBorderEndColor: - return makeVector(webkitBorderEndShorthand()); - case CSSPropertyWebkitBorderStartWidth: - case CSSPropertyWebkitBorderStartStyle: - case CSSPropertyWebkitBorderStartColor: - return makeVector(webkitBorderStartShorthand()); - case CSSPropertyWebkitColumnWidth: - case CSSPropertyWebkitColumnCount: - return makeVector(webkitColumnsShorthand()); - case CSSPropertyWebkitColumnRuleWidth: - case CSSPropertyWebkitColumnRuleStyle: - case CSSPropertyWebkitColumnRuleColor: - return makeVector(webkitColumnRuleShorthand()); - case CSSPropertyWebkitFlexGrow: - case CSSPropertyWebkitFlexShrink: - case CSSPropertyWebkitFlexBasis: - return makeVector(webkitFlexShorthand()); - case CSSPropertyWebkitFlexDirection: - case CSSPropertyWebkitFlexWrap: - return makeVector(webkitFlexFlowShorthand()); - case CSSPropertyWebkitGridColumnStart: - case CSSPropertyWebkitGridColumnEnd: - return makeVector(webkitGridColumnShorthand()); - case CSSPropertyWebkitGridRowStart: - case CSSPropertyWebkitGridRowEnd: - return makeVector(webkitGridRowShorthand()); - case CSSPropertyWebkitMarginBeforeCollapse: - case CSSPropertyWebkitMarginAfterCollapse: - return makeVector(webkitMarginCollapseShorthand()); - case CSSPropertyWebkitMarqueeDirection: - case CSSPropertyWebkitMarqueeIncrement: - case CSSPropertyWebkitMarqueeRepetition: - case CSSPropertyWebkitMarqueeStyle: - case CSSPropertyWebkitMarqueeSpeed: - return makeVector(webkitMarqueeShorthand()); - case CSSPropertyWebkitMaskImage: - case CSSPropertyWebkitMaskSourceType: - case CSSPropertyWebkitMaskSize: - case CSSPropertyWebkitMaskOrigin: - case CSSPropertyWebkitMaskClip: - return makeVector(webkitMaskShorthand()); - case CSSPropertyWebkitMaskPositionX: - case CSSPropertyWebkitMaskPositionY: - return makeVector(webkitMaskPositionShorthand()); - case CSSPropertyWebkitMaskRepeatX: - case CSSPropertyWebkitMaskRepeatY: - return makeVector(webkitMaskRepeatShorthand()); - case CSSPropertyWebkitTextEmphasisStyle: - case CSSPropertyWebkitTextEmphasisColor: - return makeVector(webkitTextEmphasisShorthand()); - case CSSPropertyWebkitTextStrokeWidth: - case CSSPropertyWebkitTextStrokeColor: - return makeVector(webkitTextStrokeShorthand()); - case CSSPropertyWebkitTransitionProperty: - case CSSPropertyWebkitTransitionDuration: - case CSSPropertyWebkitTransitionTimingFunction: - case CSSPropertyWebkitTransitionDelay: - return makeVector(webkitTransitionShorthand()); - case CSSPropertyWebkitTransformOriginX: - case CSSPropertyWebkitTransformOriginY: - case CSSPropertyWebkitTransformOriginZ: - return makeVector(webkitTransformOriginShorthand()); - case CSSPropertyMinWidth: - case CSSPropertyMaxWidth: - return makeVector(widthShorthand()); - case CSSPropertyMinHeight: - case CSSPropertyMaxHeight: - return makeVector(heightShorthand()); - case CSSPropertyWebkitTextDecorationLine: - case CSSPropertyWebkitTextDecorationStyle: - case CSSPropertyWebkitTextDecorationColor: - return makeVector(webkitTextDecorationShorthand()); -#if ENABLE(SVG) - case CSSPropertyMarkerStart: - case CSSPropertyMarkerMid: - case CSSPropertyMarkerEnd: - return makeVector(markerShorthand()); -#endif - default: - break; - } - - return Vector<StylePropertyShorthand>(); -} - -unsigned indexOfShorthandForLonghand(CSSPropertyID shorthandID, const Vector<StylePropertyShorthand>& shorthands) +unsigned indexOfShorthandForLonghand(CSSPropertyID shorthandID, const StylePropertyShorthandVector& shorthands) { for (unsigned i = 0, size = shorthands.size(); i < size; ++i) { if (shorthands[i].id() == shorthandID) |