WebCore/css/CSSPropertyLonghand.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
       
     3  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
       
     4  *
       
     5  * This library is free software; you can redistribute it and/or
       
     6  * modify it under the terms of the GNU Library General Public
       
     7  * License as published by the Free Software Foundation; either
       
     8  * version 2 of the License, or (at your option) any later version.
       
     9  *
       
    10  * This library is distributed in the hope that it will be useful,
       
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    13  * Library General Public License for more details.
       
    14  *
       
    15  * You should have received a copy of the GNU Library General Public License
       
    16  * along with this library; see the file COPYING.LIB.  If not, write to
       
    17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
       
    18  * Boston, MA 02110-1301, USA.
       
    19  */
       
    20 
       
    21 #include "config.h"
       
    22 #include "CSSPropertyLonghand.h"
       
    23 
       
    24 #include "CSSPropertyNames.h"
       
    25 #include <wtf/HashMap.h>
       
    26 #include <wtf/StdLibExtras.h>
       
    27 
       
    28 namespace WebCore {
       
    29 
       
    30 typedef HashMap<int, CSSPropertyLonghand> ShorthandMap;
       
    31 
       
    32 static void initShorthandMap(ShorthandMap& shorthandMap)
       
    33 {
       
    34     #define SET_SHORTHAND_MAP_ENTRY(map, propID, array) \
       
    35         map.set(propID, CSSPropertyLonghand(array, sizeof(array) / sizeof(array[0])))
       
    36 
       
    37     // FIXME: The 'font' property has "shorthand nature" but is not parsed as a shorthand.
       
    38 
       
    39     // Do not change the order of the following four shorthands, and keep them together.
       
    40     static const int borderProperties[4][3] = {
       
    41         { CSSPropertyBorderTopColor, CSSPropertyBorderTopStyle, CSSPropertyBorderTopWidth },
       
    42         { CSSPropertyBorderRightColor, CSSPropertyBorderRightStyle, CSSPropertyBorderRightWidth },
       
    43         { CSSPropertyBorderBottomColor, CSSPropertyBorderBottomStyle, CSSPropertyBorderBottomWidth },
       
    44         { CSSPropertyBorderLeftColor, CSSPropertyBorderLeftStyle, CSSPropertyBorderLeftWidth }
       
    45     };
       
    46     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderTop, borderProperties[0]);
       
    47     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderRight, borderProperties[1]);
       
    48     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderBottom, borderProperties[2]);
       
    49     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderLeft, borderProperties[3]);
       
    50 
       
    51     shorthandMap.set(CSSPropertyBorder, CSSPropertyLonghand(borderProperties[0], sizeof(borderProperties) / sizeof(borderProperties[0][0])));
       
    52 
       
    53     static const int borderColorProperties[] = {
       
    54         CSSPropertyBorderTopColor,
       
    55         CSSPropertyBorderRightColor,
       
    56         CSSPropertyBorderBottomColor,
       
    57         CSSPropertyBorderLeftColor
       
    58     };
       
    59     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderColor, borderColorProperties);
       
    60 
       
    61     static const int borderStyleProperties[] = {
       
    62         CSSPropertyBorderTopStyle,
       
    63         CSSPropertyBorderRightStyle,
       
    64         CSSPropertyBorderBottomStyle,
       
    65         CSSPropertyBorderLeftStyle
       
    66     };
       
    67     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderStyle, borderStyleProperties);
       
    68 
       
    69     static const int borderWidthProperties[] = {
       
    70         CSSPropertyBorderTopWidth,
       
    71         CSSPropertyBorderRightWidth,
       
    72         CSSPropertyBorderBottomWidth,
       
    73         CSSPropertyBorderLeftWidth
       
    74     };
       
    75     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderWidth, borderWidthProperties);
       
    76 
       
    77     static const int backgroundPositionProperties[] = { CSSPropertyBackgroundPositionX, CSSPropertyBackgroundPositionY };
       
    78     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBackgroundPosition, backgroundPositionProperties);
       
    79 
       
    80     static const int backgroundRepeatProperties[] = { CSSPropertyBackgroundRepeatX, CSSPropertyBackgroundRepeatY };
       
    81     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBackgroundRepeat, backgroundRepeatProperties);
       
    82 
       
    83     static const int borderSpacingProperties[] = { CSSPropertyWebkitBorderHorizontalSpacing, CSSPropertyWebkitBorderVerticalSpacing };
       
    84     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderSpacing, borderSpacingProperties);
       
    85 
       
    86     static const int listStyleProperties[] = {
       
    87         CSSPropertyListStyleImage,
       
    88         CSSPropertyListStylePosition,
       
    89         CSSPropertyListStyleType
       
    90     };
       
    91     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyListStyle, listStyleProperties);
       
    92 
       
    93     static const int marginProperties[] = {
       
    94         CSSPropertyMarginTop,
       
    95         CSSPropertyMarginRight,
       
    96         CSSPropertyMarginBottom,
       
    97         CSSPropertyMarginLeft
       
    98     };
       
    99     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyMargin, marginProperties);
       
   100 
       
   101     static const int marginCollapseProperties[] = { CSSPropertyWebkitMarginTopCollapse, CSSPropertyWebkitMarginBottomCollapse };
       
   102     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitMarginCollapse, marginCollapseProperties);
       
   103 
       
   104     static const int marqueeProperties[] = {
       
   105         CSSPropertyWebkitMarqueeDirection,
       
   106         CSSPropertyWebkitMarqueeIncrement,
       
   107         CSSPropertyWebkitMarqueeRepetition,
       
   108         CSSPropertyWebkitMarqueeStyle,
       
   109         CSSPropertyWebkitMarqueeSpeed
       
   110     };
       
   111     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitMarquee, marqueeProperties);
       
   112 
       
   113     static const int outlineProperties[] = {
       
   114         CSSPropertyOutlineColor,
       
   115         CSSPropertyOutlineOffset,
       
   116         CSSPropertyOutlineStyle,
       
   117         CSSPropertyOutlineWidth
       
   118     };
       
   119     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyOutline, outlineProperties);
       
   120 
       
   121     static const int paddingProperties[] = {
       
   122         CSSPropertyPaddingTop,
       
   123         CSSPropertyPaddingRight,
       
   124         CSSPropertyPaddingBottom,
       
   125         CSSPropertyPaddingLeft
       
   126     };
       
   127     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyPadding, paddingProperties);
       
   128 
       
   129     static const int textStrokeProperties[] = { CSSPropertyWebkitTextStrokeColor, CSSPropertyWebkitTextStrokeWidth };
       
   130     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitTextStroke, textStrokeProperties);
       
   131 
       
   132     static const int backgroundProperties[] = {
       
   133         CSSPropertyBackgroundAttachment,
       
   134         CSSPropertyBackgroundClip,
       
   135         CSSPropertyBackgroundColor,
       
   136         CSSPropertyBackgroundImage,
       
   137         CSSPropertyBackgroundOrigin,
       
   138         CSSPropertyBackgroundPositionX,
       
   139         CSSPropertyBackgroundPositionY,
       
   140         CSSPropertyBackgroundRepeatX,
       
   141         CSSPropertyBackgroundRepeatY
       
   142     };
       
   143     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBackground, backgroundProperties);
       
   144 
       
   145     static const int columnsProperties[] = { CSSPropertyWebkitColumnWidth, CSSPropertyWebkitColumnCount };
       
   146     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitColumns, columnsProperties);
       
   147 
       
   148     static const int columnRuleProperties[] = {
       
   149         CSSPropertyWebkitColumnRuleColor,
       
   150         CSSPropertyWebkitColumnRuleStyle,
       
   151         CSSPropertyWebkitColumnRuleWidth
       
   152     };
       
   153     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitColumnRule, columnRuleProperties);
       
   154 
       
   155     static const int overflowProperties[] = { CSSPropertyOverflowX, CSSPropertyOverflowY };
       
   156     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyOverflow, overflowProperties);
       
   157 
       
   158     static const int borderRadiusProperties[] = {
       
   159         CSSPropertyBorderTopRightRadius,
       
   160         CSSPropertyBorderTopLeftRadius,
       
   161         CSSPropertyBorderBottomLeftRadius,
       
   162         CSSPropertyBorderBottomRightRadius
       
   163     };
       
   164     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyBorderRadius, borderRadiusProperties);
       
   165     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitBorderRadius, borderRadiusProperties);
       
   166 
       
   167     static const int maskPositionProperties[] = { CSSPropertyWebkitMaskPositionX, CSSPropertyWebkitMaskPositionY };
       
   168     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitMaskPosition, maskPositionProperties);
       
   169 
       
   170     static const int maskRepeatProperties[] = { CSSPropertyWebkitMaskRepeatX, CSSPropertyWebkitMaskRepeatY };
       
   171     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitMaskRepeat, maskRepeatProperties);
       
   172 
       
   173     static const int maskProperties[] = {
       
   174         CSSPropertyWebkitMaskAttachment,
       
   175         CSSPropertyWebkitMaskClip,
       
   176         CSSPropertyWebkitMaskImage,
       
   177         CSSPropertyWebkitMaskOrigin,
       
   178         CSSPropertyWebkitMaskPositionX,
       
   179         CSSPropertyWebkitMaskPositionY,
       
   180         CSSPropertyWebkitMaskRepeatX,
       
   181         CSSPropertyWebkitMaskRepeatY
       
   182     };
       
   183     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitMask, maskProperties);
       
   184 
       
   185     static const int animationProperties[] = {
       
   186         CSSPropertyWebkitAnimationName,
       
   187         CSSPropertyWebkitAnimationDuration,
       
   188         CSSPropertyWebkitAnimationTimingFunction,
       
   189         CSSPropertyWebkitAnimationDelay,
       
   190         CSSPropertyWebkitAnimationIterationCount,
       
   191         CSSPropertyWebkitAnimationDirection,
       
   192         CSSPropertyWebkitAnimationFillMode
       
   193     };
       
   194     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitAnimation, animationProperties);
       
   195 
       
   196     static const int transitionProperties[] = {
       
   197         CSSPropertyWebkitTransitionProperty,
       
   198         CSSPropertyWebkitTransitionDuration,
       
   199         CSSPropertyWebkitTransitionTimingFunction,
       
   200         CSSPropertyWebkitTransitionDelay
       
   201     };
       
   202     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitTransition, transitionProperties);
       
   203 
       
   204     static const int transformOriginProperties[] = {
       
   205         CSSPropertyWebkitTransformOriginX,
       
   206         CSSPropertyWebkitTransformOriginY
       
   207     };
       
   208     SET_SHORTHAND_MAP_ENTRY(shorthandMap, CSSPropertyWebkitTransformOrigin, transformOriginProperties);
       
   209     
       
   210     #undef SET_SHORTHAND_MAP_ENTRY
       
   211 }
       
   212 
       
   213 CSSPropertyLonghand longhandForProperty(int propertyID)
       
   214 {
       
   215     DEFINE_STATIC_LOCAL(ShorthandMap, shorthandMap, ());
       
   216     if (shorthandMap.isEmpty())
       
   217         initShorthandMap(shorthandMap);
       
   218 
       
   219     return shorthandMap.get(propertyID);
       
   220 }
       
   221 
       
   222 
       
   223 } // namespace WebCore