PageRenderTime 60ms CodeModel.GetById 33ms app.highlight 22ms RepoModel.GetById 2ms app.codeStats 0ms

/platform/external/webkit/WebCore/css/CSSParser.h

https://github.com/aharish/totoro-gb-opensource-update2
C Header | 319 lines | 229 code | 66 blank | 24 comment | 2 complexity | 18388bc741e96bc745fe6cbec44cd3c9 MD5 | raw file
  1/*
  2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
  3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
  4 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
  5 *
  6 * This library is free software; you can redistribute it and/or
  7 * modify it under the terms of the GNU Library General Public
  8 * License as published by the Free Software Foundation; either
  9 * version 2 of the License, or (at your option) any later version.
 10 *
 11 * This library is distributed in the hope that it will be useful,
 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14 * Library General Public License for more details.
 15 *
 16 * You should have received a copy of the GNU Library General Public License
 17 * along with this library; see the file COPYING.LIB.  If not, write to
 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 19 * Boston, MA 02110-1301, USA.
 20 */
 21
 22#ifndef CSSParser_h
 23#define CSSParser_h
 24
 25#include "AtomicString.h"
 26#include "Color.h"
 27#include "CSSParserValues.h"
 28#include "CSSSelectorList.h"
 29#include "MediaQuery.h"
 30#include <wtf/HashSet.h>
 31#include <wtf/Vector.h>
 32
 33namespace WebCore {
 34
 35    class CSSMutableStyleDeclaration;
 36    class CSSPrimitiveValue;
 37    class CSSProperty;
 38    class CSSRule;
 39    class CSSRuleList;
 40    class CSSSelector;
 41    class CSSStyleSheet;
 42    class CSSValue;
 43    class CSSValueList;
 44    class CSSVariablesDeclaration;
 45    class Document;
 46    class MediaList;
 47    class MediaQueryExp;
 48    class StyleBase;
 49    class StyleList;
 50    class WebKitCSSKeyframeRule;
 51    class WebKitCSSKeyframesRule;
 52
 53    class CSSParser {
 54    public:
 55        CSSParser(bool strictParsing = true);
 56        ~CSSParser();
 57
 58        void parseSheet(CSSStyleSheet*, const String&);
 59        PassRefPtr<CSSRule> parseRule(CSSStyleSheet*, const String&);
 60        PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&);
 61        bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important);
 62        static bool parseColor(RGBA32& color, const String&, bool strict = false);
 63        bool parseColor(CSSMutableStyleDeclaration*, const String&);
 64        bool parseDeclaration(CSSMutableStyleDeclaration*, const String&);
 65        bool parseMediaQuery(MediaList*, const String&);
 66
 67        Document* document() const;
 68
 69        void addProperty(int propId, PassRefPtr<CSSValue>, bool important);
 70        void rollbackLastProperties(int num);
 71        bool hasProperties() const { return m_numParsedProperties > 0; }
 72
 73        bool parseValue(int propId, bool important);
 74        bool parseShorthand(int propId, const int* properties, int numProperties, bool important);
 75        bool parse4Values(int propId, const int* properties, bool important);
 76        bool parseContent(int propId, bool important);
 77
 78        PassRefPtr<CSSValue> parseAttr(CSSParserValueList* args);
 79
 80        PassRefPtr<CSSValue> parseBackgroundColor();
 81
 82        bool parseFillImage(RefPtr<CSSValue>&);
 83        PassRefPtr<CSSValue> parseFillPositionXY(bool& xFound, bool& yFound);
 84        void parseFillPosition(RefPtr<CSSValue>&, RefPtr<CSSValue>&);
 85        void parseFillRepeat(RefPtr<CSSValue>&, RefPtr<CSSValue>&);
 86        PassRefPtr<CSSValue> parseFillSize(int propId, bool &allowComma);
 87        
 88        bool parseFillProperty(int propId, int& propId1, int& propId2, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
 89        bool parseFillShorthand(int propId, const int* properties, int numProperties, bool important);
 90
 91        void addFillValue(RefPtr<CSSValue>& lval, PassRefPtr<CSSValue> rval);
 92
 93        void addAnimationValue(RefPtr<CSSValue>& lval, PassRefPtr<CSSValue> rval);
 94
 95        PassRefPtr<CSSValue> parseAnimationDelay();
 96        PassRefPtr<CSSValue> parseAnimationDirection();
 97        PassRefPtr<CSSValue> parseAnimationDuration();
 98        PassRefPtr<CSSValue> parseAnimationIterationCount();
 99        PassRefPtr<CSSValue> parseAnimationName();
100        PassRefPtr<CSSValue> parseAnimationPlayState();
101        PassRefPtr<CSSValue> parseAnimationProperty();
102        PassRefPtr<CSSValue> parseAnimationTimingFunction();
103
104        void parseTransformOriginShorthand(RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
105        bool parseTimingFunctionValue(CSSParserValueList*& args, double& result);
106        bool parseAnimationProperty(int propId, RefPtr<CSSValue>&);
107        bool parseTransitionShorthand(bool important);
108        bool parseAnimationShorthand(bool important);
109        
110        bool parseDashboardRegions(int propId, bool important);
111
112        bool parseShape(int propId, bool important);
113
114        bool parseFont(bool important);
115        PassRefPtr<CSSValueList> parseFontFamily();
116
117        bool parseCounter(int propId, int defaultValue, bool important);
118        PassRefPtr<CSSValue> parseCounterContent(CSSParserValueList* args, bool counters);
119
120        bool parseColorParameters(CSSParserValue*, int* colorValues, bool parseAlpha);
121        bool parseHSLParameters(CSSParserValue*, double* colorValues, bool parseAlpha);
122        PassRefPtr<CSSPrimitiveValue> parseColor(CSSParserValue* = 0);
123        bool parseColorFromValue(CSSParserValue*, RGBA32&, bool = false);
124        void parseSelector(const String&, Document* doc, CSSSelectorList&);
125
126        static bool parseColor(const String&, RGBA32& rgb, bool strict);
127
128        bool parseFontStyle(bool important);
129        bool parseFontVariant(bool important);
130        bool parseFontWeight(bool important);
131        bool parseFontFaceSrc();
132        bool parseFontFaceUnicodeRange();
133
134#if ENABLE(SVG)
135        bool parseSVGValue(int propId, bool important);
136        PassRefPtr<CSSValue> parseSVGPaint();
137        PassRefPtr<CSSValue> parseSVGColor();
138        PassRefPtr<CSSValue> parseSVGStrokeDasharray();
139#endif
140
141        // CSS3 Parsing Routines (for properties specific to CSS3)
142        bool parseShadow(int propId, bool important);
143        bool parseBorderImage(int propId, bool important, RefPtr<CSSValue>&);
144        bool parseBorderRadius(int propId, bool important);
145        
146        bool parseReflect(int propId, bool important);
147
148        // Image generators
149        bool parseCanvas(RefPtr<CSSValue>&);
150        bool parseGradient(RefPtr<CSSValue>&);
151
152        PassRefPtr<CSSValueList> parseTransform();
153        bool parseTransformOrigin(int propId, int& propId1, int& propId2, int& propId3, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
154        bool parsePerspectiveOrigin(int propId, int& propId1, int& propId2,  RefPtr<CSSValue>&, RefPtr<CSSValue>&);
155        bool parseVariable(CSSVariablesDeclaration*, const String& variableName, const String& variableValue);
156        void parsePropertyWithResolvedVariables(int propId, bool important, CSSMutableStyleDeclaration*, CSSParserValueList*);
157
158        int yyparse();
159
160        CSSSelector* createFloatingSelector();
161        CSSSelector* sinkFloatingSelector(CSSSelector*);
162
163        CSSParserValueList* createFloatingValueList();
164        CSSParserValueList* sinkFloatingValueList(CSSParserValueList*);
165
166        CSSParserFunction* createFloatingFunction();
167        CSSParserFunction* sinkFloatingFunction(CSSParserFunction*);
168
169        CSSParserValue& sinkFloatingValue(CSSParserValue&);
170
171        MediaList* createMediaList();
172        CSSRule* createCharsetRule(const CSSParserString&);
173        CSSRule* createImportRule(const CSSParserString&, MediaList*);
174        WebKitCSSKeyframeRule* createKeyframeRule(CSSParserValueList*);
175        WebKitCSSKeyframesRule* createKeyframesRule();
176        CSSRule* createMediaRule(MediaList*, CSSRuleList*);
177        CSSRuleList* createRuleList();
178        CSSRule* createStyleRule(Vector<CSSSelector*>* selectors);
179        CSSRule* createFontFaceRule();
180        CSSRule* createVariablesRule(MediaList*, bool variablesKeyword);
181
182        MediaQueryExp* createFloatingMediaQueryExp(const AtomicString&, CSSParserValueList*);
183        MediaQueryExp* sinkFloatingMediaQueryExp(MediaQueryExp*);
184        Vector<MediaQueryExp*>* createFloatingMediaQueryExpList();
185        Vector<MediaQueryExp*>* sinkFloatingMediaQueryExpList(Vector<MediaQueryExp*>*);
186        MediaQuery* createFloatingMediaQuery(MediaQuery::Restrictor, const String&, Vector<MediaQueryExp*>*);
187        MediaQuery* createFloatingMediaQuery(Vector<MediaQueryExp*>*);
188        MediaQuery* sinkFloatingMediaQuery(MediaQuery*);
189
190        void addNamespace(const AtomicString& prefix, const AtomicString& uri);
191
192        bool addVariable(const CSSParserString&, CSSParserValueList*);
193        bool addVariableDeclarationBlock(const CSSParserString&);
194        bool checkForVariables(CSSParserValueList*);
195        void addUnresolvedProperty(int propId, bool important);
196        void invalidBlockHit();
197        
198        Vector<CSSSelector*>* reusableSelectorVector() { return &m_reusableSelectorVector; }
199
200        bool m_strict;
201        bool m_important;
202        int m_id;
203        CSSStyleSheet* m_styleSheet;
204        RefPtr<CSSRule> m_rule;
205        RefPtr<CSSRule> m_keyframe;
206        MediaQuery* m_mediaQuery;
207        CSSParserValueList* m_valueList;
208        CSSProperty** m_parsedProperties;
209        CSSSelectorList* m_selectorListForParseSelector;
210        unsigned m_numParsedProperties;
211        unsigned m_maxParsedProperties;
212
213        int m_inParseShorthand;
214        int m_currentShorthand;
215        bool m_implicitShorthand;
216
217        bool m_hasFontFaceOnlyValues;
218        bool m_hadSyntacticallyValidCSSRule;
219
220        Vector<String> m_variableNames;
221        Vector<RefPtr<CSSValue> > m_variableValues;
222
223        AtomicString m_defaultNamespace;
224
225        // tokenizer methods and data
226        int lex(void* yylval);
227        int token() { return yyTok; }
228        UChar* text(int* length);
229        int lex();
230        
231    private:
232        void recheckAtKeyword(const UChar* str, int len);
233    
234        void clearProperties();
235
236        void setupParser(const char* prefix, const String&, const char* suffix);
237
238        bool inShorthand() const { return m_inParseShorthand; }
239
240        void checkForOrphanedUnits();
241        
242        void clearVariables();
243
244        void deleteFontFaceOnlyValues();
245
246        UChar* m_data;
247        UChar* yytext;
248        UChar* yy_c_buf_p;
249        UChar yy_hold_char;
250        int yy_last_accepting_state;
251        UChar* yy_last_accepting_cpos;
252        int yyleng;
253        int yyTok;
254        int yy_start;
255
256        bool m_allowImportRules;
257        bool m_allowVariablesRules;
258        bool m_allowNamespaceDeclarations;
259
260        Vector<RefPtr<StyleBase> > m_parsedStyleObjects;
261        Vector<RefPtr<CSSRuleList> > m_parsedRuleLists;
262        HashSet<CSSSelector*> m_floatingSelectors;
263        HashSet<CSSParserValueList*> m_floatingValueLists;
264        HashSet<CSSParserFunction*> m_floatingFunctions;
265
266        MediaQuery* m_floatingMediaQuery;
267        MediaQueryExp* m_floatingMediaQueryExp;
268        Vector<MediaQueryExp*>* m_floatingMediaQueryExpList;
269        
270        Vector<CSSSelector*> m_reusableSelectorVector;
271
272        // defines units allowed for a certain property, used in parseUnit
273        enum Units {
274            FUnknown   = 0x0000,
275            FInteger   = 0x0001,
276            FNumber    = 0x0002,  // Real Numbers
277            FPercent   = 0x0004,
278            FLength    = 0x0008,
279            FAngle     = 0x0010,
280            FTime      = 0x0020,
281            FFrequency = 0x0040,
282            FRelative  = 0x0100,
283            FNonNeg    = 0x0200
284        };
285
286        friend inline Units operator|(Units a, Units b)
287        {
288            return static_cast<Units>(static_cast<unsigned>(a) | static_cast<unsigned>(b));
289        }
290
291        static bool validUnit(CSSParserValue*, Units, bool strict);
292        
293        friend class TransformOperationInfo;
294    };
295
296    int cssPropertyID(const CSSParserString&);
297    int cssPropertyID(const String&);
298    int cssValueKeywordID(const CSSParserString&);
299
300    class ShorthandScope : public FastAllocBase {
301    public:
302        ShorthandScope(CSSParser* parser, int propId) : m_parser(parser)
303        {
304            if (!(m_parser->m_inParseShorthand++))
305                m_parser->m_currentShorthand = propId;
306        }
307        ~ShorthandScope()
308        {
309            if (!(--m_parser->m_inParseShorthand))
310                m_parser->m_currentShorthand = 0;
311        }
312
313    private:
314        CSSParser* m_parser;
315    };
316
317} // namespace WebCore
318
319#endif // CSSParser_h