1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/*
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright (C) 2009 - 2010  Torch Mobile (Beijing) Co. Ltd. All rights reserved.
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) *
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * This library is free software; you can redistribute it and/or
8d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * License as published by the Free Software Foundation; either
10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) *
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Library General Public License for more details.
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) *
17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
18d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
19d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Boston, MA 02110-1301, USA.
21d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
23d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#ifndef CSSPropertyParser_h
24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define CSSPropertyParser_h
25d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
26d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// FIXME: Way too many.
275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSPropertyNames.h"
285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSValueKeywords.h"
29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSCalculationValue.h"
30d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSFilterValue.h"
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSGradientValue.h"
32aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "core/css/CSSGridTemplateAreasValue.h"
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSProperty.h"
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSPropertySourceData.h"
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSSelector.h"
36e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/css/parser/CSSParserMode.h"
37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/css/parser/CSSParserValues.h"
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/graphics/Color.h"
39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/OwnPtr.h"
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/Vector.h"
41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSBorderImageSliceValue;
45d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSPrimitiveValue;
46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSValue;
47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSValueList;
48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSBasicShape;
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSBasicShapeInset;
50aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochclass CSSGridLineNamesValue;
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class StylePropertyShorthand;
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Inputs: PropertyID, isImportant bool, CSSParserValueList.
54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Outputs: Vector of CSSProperties
55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSPropertyParser {
57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    STACK_ALLOCATED();
58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public:
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static bool parseValue(CSSPropertyID, bool important,
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        CSSParserValueList*, const CSSParserContext&, bool inViewport,
61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        WillBeHeapVector<CSSProperty, 256>&, CSSRuleSourceData::Type);
62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // FIXME: Should this be on a separate ColorParser object?
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    template<typename StringType>
65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static bool fastParseColor(RGBA32&, const StringType&, bool strict);
66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static bool isSystemColor(int id);
68d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    CSSPropertyParser(CSSParserValueList*, const CSSParserContext&, bool inViewport,
717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        WillBeHeapVector<CSSProperty, 256>&, CSSRuleSourceData::Type);
727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    bool parseValue(CSSPropertyID, bool important);
747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool inShorthand() const { return m_inParseShorthand; }
76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool inQuirksMode() const { return isQuirksModeBehavior(m_context.mode()); }
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool inViewport() const { return m_inViewport; }
79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseViewportProperty(CSSPropertyID propId, bool important);
80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseViewportShorthand(CSSPropertyID propId, CSSPropertyID first, CSSPropertyID second, bool important);
81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    KURL completeURL(const String& url) const;
83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void addPropertyWithPrefixingVariant(CSSPropertyID, PassRefPtrWillBeRawPtr<CSSValue>, bool important, bool implicit = false);
85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void addProperty(CSSPropertyID, PassRefPtrWillBeRawPtr<CSSValue>, bool important, bool implicit = false);
86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void rollbackLastProperties(int num);
87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void addExpandedPropertyForValue(CSSPropertyID propId, PassRefPtrWillBeRawPtr<CSSValue>, bool);
88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseValidPrimitive(CSSValueID ident, CSSParserValue*);
90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseShorthand(CSSPropertyID, const StylePropertyShorthand&, bool important);
92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parse4Values(CSSPropertyID, const CSSPropertyID* properties, bool important);
93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseContent(CSSPropertyID, bool important);
947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseQuotes();
95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
96d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAttr(CSSParserValueList* args);
97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseBackgroundColor();
99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
100d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFillImage(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&);
101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum FillPositionFlag { InvalidFillPosition = 0, AmbiguousFillPosition = 1, XFillPosition = 2, YFillPosition = 4 };
103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum FillPositionParsingMode { ResolveValuesAsPercent = 0, ResolveValuesAsKeyword = 1 };
104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseFillPositionComponent(CSSParserValueList*, unsigned& cumulativeFlags, FillPositionFlag& individualFlag, FillPositionParsingMode = ResolveValuesAsPercent);
105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseFillPositionX(CSSParserValueList*);
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseFillPositionY(CSSParserValueList*);
107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void parse2ValuesFillPosition(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&);
108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool isPotentialPositionValue(CSSParserValue*);
109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void parseFillPosition(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&);
110d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void parse3ValuesFillPosition(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&, PassRefPtrWillBeRawPtr<CSSPrimitiveValue>, PassRefPtrWillBeRawPtr<CSSPrimitiveValue>);
111d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void parse4ValuesFillPosition(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&, PassRefPtrWillBeRawPtr<CSSPrimitiveValue>, PassRefPtrWillBeRawPtr<CSSPrimitiveValue>);
112d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
113d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void parseFillRepeat(RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&);
114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseFillSize(CSSPropertyID, bool &allowComma);
115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFillProperty(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&);
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFillShorthand(CSSPropertyID, const CSSPropertyID* properties, int numProperties, bool important);
118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void addFillValue(RefPtrWillBeRawPtr<CSSValue>& lval, PassRefPtrWillBeRawPtr<CSSValue> rval);
120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
121d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationDelay();
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationDirection();
123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationDuration();
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationFillMode();
125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationIterationCount();
126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationName();
127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationPlayState();
128f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationProperty();
129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationTimingFunction();
130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
131e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    bool parseWebkitTransformOriginShorthand(bool important);
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseCubicBezierTimingFunctionValue(CSSParserValueList*& args, double& result);
133f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseAnimationProperty(CSSPropertyID);
134f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValueList> parseAnimationPropertyList(CSSPropertyID);
135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseTransitionShorthand(CSSPropertyID, bool important);
136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseAnimationShorthand(CSSPropertyID, bool important);
137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseColumnWidth();
139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseColumnCount();
140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseColumnsShorthand(bool important);
141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseGridPosition();
143d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    bool parseIntegerOrCustomIdentFromGridPosition(RefPtrWillBeRawPtr<CSSPrimitiveValue>& numericValue, RefPtrWillBeRawPtr<CSSPrimitiveValue>& gridLineName);
144d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseGridItemPositionShorthand(CSSPropertyID, bool important);
145aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool parseGridTemplateRowsAndAreas(PassRefPtrWillBeRawPtr<CSSValue>, bool important);
146aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool parseGridTemplateShorthand(bool important);
147a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    bool parseGridShorthand(bool important);
148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseGridAreaShorthand(bool important);
149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseSingleGridAreaLonghand(RefPtrWillBeRawPtr<CSSValue>&);
1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseGridTrackList();
151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseGridTrackRepeatFunction(CSSValueList&);
152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseGridTrackSize(CSSParserValueList& inputList);
153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGridBreadth(CSSParserValue*);
154aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool parseGridTemplateAreasRow(NamedGridAreaMap&, const size_t, size_t&);
155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseGridTemplateAreas();
1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    bool parseGridLineNames(CSSParserValueList&, CSSValueList&, CSSGridLineNamesValue* = 0);
157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    PassRefPtrWillBeRawPtr<CSSValue> parseGridAutoFlow(CSSParserValueList&);
158d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
159d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseClipShape(CSSPropertyID, bool important);
160d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool parseLegacyPosition(CSSPropertyID, bool important);
162d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseItemPositionOverflowPosition(CSSPropertyID, bool important);
163d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
164d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseShapeProperty(CSSPropertyID propId);
165d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseBasicShapeAndOrBox();
166d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseBasicShape();
167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseShapeRadius(CSSParserValue*);
168d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSBasicShape> parseBasicShapeCircle(CSSParserValueList* args);
170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSBasicShape> parseBasicShapeEllipse(CSSParserValueList* args);
171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSBasicShape> parseBasicShapePolygon(CSSParserValueList* args);
172d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSBasicShape> parseBasicShapeInset(CSSParserValueList* args);
173d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFont(bool important);
175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValueList> parseFontFamily();
176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseCounter(int defaultValue);
178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseCounterContent(CSSParserValueList* args, bool counters);
179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseColorParameters(CSSParserValue*, int* colorValues, bool parseAlpha);
181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseHSLParameters(CSSParserValue*, double* colorValues, bool parseAlpha);
182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseColor(CSSParserValue* = 0, bool acceptQuirkyColors = false);
183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool parseColorFromValue(CSSParserValue*, RGBA32&, bool acceptQuirkyColors = false);
184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseLineHeight(bool important);
186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontSize(bool important);
187d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontVariant(bool important);
188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontWeight(bool important);
1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValueList> parseFontFaceSrc();
1907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValueList> parseFontFaceUnicodeRange();
191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseSVGValue(CSSPropertyID propId, bool important);
193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseSVGStrokeDasharray();
194d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parsePaintOrder() const;
196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // CSS3 Parsing Routines (for properties specific to CSS3)
198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValueList> parseShadow(CSSParserValueList*, CSSPropertyID);
199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageShorthand(CSSPropertyID, bool important);
200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseBorderImage(CSSPropertyID);
201d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageRepeat(RefPtrWillBeRawPtr<CSSValue>&);
202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageSlice(CSSPropertyID, RefPtrWillBeRawPtr<CSSBorderImageSliceValue>&);
203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageWidth(RefPtrWillBeRawPtr<CSSPrimitiveValue>&);
204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageOutset(RefPtrWillBeRawPtr<CSSPrimitiveValue>&);
205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderRadius(CSSPropertyID, bool important);
206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseAspectRatio();
208d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseReflect();
210d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFlex(CSSParserValueList* args, bool important);
212d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseObjectPosition();
214d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Image generators
216d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseCanvas(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&);
217d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseDeprecatedGradient(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&);
219d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseDeprecatedLinearGradient(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, CSSGradientRepeat repeating);
220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseDeprecatedRadialGradient(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, CSSGradientRepeat repeating);
221d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseLinearGradient(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, CSSGradientRepeat repeating);
222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseRadialGradient(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&, CSSGradientRepeat repeating);
223d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseGradientColorStops(CSSParserValueList*, CSSGradientValue*, bool expectComma);
224d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseCrossfade(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&);
226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseImageSet(CSSParserValueList*);
228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseWillChange();
230d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
231d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValueList> parseFilter();
232d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSFilterValue> parseBuiltinFilterArguments(CSSParserValueList*, CSSFilterValue::FilterOperationType);
233d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
234aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    PassRefPtrWillBeRawPtr<CSSValueList> parseTransformOrigin();
235aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    PassRefPtrWillBeRawPtr<CSSValueList> parseTransform(CSSPropertyID);
236aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    PassRefPtrWillBeRawPtr<CSSValue> parseTransformValue(CSSPropertyID, CSSParserValue*);
237d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
238d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseTextEmphasisStyle(bool important);
239d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
2407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<CSSValue> parseTouchAction();
241d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void addTextDecorationProperty(CSSPropertyID, PassRefPtrWillBeRawPtr<CSSValue>, bool important);
243d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseTextDecoration(CSSPropertyID propId, bool important);
244d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseTextUnderlinePosition(bool important);
245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
246d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSValue> parseTextIndent();
247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
248d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseLineBoxContain(bool important);
249d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseCalculation(CSSParserValue*, ValueRange);
250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontFeatureTag(CSSValueList*);
252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontFeatureSettings(bool important);
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontVariantLigatures(bool important);
255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseGeneratedImage(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&);
257d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
258d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createPrimitiveNumericValue(CSSParserValue*);
259d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createPrimitiveStringValue(CSSParserValue*);
260d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
261f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    PassRefPtrWillBeRawPtr<CSSValue> createCSSImageValueWithReferrer(const String& rawValue, const KURL&);
262f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
263d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool validWidthOrHeight(CSSParserValue*);
264d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
265d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSBasicShape> parseInsetRoundedCorners(PassRefPtrWillBeRawPtr<CSSBasicShapeInset>, CSSParserValueList*);
266d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
267d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum SizeParameterType {
268d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        None,
269d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        Auto,
270d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        Length,
271d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        PageSize,
272d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        Orientation,
273d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
274d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
275d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parsePage(CSSPropertyID propId, bool important);
276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseSize(CSSPropertyID propId, bool important);
277d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    SizeParameterType parseSizeParameter(CSSValueList* parsedValues, CSSParserValue*, SizeParameterType prevParamType);
278d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
279d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontFaceSrcURI(CSSValueList*);
280d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseFontFaceSrcLocal(CSSValueList*);
281d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
282d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    class ImplicitScope {
28307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        STACK_ALLOCATED();
284d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        WTF_MAKE_NONCOPYABLE(ImplicitScope);
285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    public:
2867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        ImplicitScope(CSSPropertyParser* parser)
287d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            : m_parser(parser)
288d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
2897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            m_parser->m_implicitShorthand = true;
290d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
291d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
292d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ~ImplicitScope()
293d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
294d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            m_parser->m_implicitShorthand = false;
295d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
296d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
297d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    private:
298d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        CSSPropertyParser* m_parser;
299d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
300d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
301d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    class ShorthandScope {
30207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        STACK_ALLOCATED();
303d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    public:
304d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ShorthandScope(CSSPropertyParser* parser, CSSPropertyID propId) : m_parser(parser)
305d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
306d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!(m_parser->m_inParseShorthand++))
307d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                m_parser->m_currentShorthand = propId;
308d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
309d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ~ShorthandScope()
310d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
311d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!(--m_parser->m_inParseShorthand))
312d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                m_parser->m_currentShorthand = CSSPropertyInvalid;
313d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
314d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
315d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    private:
316d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        CSSPropertyParser* m_parser;
317d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
318d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
319d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum ReleaseParsedCalcValueCondition {
320d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ReleaseParsedCalcValue,
321d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        DoNotReleaseParsedCalcValue
322d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
323d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
324d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum Units {
325d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FUnknown = 0x0000,
326d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FInteger = 0x0001,
327d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FNumber = 0x0002, // Real Numbers
328d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FPercent = 0x0004,
329d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FLength = 0x0008,
330d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FAngle = 0x0010,
331d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FTime = 0x0020,
332d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FFrequency = 0x0040,
333d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FPositiveInteger = 0x0080,
334d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FRelative = 0x0100,
335d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FResolution = 0x0200,
336d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        FNonNeg = 0x0400
337d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
338d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
339d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend inline Units operator|(Units a, Units b)
340d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
341d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return static_cast<Units>(static_cast<unsigned>(a) | static_cast<unsigned>(b));
342d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
343d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
344d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool validCalculationUnit(CSSParserValue*, Units, ReleaseParsedCalcValueCondition releaseCalc = DoNotReleaseParsedCalcValue);
345d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
346d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool shouldAcceptUnitLessValues(CSSParserValue*, Units, CSSParserMode);
347d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
348d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    inline bool validUnit(CSSParserValue* value, Units unitflags, ReleaseParsedCalcValueCondition releaseCalc = DoNotReleaseParsedCalcValue) { return validUnit(value, unitflags, m_context.mode(), releaseCalc); }
349d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool validUnit(CSSParserValue*, Units, CSSParserMode, ReleaseParsedCalcValueCondition releaseCalc = DoNotReleaseParsedCalcValue);
350d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
351d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool parseBorderImageQuad(Units, RefPtrWillBeRawPtr<CSSPrimitiveValue>&);
352d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    int colorIntFromValue(CSSParserValue*);
353d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool isCalculation(CSSParserValue*);
354d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
355d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
356d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Inputs:
3577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    CSSParserValueList* m_valueList;
358d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    const CSSParserContext& m_context;
359d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    const bool m_inViewport;
360d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
361d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Outputs:
362d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WillBeHeapVector<CSSProperty, 256>& m_parsedProperties;
363d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    CSSRuleSourceData::Type m_ruleType;
364d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
365d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Locals during parsing:
366d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    int m_inParseShorthand;
367d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    CSSPropertyID m_currentShorthand;
368d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool m_implicitShorthand;
36907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    RefPtrWillBeMember<CSSCalcValue> m_parsedCalculation;
370d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
371d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // FIXME: There is probably a small set of APIs we could expose for these
372d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // classes w/o needing to make them friends.
373d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend class ShadowParseContext;
374d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend class BorderImageParseContext;
375d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend class BorderImageSliceParseContext;
376d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend class BorderImageQuadParseContext;
377d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend class TransformOperationInfo;
378d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend bool parseDeprecatedGradientColorStop(CSSPropertyParser*, CSSParserValue*, CSSGradientColorStop&);
379d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    friend PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(CSSPropertyParser*, CSSParserValue*);
380d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)};
381d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
382d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)CSSPropertyID cssPropertyID(const CSSParserString&);
383d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)CSSPropertyID cssPropertyID(const String&);
384d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)CSSValueID cssValueKeywordID(const CSSParserString&);
385d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
386d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool isKeywordPropertyID(CSSPropertyID);
387d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool isValidKeywordPropertyAndValue(CSSPropertyID, CSSValueID, const CSSParserContext&);
388d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
389c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
390d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
391d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif // CSSPropertyParser_h
392