18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
35ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
521939df44de1705786c545cd1bf519d47250322dBen Murdoch * Copyright (C) 2009 - 2010  Torch Mobile (Beijing) Co. Ltd. All rights reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef CSSParser_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define CSSParser_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
26cad810f21b803229eb11403f9209855525a25d57Steve Block#include "CSSGradientValue.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSParserValues.h"
2868513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "CSSPropertySourceData.h"
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "CSSSelectorList.h"
30cad810f21b803229eb11403f9209855525a25d57Steve Block#include "Color.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MediaQuery.h"
325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include <wtf/HashMap.h>
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashSet.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h>
35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h>
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSMutableStyleDeclaration;
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSPrimitiveValue;
4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    class CSSPrimitiveValueCache;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSProperty;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSRule;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSRuleList;
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSSelector;
465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    class CSSStyleRule;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSStyleSheet;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSValue;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSValueList;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Document;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class MediaList;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class MediaQueryExp;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class StyleBase;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class StyleList;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class WebKitCSSKeyframeRule;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class WebKitCSSKeyframesRule;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class CSSParser {
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParser(bool strictParsing = true);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ~CSSParser();
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6368513a70bcd92384395513322f1b801e7bf9c729Steve Block        void parseSheet(CSSStyleSheet*, const String&, int startLineNumber = 0, StyleRuleRangeMap* ruleRangeMap = 0);
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSRule> parseRule(CSSStyleSheet*, const String&);
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&);
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        static bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important, bool strict);
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static bool parseColor(RGBA32& color, const String&, bool strict = false);
682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        static bool parseSystemColor(RGBA32& color, const String&, Document*);
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseColor(CSSMutableStyleDeclaration*, const String&);
70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        bool parseDeclaration(CSSMutableStyleDeclaration*, const String&, RefPtr<CSSStyleSourceData>* styleSourceData = 0);
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseMediaQuery(MediaList*, const String&);
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Document* document() const;
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        CSSPrimitiveValueCache* primitiveValueCache() const { return m_primitiveValueCache.get(); }
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addProperty(int propId, PassRefPtr<CSSValue>, bool important);
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void rollbackLastProperties(int num);
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool hasProperties() const { return m_numParsedProperties > 0; }
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseValue(int propId, bool important);
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseShorthand(int propId, const int* properties, int numProperties, bool important);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parse4Values(int propId, const int* properties, bool important);
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseContent(int propId, bool important);
8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        bool parseQuotes(int propId, bool important);
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        PassRefPtr<CSSValue> parseAttr(CSSParserValueList* args);
885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseBackgroundColor();
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFillImage(RefPtr<CSSValue>&);
922bde8e466a4451c7319e3a072d118917957d6554Steve Block
932bde8e466a4451c7319e3a072d118917957d6554Steve Block        enum FillPositionFlag { InvalidFillPosition = 0, AmbiguousFillPosition = 1, XFillPosition = 2, YFillPosition = 4 };
942bde8e466a4451c7319e3a072d118917957d6554Steve Block        PassRefPtr<CSSValue> parseFillPositionComponent(CSSParserValueList*, unsigned& cumulativeFlags, FillPositionFlag& individualFlag);
952bde8e466a4451c7319e3a072d118917957d6554Steve Block        PassRefPtr<CSSValue> parseFillPositionX(CSSParserValueList*);
962bde8e466a4451c7319e3a072d118917957d6554Steve Block        PassRefPtr<CSSValue> parseFillPositionY(CSSParserValueList*);
97cad810f21b803229eb11403f9209855525a25d57Steve Block        void parseFillPosition(CSSParserValueList*, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
982bde8e466a4451c7319e3a072d118917957d6554Steve Block
99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void parseFillRepeat(RefPtr<CSSValue>&, RefPtr<CSSValue>&);
100cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        PassRefPtr<CSSValue> parseFillSize(int propId, bool &allowComma);
101e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFillProperty(int propId, int& propId1, int& propId2, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFillShorthand(int propId, const int* properties, int numProperties, bool important);
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addFillValue(RefPtr<CSSValue>& lval, PassRefPtr<CSSValue> rval);
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void addAnimationValue(RefPtr<CSSValue>& lval, PassRefPtr<CSSValue> rval);
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationDelay();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationDirection();
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationDuration();
112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        PassRefPtr<CSSValue> parseAnimationFillMode();
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationIterationCount();
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationName();
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        PassRefPtr<CSSValue> parseAnimationPlayState();
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationProperty();
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseAnimationTimingFunction();
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        bool parseTransformOriginShorthand(RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
1205abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        bool parseCubicBezierTimingFunctionValue(CSSParserValueList*& args, double& result);
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseAnimationProperty(int propId, RefPtr<CSSValue>&);
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseTransitionShorthand(bool important);
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseAnimationShorthand(bool important);
124e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseDashboardRegions(int propId, bool important);
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseShape(int propId, bool important);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFont(bool important);
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValueList> parseFontFamily();
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseCounter(int propId, int defaultValue, bool important);
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseCounterContent(CSSParserValueList* args, bool counters);
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseColorParameters(CSSParserValue*, int* colorValues, bool parseAlpha);
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseHSLParameters(CSSParserValue*, double* colorValues, bool parseAlpha);
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSPrimitiveValue> parseColor(CSSParserValue* = 0);
138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool parseColorFromValue(CSSParserValue*, RGBA32&);
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        void parseSelector(const String&, Document* doc, CSSSelectorList&);
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static bool parseColor(const String&, RGBA32& rgb, bool strict);
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFontStyle(bool important);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFontVariant(bool important);
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFontWeight(bool important);
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFontFaceSrc();
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseFontFaceUnicodeRange();
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseSVGValue(int propId, bool important);
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseSVGPaint();
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseSVGColor();
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValue> parseSVGStrokeDasharray();
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15621939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(WCSS)
15721939df44de1705786c545cd1bf519d47250322dBen Murdoch        PassRefPtr<CSSValue> parseWCSSInputProperty();
15821939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
15921939df44de1705786c545cd1bf519d47250322dBen Murdoch
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // CSS3 Parsing Routines (for properties specific to CSS3)
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseShadow(int propId, bool important);
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseBorderImage(int propId, bool important, RefPtr<CSSValue>&);
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool parseBorderRadius(int propId, bool important);
164e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseReflect(int propId, bool important);
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Image generators
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool parseCanvas(RefPtr<CSSValue>&);
169cad810f21b803229eb11403f9209855525a25d57Steve Block
170cad810f21b803229eb11403f9209855525a25d57Steve Block        bool parseDeprecatedGradient(RefPtr<CSSValue>&);
171cad810f21b803229eb11403f9209855525a25d57Steve Block        bool parseLinearGradient(RefPtr<CSSValue>&, CSSGradientRepeat repeating);
172cad810f21b803229eb11403f9209855525a25d57Steve Block        bool parseRadialGradient(RefPtr<CSSValue>&, CSSGradientRepeat repeating);
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool parseGradientColorStops(CSSParserValueList*, CSSGradientValue*, bool expectComma);
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PassRefPtr<CSSValueList> parseTransform();
1768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        bool parseTransformOrigin(int propId, int& propId1, int& propId2, int& propId3, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
1778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        bool parsePerspectiveOrigin(int propId, int& propId1, int& propId2,  RefPtr<CSSValue>&, RefPtr<CSSValue>&);
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
179f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        bool parseTextEmphasisStyle(bool important);
180f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
1812bde8e466a4451c7319e3a072d118917957d6554Steve Block        bool parseLineBoxContain(bool important);
1822bde8e466a4451c7319e3a072d118917957d6554Steve Block
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int yyparse();
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        CSSParserSelector* createFloatingSelector();
1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        PassOwnPtr<CSSParserSelector> sinkFloatingSelector(CSSParserSelector*);
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1882bde8e466a4451c7319e3a072d118917957d6554Steve Block        Vector<OwnPtr<CSSParserSelector> >* createFloatingSelectorVector();
1892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        PassOwnPtr<Vector<OwnPtr<CSSParserSelector> > > sinkFloatingSelectorVector(Vector<OwnPtr<CSSParserSelector> >*);
1902bde8e466a4451c7319e3a072d118917957d6554Steve Block
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserValueList* createFloatingValueList();
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserValueList* sinkFloatingValueList(CSSParserValueList*);
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserFunction* createFloatingFunction();
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserFunction* sinkFloatingFunction(CSSParserFunction*);
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserValue& sinkFloatingValue(CSSParserValue&);
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        MediaList* createMediaList();
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSRule* createCharsetRule(const CSSParserString&);
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSRule* createImportRule(const CSSParserString&, MediaList*);
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        WebKitCSSKeyframeRule* createKeyframeRule(CSSParserValueList*);
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        WebKitCSSKeyframesRule* createKeyframesRule();
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSRule* createMediaRule(MediaList*, CSSRuleList*);
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSRuleList* createRuleList();
2062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        CSSRule* createStyleRule(Vector<OwnPtr<CSSParserSelector> >* selectors);
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSRule* createFontFaceRule();
2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        CSSRule* createPageRule(PassOwnPtr<CSSParserSelector> pageSelector);
20921939df44de1705786c545cd1bf519d47250322dBen Murdoch        CSSRule* createMarginAtRule(CSSSelector::MarginBoxType marginBox);
21021939df44de1705786c545cd1bf519d47250322dBen Murdoch        void startDeclarationsForMarginBox();
21121939df44de1705786c545cd1bf519d47250322dBen Murdoch        void endDeclarationsForMarginBox();
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        MediaQueryExp* createFloatingMediaQueryExp(const AtomicString&, CSSParserValueList*);
2145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PassOwnPtr<MediaQueryExp> sinkFloatingMediaQueryExp(MediaQueryExp*);
2155abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        Vector<OwnPtr<MediaQueryExp> >* createFloatingMediaQueryExpList();
2165abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        PassOwnPtr<Vector<OwnPtr<MediaQueryExp> > > sinkFloatingMediaQueryExpList(Vector<OwnPtr<MediaQueryExp> >*);
2175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        MediaQuery* createFloatingMediaQuery(MediaQuery::Restrictor, const String&, PassOwnPtr<Vector<OwnPtr<MediaQueryExp> > >);
2185abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        MediaQuery* createFloatingMediaQuery(PassOwnPtr<Vector<OwnPtr<MediaQueryExp> > >);
2195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PassOwnPtr<MediaQuery> sinkFloatingMediaQuery(MediaQuery*);
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void addNamespace(const AtomicString& prefix, const AtomicString& uri);
2222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        void updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*);
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
224d0825bca7fe65beaee391d30da42e937db621564Steve Block        void invalidBlockHit();
225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        Vector<OwnPtr<CSSParserSelector> >* reusableSelectorVector() { return &m_reusableSelectorVector; }
227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
2285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        void updateLastSelectorLineAndPosition();
229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
230e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        void clearProperties();
231e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_strict;
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_important;
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_id;
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSStyleSheet* m_styleSheet;
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RefPtr<CSSRule> m_rule;
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RefPtr<CSSRule> m_keyframe;
2385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        OwnPtr<MediaQuery> m_mediaQuery;
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParserValueList* m_valueList;
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSProperty** m_parsedProperties;
241635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        CSSSelectorList* m_selectorListForParseSelector;
24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        RefPtr<CSSPrimitiveValueCache> m_primitiveValueCache;
2438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        unsigned m_numParsedProperties;
2448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        unsigned m_maxParsedProperties;
24521939df44de1705786c545cd1bf519d47250322dBen Murdoch        unsigned m_numParsedPropertiesBeforeMarginBox;
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_inParseShorthand;
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_currentShorthand;
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_implicitShorthand;
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_hasFontFaceOnlyValues;
252d0825bca7fe65beaee391d30da42e937db621564Steve Block        bool m_hadSyntacticallyValidCSSRule;
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        AtomicString m_defaultNamespace;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // tokenizer methods and data
2574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        bool m_inStyleRuleOrDeclaration;
258a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        SourceRange m_selectorListRange;
259a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        SourceRange m_ruleBodyRange;
260a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        SourceRange m_propertyRange;
26168513a70bcd92384395513322f1b801e7bf9c729Steve Block        StyleRuleRangeMap* m_ruleRangeMap;
262a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        RefPtr<CSSRuleSourceData> m_currentRuleData;
263a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        void markSelectorListStart();
264a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        void markSelectorListEnd();
2655af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        void markRuleBodyStart();
2665af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        void markRuleBodyEnd();
26768513a70bcd92384395513322f1b801e7bf9c729Steve Block        void markPropertyStart();
26868513a70bcd92384395513322f1b801e7bf9c729Steve Block        void markPropertyEnd(bool isImportantFound, bool isPropertyParsed);
269a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        void resetSelectorListMarks() { m_selectorListRange.start = m_selectorListRange.end = 0; }
270a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        void resetRuleBodyMarks() { m_ruleBodyRange.start = m_ruleBodyRange.end = 0; }
271a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        void resetPropertyMarks() { m_propertyRange.start = m_propertyRange.end = UINT_MAX; }
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int lex(void* yylval);
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int token() { return yyTok; }
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar* text(int* length);
275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        void countLines();
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int lex();
277e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
27981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        void setStyleSheet(CSSStyleSheet*);
28081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void recheckAtKeyword(const UChar* str, int len);
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void setupParser(const char* prefix, const String&, const char* suffix);
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool inShorthand() const { return m_inParseShorthand; }
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void checkForOrphanedUnits();
288e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void deleteFontFaceOnlyValues();
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
291cad810f21b803229eb11403f9209855525a25d57Steve Block        bool isGeneratedImageValue(CSSParserValue*) const;
292cad810f21b803229eb11403f9209855525a25d57Steve Block        bool parseGeneratedImage(RefPtr<CSSValue>&);
293cad810f21b803229eb11403f9209855525a25d57Steve Block
2942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important);
2952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
29621939df44de1705786c545cd1bf519d47250322dBen Murdoch        enum SizeParameterType {
29721939df44de1705786c545cd1bf519d47250322dBen Murdoch            None,
29821939df44de1705786c545cd1bf519d47250322dBen Murdoch            Auto,
29921939df44de1705786c545cd1bf519d47250322dBen Murdoch            Length,
30021939df44de1705786c545cd1bf519d47250322dBen Murdoch            PageSize,
30121939df44de1705786c545cd1bf519d47250322dBen Murdoch            Orientation,
30221939df44de1705786c545cd1bf519d47250322dBen Murdoch        };
30321939df44de1705786c545cd1bf519d47250322dBen Murdoch
30421939df44de1705786c545cd1bf519d47250322dBen Murdoch        bool parsePage(int propId, bool important);
30521939df44de1705786c545cd1bf519d47250322dBen Murdoch        bool parseSize(int propId, bool important);
30621939df44de1705786c545cd1bf519d47250322dBen Murdoch        SizeParameterType parseSizeParameter(CSSValueList* parsedValues, CSSParserValue* value, SizeParameterType prevParamType);
30721939df44de1705786c545cd1bf519d47250322dBen Murdoch
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar* m_data;
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar* yytext;
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar* yy_c_buf_p;
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar yy_hold_char;
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int yy_last_accepting_state;
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar* yy_last_accepting_cpos;
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int yyleng;
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int yyTok;
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int yy_start;
317e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        int m_lineNumber;
318e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        int m_lastSelectorLineNumber;
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool m_allowImportRules;
321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool m_allowNamespaceDeclarations;
322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Vector<RefPtr<StyleBase> > m_parsedStyleObjects;
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Vector<RefPtr<CSSRuleList> > m_parsedRuleLists;
3252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        HashSet<CSSParserSelector*> m_floatingSelectors;
3262bde8e466a4451c7319e3a072d118917957d6554Steve Block        HashSet<Vector<OwnPtr<CSSParserSelector> >*> m_floatingSelectorVectors;
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        HashSet<CSSParserValueList*> m_floatingValueLists;
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        HashSet<CSSParserFunction*> m_floatingFunctions;
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        OwnPtr<MediaQuery> m_floatingMediaQuery;
3315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        OwnPtr<MediaQueryExp> m_floatingMediaQueryExp;
3325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        OwnPtr<Vector<OwnPtr<MediaQueryExp> > > m_floatingMediaQueryExpList;
333e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
3342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        Vector<OwnPtr<CSSParserSelector> > m_reusableSelectorVector;
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // defines units allowed for a certain property, used in parseUnit
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        enum Units {
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FUnknown   = 0x0000,
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FInteger   = 0x0001,
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FNumber    = 0x0002,  // Real Numbers
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FPercent   = 0x0004,
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FLength    = 0x0008,
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FAngle     = 0x0010,
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FTime      = 0x0020,
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FFrequency = 0x0040,
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FRelative  = 0x0100,
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FNonNeg    = 0x0200
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        };
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        friend inline Units operator|(Units a, Units b)
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return static_cast<Units>(static_cast<unsigned>(a) | static_cast<unsigned>(b));
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static bool validUnit(CSSParserValue*, Units, bool strict);
356e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        friend class TransformOperationInfo;
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int cssPropertyID(const CSSParserString&);
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int cssPropertyID(const String&);
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int cssValueKeywordID(const CSSParserString&);
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
364ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    class ShorthandScope {
365ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        WTF_MAKE_FAST_ALLOCATED;
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ShorthandScope(CSSParser* parser, int propId) : m_parser(parser)
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (!(m_parser->m_inParseShorthand++))
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                m_parser->m_currentShorthand = propId;
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ~ShorthandScope()
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (!(--m_parser->m_inParseShorthand))
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                m_parser->m_currentShorthand = 0;
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CSSParser* m_parser;
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    String quoteCSSString(const String&);
383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    String quoteCSSStringIfNeeded(const String&);
384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    String quoteCSSURLIfNeeded(const String&);
385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
386cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isValidNthToken(const CSSParserString&);
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // CSSParser_h
390