Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Side by Side Diff: Source/core/css/parser/BisonCSSParser-in.cpp

Issue 148523016: Move most of the [Pass]RefPtr's of CSSPrimitiveValue to our transition types. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. 9 * Copyright (C) 2012 Intel Corporation. All rights reserved.
10 * 10 *
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 return a.is8Bit() ? WTF::equalIgnoringCase(b, a.characters8(), length) : WTF ::equalIgnoringCase(b, a.characters16(), length); 127 return a.is8Bit() ? WTF::equalIgnoringCase(b, a.characters8(), length) : WTF ::equalIgnoringCase(b, a.characters16(), length);
128 } 128 }
129 129
130 template <unsigned N> 130 template <unsigned N>
131 static bool equalIgnoringCase(CSSParserValue* value, const char (&b)[N]) 131 static bool equalIgnoringCase(CSSParserValue* value, const char (&b)[N])
132 { 132 {
133 ASSERT(value->unit == CSSPrimitiveValue::CSS_IDENT || value->unit == CSSPrim itiveValue::CSS_STRING); 133 ASSERT(value->unit == CSSPrimitiveValue::CSS_IDENT || value->unit == CSSPrim itiveValue::CSS_STRING);
134 return equalIgnoringCase(value->string, b); 134 return equalIgnoringCase(value->string, b);
135 } 135 }
136 136
137 static PassRefPtr<CSSPrimitiveValue> createPrimitiveValuePair(PassRefPtr<CSSPrim itiveValue> first, PassRefPtr<CSSPrimitiveValue> second, Pair::IdenticalValuesPo licy identicalValuesPolicy = Pair::DropIdenticalValues) 137 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createPrimitiveValuePair(PassRe fPtrWillBeRawPtr<CSSPrimitiveValue> first, PassRefPtrWillBeRawPtr<CSSPrimitiveVa lue> second, Pair::IdenticalValuesPolicy identicalValuesPolicy = Pair::DropIdent icalValues)
138 { 138 {
139 return cssValuePool().createValue(Pair::create(first, second, identicalValue sPolicy)); 139 return cssValuePool().createValue(Pair::create(first, second, identicalValue sPolicy));
140 } 140 }
141 141
142 class AnimationParseContext { 142 class AnimationParseContext {
143 public: 143 public:
144 AnimationParseContext() 144 AnimationParseContext()
145 : m_animationPropertyKeywordAllowed(true) 145 : m_animationPropertyKeywordAllowed(true)
146 , m_firstAnimationCommitted(false) 146 , m_firstAnimationCommitted(false)
147 , m_hasSeenAnimationPropertyKeyword(false) 147 , m_hasSeenAnimationPropertyKeyword(false)
(...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1549 case CSSPrimitiveValue::CSS_KHZ: 1549 case CSSPrimitiveValue::CSS_KHZ:
1550 case CSSPrimitiveValue::CSS_DIMENSION: 1550 case CSSPrimitiveValue::CSS_DIMENSION:
1551 default: 1551 default:
1552 break; 1552 break;
1553 } 1553 }
1554 if (b && unitflags & FNonNeg && value->fValue < 0) 1554 if (b && unitflags & FNonNeg && value->fValue < 0)
1555 b = false; 1555 b = false;
1556 return b; 1556 return b;
1557 } 1557 }
1558 1558
1559 inline PassRefPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitiveNumericValue (CSSParserValue* value) 1559 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitive NumericValue(CSSParserValue* value)
1560 { 1560 {
1561 if (isVariableReference(value)) 1561 if (isVariableReference(value))
1562 return createPrimitiveVariableReferenceValue(value); 1562 return createPrimitiveVariableReferenceValue(value);
1563 1563
1564 if (m_parsedCalculation) { 1564 if (m_parsedCalculation) {
1565 ASSERT(isCalculation(value)); 1565 ASSERT(isCalculation(value));
1566 return CSSPrimitiveValue::create(m_parsedCalculation.release()); 1566 return CSSPrimitiveValue::create(m_parsedCalculation.release());
1567 } 1567 }
1568 1568
1569 ASSERT((value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPr imitiveValue::CSS_KHZ) 1569 ASSERT((value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPr imitiveValue::CSS_KHZ)
1570 || (value->unit >= CSSPrimitiveValue::CSS_TURN && value->unit <= CSSPrim itiveValue::CSS_CHS) 1570 || (value->unit >= CSSPrimitiveValue::CSS_TURN && value->unit <= CSSPrim itiveValue::CSS_CHS)
1571 || (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimit iveValue::CSS_VMAX) 1571 || (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimit iveValue::CSS_VMAX)
1572 || (value->unit >= CSSPrimitiveValue::CSS_DPPX && value->unit <= CSSPrim itiveValue::CSS_DPCM)); 1572 || (value->unit >= CSSPrimitiveValue::CSS_DPPX && value->unit <= CSSPrim itiveValue::CSS_DPCM));
1573 return cssValuePool().createValue(value->fValue, static_cast<CSSPrimitiveVal ue::UnitTypes>(value->unit)); 1573 return cssValuePool().createValue(value->fValue, static_cast<CSSPrimitiveVal ue::UnitTypes>(value->unit));
1574 } 1574 }
1575 1575
1576 inline PassRefPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitiveStringValue( CSSParserValue* value) 1576 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitive StringValue(CSSParserValue* value)
1577 { 1577 {
1578 ASSERT(value->unit == CSSPrimitiveValue::CSS_STRING || value->unit == CSSPri mitiveValue::CSS_IDENT); 1578 ASSERT(value->unit == CSSPrimitiveValue::CSS_STRING || value->unit == CSSPri mitiveValue::CSS_IDENT);
1579 return cssValuePool().createValue(value->string, CSSPrimitiveValue::CSS_STRI NG); 1579 return cssValuePool().createValue(value->string, CSSPrimitiveValue::CSS_STRI NG);
1580 } 1580 }
1581 1581
1582 inline PassRefPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitiveVariableRefe renceValue(CSSParserValue* value) 1582 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::createPrimitive VariableReferenceValue(CSSParserValue* value)
1583 { 1583 {
1584 ASSERT(value->unit == CSSParserValue::Function && value->function->args->siz e() == 1); 1584 ASSERT(value->unit == CSSParserValue::Function && value->function->args->siz e() == 1);
1585 return CSSPrimitiveValue::create(value->function->args->valueAt(0)->string, CSSPrimitiveValue::CSS_VARIABLE_REFERENCE); 1585 return CSSPrimitiveValue::create(value->function->args->valueAt(0)->string, CSSPrimitiveValue::CSS_VARIABLE_REFERENCE);
1586 } 1586 }
1587 1587
1588 static inline bool isComma(CSSParserValue* value) 1588 static inline bool isComma(CSSParserValue* value)
1589 { 1589 {
1590 return value && value->unit == CSSParserValue::Operator && value->iValue == ','; 1590 return value && value->unit == CSSParserValue::Operator && value->iValue == ',';
1591 } 1591 }
1592 1592
(...skipping 22 matching lines...) Expand all
1615 } 1615 }
1616 1616
1617 bool BisonCSSParser::validWidthOrHeight(CSSParserValue* value) 1617 bool BisonCSSParser::validWidthOrHeight(CSSParserValue* value)
1618 { 1618 {
1619 int id = value->id; 1619 int id = value->id;
1620 if (id == CSSValueIntrinsic || id == CSSValueMinIntrinsic || id == CSSValueW ebkitMinContent || id == CSSValueWebkitMaxContent || id == CSSValueWebkitFillAva ilable || id == CSSValueWebkitFitContent) 1620 if (id == CSSValueIntrinsic || id == CSSValueMinIntrinsic || id == CSSValueW ebkitMinContent || id == CSSValueWebkitMaxContent || id == CSSValueWebkitFillAva ilable || id == CSSValueWebkitFitContent)
1621 return true; 1621 return true;
1622 return !id && validUnit(value, FLength | FPercent | FNonNeg); 1622 return !id && validUnit(value, FLength | FPercent | FNonNeg);
1623 } 1623 }
1624 1624
1625 inline PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseValidPrimitive(CSSValu eID identifier, CSSParserValue* value) 1625 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseValidPrimi tive(CSSValueID identifier, CSSParserValue* value)
1626 { 1626 {
1627 if (identifier) 1627 if (identifier)
1628 return cssValuePool().createIdentifierValue(identifier); 1628 return cssValuePool().createIdentifierValue(identifier);
1629 if (value->unit == CSSPrimitiveValue::CSS_STRING) 1629 if (value->unit == CSSPrimitiveValue::CSS_STRING)
1630 return createPrimitiveStringValue(value); 1630 return createPrimitiveStringValue(value);
1631 if (value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPrimit iveValue::CSS_KHZ) 1631 if (value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPrimit iveValue::CSS_KHZ)
1632 return createPrimitiveNumericValue(value); 1632 return createPrimitiveNumericValue(value);
1633 if (value->unit >= CSSPrimitiveValue::CSS_TURN && value->unit <= CSSPrimitiv eValue::CSS_CHS) 1633 if (value->unit >= CSSPrimitiveValue::CSS_TURN && value->unit <= CSSPrimitiv eValue::CSS_CHS)
1634 return createPrimitiveNumericValue(value); 1634 return createPrimitiveNumericValue(value);
1635 if (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimitiveV alue::CSS_VMAX) 1635 if (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimitiveV alue::CSS_VMAX)
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 case CSSPropertyWebkitBorderImage: { 2179 case CSSPropertyWebkitBorderImage: {
2180 if (RefPtr<CSSValue> result = parseBorderImage(propId)) { 2180 if (RefPtr<CSSValue> result = parseBorderImage(propId)) {
2181 addProperty(propId, result, important); 2181 addProperty(propId, result, important);
2182 return true; 2182 return true;
2183 } 2183 }
2184 return false; 2184 return false;
2185 } 2185 }
2186 2186
2187 case CSSPropertyBorderImageOutset: 2187 case CSSPropertyBorderImageOutset:
2188 case CSSPropertyWebkitMaskBoxImageOutset: { 2188 case CSSPropertyWebkitMaskBoxImageOutset: {
2189 RefPtr<CSSPrimitiveValue> result; 2189 RefPtrWillBeRawPtr<CSSPrimitiveValue> result;
2190 if (parseBorderImageOutset(result)) { 2190 if (parseBorderImageOutset(result)) {
2191 addProperty(propId, result, important); 2191 addProperty(propId, result, important);
2192 return true; 2192 return true;
2193 } 2193 }
2194 break; 2194 break;
2195 } 2195 }
2196 case CSSPropertyBorderImageRepeat: 2196 case CSSPropertyBorderImageRepeat:
2197 case CSSPropertyWebkitMaskBoxImageRepeat: { 2197 case CSSPropertyWebkitMaskBoxImageRepeat: {
2198 RefPtr<CSSValue> result; 2198 RefPtr<CSSValue> result;
2199 if (parseBorderImageRepeat(result)) { 2199 if (parseBorderImageRepeat(result)) {
2200 addProperty(propId, result, important); 2200 addProperty(propId, result, important);
2201 return true; 2201 return true;
2202 } 2202 }
2203 break; 2203 break;
2204 } 2204 }
2205 case CSSPropertyBorderImageSlice: 2205 case CSSPropertyBorderImageSlice:
2206 case CSSPropertyWebkitMaskBoxImageSlice: { 2206 case CSSPropertyWebkitMaskBoxImageSlice: {
2207 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> result; 2207 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> result;
2208 if (parseBorderImageSlice(propId, result)) { 2208 if (parseBorderImageSlice(propId, result)) {
2209 addProperty(propId, result, important); 2209 addProperty(propId, result, important);
2210 return true; 2210 return true;
2211 } 2211 }
2212 break; 2212 break;
2213 } 2213 }
2214 case CSSPropertyBorderImageWidth: 2214 case CSSPropertyBorderImageWidth:
2215 case CSSPropertyWebkitMaskBoxImageWidth: { 2215 case CSSPropertyWebkitMaskBoxImageWidth: {
2216 RefPtr<CSSPrimitiveValue> result; 2216 RefPtrWillBeRawPtr<CSSPrimitiveValue> result;
2217 if (parseBorderImageWidth(result)) { 2217 if (parseBorderImageWidth(result)) {
2218 addProperty(propId, result, important); 2218 addProperty(propId, result, important);
2219 return true; 2219 return true;
2220 } 2220 }
2221 break; 2221 break;
2222 } 2222 }
2223 case CSSPropertyBorderTopRightRadius: 2223 case CSSPropertyBorderTopRightRadius:
2224 case CSSPropertyBorderTopLeftRadius: 2224 case CSSPropertyBorderTopLeftRadius:
2225 case CSSPropertyBorderBottomLeftRadius: 2225 case CSSPropertyBorderBottomLeftRadius:
2226 case CSSPropertyBorderBottomRightRadius: { 2226 case CSSPropertyBorderBottomRightRadius: {
2227 if (num != 1 && num != 2) 2227 if (num != 1 && num != 2)
2228 return false; 2228 return false;
2229 validPrimitive = validUnit(value, FLength | FPercent | FNonNeg); 2229 validPrimitive = validUnit(value, FLength | FPercent | FNonNeg);
2230 if (!validPrimitive) 2230 if (!validPrimitive)
2231 return false; 2231 return false;
2232 RefPtr<CSSPrimitiveValue> parsedValue1 = createPrimitiveNumericValue(val ue); 2232 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue1 = createPrimitiveNume ricValue(value);
2233 RefPtr<CSSPrimitiveValue> parsedValue2; 2233 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2;
2234 if (num == 2) { 2234 if (num == 2) {
2235 value = m_valueList->next(); 2235 value = m_valueList->next();
2236 validPrimitive = validUnit(value, FLength | FPercent | FNonNeg); 2236 validPrimitive = validUnit(value, FLength | FPercent | FNonNeg);
2237 if (!validPrimitive) 2237 if (!validPrimitive)
2238 return false; 2238 return false;
2239 parsedValue2 = createPrimitiveNumericValue(value); 2239 parsedValue2 = createPrimitiveNumericValue(value);
2240 } else 2240 } else
2241 parsedValue2 = parsedValue1; 2241 parsedValue2 = parsedValue1;
2242 2242
2243 addProperty(propId, createPrimitiveValuePair(parsedValue1.release(), par sedValue2.release()), important); 2243 addProperty(propId, createPrimitiveValuePair(parsedValue1.release(), par sedValue2.release()), important);
(...skipping 1452 matching lines...) Expand 10 before | Expand all | Expand 10 after
3696 percent = 100; 3696 percent = 100;
3697 else if (id == CSSValueCenter) 3697 else if (id == CSSValueCenter)
3698 percent = 50; 3698 percent = 50;
3699 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE); 3699 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE);
3700 } 3700 }
3701 if (validUnit(valueList->current(), FPercent | FLength)) 3701 if (validUnit(valueList->current(), FPercent | FLength))
3702 return createPrimitiveNumericValue(valueList->current()); 3702 return createPrimitiveNumericValue(valueList->current());
3703 return 0; 3703 return 0;
3704 } 3704 }
3705 3705
3706 PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseFillPositionComponent(CSSPars erValueList* valueList, unsigned& cumulativeFlags, FillPositionFlag& individualF lag, FillPositionParsingMode parsingMode) 3706 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseFillPositionCompo nent(CSSParserValueList* valueList, unsigned& cumulativeFlags, FillPositionFlag& individualFlag, FillPositionParsingMode parsingMode)
3707 { 3707 {
3708 CSSValueID id = valueList->current()->id; 3708 CSSValueID id = valueList->current()->id;
3709 if (id == CSSValueLeft || id == CSSValueTop || id == CSSValueRight || id == CSSValueBottom || id == CSSValueCenter) { 3709 if (id == CSSValueLeft || id == CSSValueTop || id == CSSValueRight || id == CSSValueBottom || id == CSSValueCenter) {
3710 int percent = 0; 3710 int percent = 0;
3711 if (id == CSSValueLeft || id == CSSValueRight) { 3711 if (id == CSSValueLeft || id == CSSValueRight) {
3712 if (cumulativeFlags & XFillPosition) 3712 if (cumulativeFlags & XFillPosition)
3713 return 0; 3713 return 0;
3714 cumulativeFlags |= XFillPosition; 3714 cumulativeFlags |= XFillPosition;
3715 individualFlag = XFillPosition; 3715 individualFlag = XFillPosition;
3716 if (id == CSSValueRight) 3716 if (id == CSSValueRight)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3761 return true; 3761 return true;
3762 3762
3763 return false; 3763 return false;
3764 } 3764 }
3765 3765
3766 static bool isFillPositionKeyword(CSSValueID value) 3766 static bool isFillPositionKeyword(CSSValueID value)
3767 { 3767 {
3768 return value == CSSValueLeft || value == CSSValueTop || value == CSSValueBot tom || value == CSSValueRight || value == CSSValueCenter; 3768 return value == CSSValueLeft || value == CSSValueTop || value == CSSValueBot tom || value == CSSValueRight || value == CSSValueCenter;
3769 } 3769 }
3770 3770
3771 void BisonCSSParser::parse4ValuesFillPosition(CSSParserValueList* valueList, Ref Ptr<CSSValue>& value1, RefPtr<CSSValue>& value2, PassRefPtr<CSSPrimitiveValue> p arsedValue1, PassRefPtr<CSSPrimitiveValue> parsedValue2) 3771 void BisonCSSParser::parse4ValuesFillPosition(CSSParserValueList* valueList, Ref Ptr<CSSValue>& value1, RefPtr<CSSValue>& value2, PassRefPtrWillBeRawPtr<CSSPrimi tiveValue> parsedValue1, PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2)
3772 { 3772 {
3773 // [ left | right ] [ <percentage] | <length> ] && [ top | bottom ] [ <perce ntage> | <length> ] 3773 // [ left | right ] [ <percentage] | <length> ] && [ top | bottom ] [ <perce ntage> | <length> ]
3774 // In the case of 4 values <position> requires the second value to be a leng th or a percentage. 3774 // In the case of 4 values <position> requires the second value to be a leng th or a percentage.
3775 if (isFillPositionKeyword(parsedValue2->getValueID())) 3775 if (isFillPositionKeyword(parsedValue2->getValueID()))
3776 return; 3776 return;
3777 3777
3778 unsigned cumulativeFlags = 0; 3778 unsigned cumulativeFlags = 0;
3779 FillPositionFlag value3Flag = InvalidFillPosition; 3779 FillPositionFlag value3Flag = InvalidFillPosition;
3780 RefPtr<CSSPrimitiveValue> value3 = parseFillPositionComponent(valueList, cum ulativeFlags, value3Flag, ResolveValuesAsKeyword); 3780 RefPtrWillBeRawPtr<CSSPrimitiveValue> value3 = parseFillPositionComponent(va lueList, cumulativeFlags, value3Flag, ResolveValuesAsKeyword);
3781 if (!value3) 3781 if (!value3)
3782 return; 3782 return;
3783 3783
3784 CSSValueID ident1 = parsedValue1->getValueID(); 3784 CSSValueID ident1 = parsedValue1->getValueID();
3785 CSSValueID ident3 = value3->getValueID(); 3785 CSSValueID ident3 = value3->getValueID();
3786 3786
3787 if (ident1 == CSSValueCenter) 3787 if (ident1 == CSSValueCenter)
3788 return; 3788 return;
3789 3789
3790 if (!isFillPositionKeyword(ident3) || ident3 == CSSValueCenter) 3790 if (!isFillPositionKeyword(ident3) || ident3 == CSSValueCenter)
3791 return; 3791 return;
3792 3792
3793 // We need to check if the values are not conflicting, e.g. they are not on the same edge. It is 3793 // We need to check if the values are not conflicting, e.g. they are not on the same edge. It is
3794 // needed as the second call to parseFillPositionComponent was on purpose no t checking it. In the 3794 // needed as the second call to parseFillPositionComponent was on purpose no t checking it. In the
3795 // case of two values top 20px is invalid but in the case of 4 values it bec omes valid. 3795 // case of two values top 20px is invalid but in the case of 4 values it bec omes valid.
3796 if (isValueConflictingWithCurrentEdge(ident1, ident3)) 3796 if (isValueConflictingWithCurrentEdge(ident1, ident3))
3797 return; 3797 return;
3798 3798
3799 valueList->next(); 3799 valueList->next();
3800 3800
3801 cumulativeFlags = 0; 3801 cumulativeFlags = 0;
3802 FillPositionFlag value4Flag = InvalidFillPosition; 3802 FillPositionFlag value4Flag = InvalidFillPosition;
3803 RefPtr<CSSPrimitiveValue> value4 = parseFillPositionComponent(valueList, cum ulativeFlags, value4Flag, ResolveValuesAsKeyword); 3803 RefPtrWillBeRawPtr<CSSPrimitiveValue> value4 = parseFillPositionComponent(va lueList, cumulativeFlags, value4Flag, ResolveValuesAsKeyword);
3804 if (!value4) 3804 if (!value4)
3805 return; 3805 return;
3806 3806
3807 // 4th value must be a length or a percentage. 3807 // 4th value must be a length or a percentage.
3808 if (isFillPositionKeyword(value4->getValueID())) 3808 if (isFillPositionKeyword(value4->getValueID()))
3809 return; 3809 return;
3810 3810
3811 value1 = createPrimitiveValuePair(parsedValue1, parsedValue2); 3811 value1 = createPrimitiveValuePair(parsedValue1, parsedValue2);
3812 value2 = createPrimitiveValuePair(value3, value4); 3812 value2 = createPrimitiveValuePair(value3, value4);
3813 3813
3814 if (ident1 == CSSValueTop || ident1 == CSSValueBottom) 3814 if (ident1 == CSSValueTop || ident1 == CSSValueBottom)
3815 value1.swap(value2); 3815 value1.swap(value2);
3816 3816
3817 valueList->next(); 3817 valueList->next();
3818 } 3818 }
3819 void BisonCSSParser::parse3ValuesFillPosition(CSSParserValueList* valueList, Ref Ptr<CSSValue>& value1, RefPtr<CSSValue>& value2, PassRefPtr<CSSPrimitiveValue> p arsedValue1, PassRefPtr<CSSPrimitiveValue> parsedValue2) 3819 void BisonCSSParser::parse3ValuesFillPosition(CSSParserValueList* valueList, Ref Ptr<CSSValue>& value1, RefPtr<CSSValue>& value2, PassRefPtrWillBeRawPtr<CSSPrimi tiveValue> parsedValue1, PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2)
3820 { 3820 {
3821 unsigned cumulativeFlags = 0; 3821 unsigned cumulativeFlags = 0;
3822 FillPositionFlag value3Flag = InvalidFillPosition; 3822 FillPositionFlag value3Flag = InvalidFillPosition;
3823 RefPtr<CSSPrimitiveValue> value3 = parseFillPositionComponent(valueList, cum ulativeFlags, value3Flag, ResolveValuesAsKeyword); 3823 RefPtrWillBeRawPtr<CSSPrimitiveValue> value3 = parseFillPositionComponent(va lueList, cumulativeFlags, value3Flag, ResolveValuesAsKeyword);
3824 3824
3825 // value3 is not an expected value, we return. 3825 // value3 is not an expected value, we return.
3826 if (!value3) 3826 if (!value3)
3827 return; 3827 return;
3828 3828
3829 valueList->next(); 3829 valueList->next();
3830 3830
3831 bool swapNeeded = false; 3831 bool swapNeeded = false;
3832 CSSValueID ident1 = parsedValue1->getValueID(); 3832 CSSValueID ident1 = parsedValue1->getValueID();
3833 CSSValueID ident2 = parsedValue2->getValueID(); 3833 CSSValueID ident2 = parsedValue2->getValueID();
(...skipping 23 matching lines...) Expand all
3857 return; 3857 return;
3858 3858
3859 secondPositionKeyword = CSSValueTop; 3859 secondPositionKeyword = CSSValueTop;
3860 if (ident1 == CSSValueTop || ident1 == CSSValueBottom) { 3860 if (ident1 == CSSValueTop || ident1 == CSSValueBottom) {
3861 secondPositionKeyword = CSSValueLeft; 3861 secondPositionKeyword = CSSValueLeft;
3862 swapNeeded = true; 3862 swapNeeded = true;
3863 } 3863 }
3864 value1 = createPrimitiveValuePair(parsedValue1, parsedValue2); 3864 value1 = createPrimitiveValuePair(parsedValue1, parsedValue2);
3865 value2 = createPrimitiveValuePair(cssValuePool().createIdentifierValue(s econdPositionKeyword), cssValuePool().createValue(50, CSSPrimitiveValue::CSS_PER CENTAGE)); 3865 value2 = createPrimitiveValuePair(cssValuePool().createIdentifierValue(s econdPositionKeyword), cssValuePool().createValue(50, CSSPrimitiveValue::CSS_PER CENTAGE));
3866 } else { 3866 } else {
3867 RefPtr<CSSPrimitiveValue> firstPositionValue; 3867 RefPtrWillBeRawPtr<CSSPrimitiveValue> firstPositionValue;
3868 RefPtr<CSSPrimitiveValue> secondPositionValue; 3868 RefPtrWillBeRawPtr<CSSPrimitiveValue> secondPositionValue;
3869 3869
3870 if (isFillPositionKeyword(ident2)) { 3870 if (isFillPositionKeyword(ident2)) {
3871 // To match CSS grammar, we should only accept: [ center | left | ri ght | bottom | top ] [ left | right | top | bottom ] [ <percentage> | <length> ] . 3871 // To match CSS grammar, we should only accept: [ center | left | ri ght | bottom | top ] [ left | right | top | bottom ] [ <percentage> | <length> ] .
3872 ASSERT(ident2 != CSSValueCenter); 3872 ASSERT(ident2 != CSSValueCenter);
3873 3873
3874 if (isFillPositionKeyword(ident3)) 3874 if (isFillPositionKeyword(ident3))
3875 return; 3875 return;
3876 3876
3877 secondPositionValue = value3; 3877 secondPositionValue = value3;
3878 secondPositionKeyword = ident2; 3878 secondPositionKeyword = ident2;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
3952 // a valid start for <position>. 3952 // a valid start for <position>.
3953 cumulativeFlags = AmbiguousFillPosition; 3953 cumulativeFlags = AmbiguousFillPosition;
3954 value2 = parseFillPositionComponent(valueList, cumulativeFlags, value2Flag, ResolveValuesAsKeyword); 3954 value2 = parseFillPositionComponent(valueList, cumulativeFlags, value2Flag, ResolveValuesAsKeyword);
3955 if (value2) 3955 if (value2)
3956 valueList->next(); 3956 valueList->next();
3957 else { 3957 else {
3958 value1.clear(); 3958 value1.clear();
3959 return; 3959 return;
3960 } 3960 }
3961 3961
3962 RefPtr<CSSPrimitiveValue> parsedValue1 = toCSSPrimitiveValue(value1.get()); 3962 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue1 = toCSSPrimitiveValue(val ue1.get());
3963 RefPtr<CSSPrimitiveValue> parsedValue2 = toCSSPrimitiveValue(value2.get()); 3963 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2 = toCSSPrimitiveValue(val ue2.get());
3964 3964
3965 value1.clear(); 3965 value1.clear();
3966 value2.clear(); 3966 value2.clear();
3967 3967
3968 // Per CSS3 syntax, <position> can't have 'center' as its second keyword as we have more arguments to follow. 3968 // Per CSS3 syntax, <position> can't have 'center' as its second keyword as we have more arguments to follow.
3969 if (parsedValue2->getValueID() == CSSValueCenter) 3969 if (parsedValue2->getValueID() == CSSValueCenter)
3970 return; 3970 return;
3971 3971
3972 if (numberOfValues == 3) 3972 if (numberOfValues == 3)
3973 parse3ValuesFillPosition(valueList, value1, value2, parsedValue1.release (), parsedValue2.release()); 3973 parse3ValuesFillPosition(valueList, value1, value2, parsedValue1.release (), parsedValue2.release());
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
4061 } 4061 }
4062 4062
4063 PassRefPtr<CSSValue> BisonCSSParser::parseFillSize(CSSPropertyID propId, bool& a llowComma) 4063 PassRefPtr<CSSValue> BisonCSSParser::parseFillSize(CSSPropertyID propId, bool& a llowComma)
4064 { 4064 {
4065 allowComma = true; 4065 allowComma = true;
4066 CSSParserValue* value = m_valueList->current(); 4066 CSSParserValue* value = m_valueList->current();
4067 4067
4068 if (value->id == CSSValueContain || value->id == CSSValueCover) 4068 if (value->id == CSSValueContain || value->id == CSSValueCover)
4069 return cssValuePool().createIdentifierValue(value->id); 4069 return cssValuePool().createIdentifierValue(value->id);
4070 4070
4071 RefPtr<CSSPrimitiveValue> parsedValue1; 4071 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue1;
4072 4072
4073 if (value->id == CSSValueAuto) 4073 if (value->id == CSSValueAuto)
4074 parsedValue1 = cssValuePool().createIdentifierValue(CSSValueAuto); 4074 parsedValue1 = cssValuePool().createIdentifierValue(CSSValueAuto);
4075 else { 4075 else {
4076 if (!validUnit(value, FLength | FPercent)) 4076 if (!validUnit(value, FLength | FPercent))
4077 return 0; 4077 return 0;
4078 parsedValue1 = createPrimitiveNumericValue(value); 4078 parsedValue1 = createPrimitiveNumericValue(value);
4079 } 4079 }
4080 4080
4081 RefPtr<CSSPrimitiveValue> parsedValue2; 4081 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2;
4082 if ((value = m_valueList->next())) { 4082 if ((value = m_valueList->next())) {
4083 if (value->unit == CSSParserValue::Operator && value->iValue == ',') 4083 if (value->unit == CSSParserValue::Operator && value->iValue == ',')
4084 allowComma = false; 4084 allowComma = false;
4085 else if (value->id != CSSValueAuto) { 4085 else if (value->id != CSSValueAuto) {
4086 if (!validUnit(value, FLength | FPercent)) { 4086 if (!validUnit(value, FLength | FPercent)) {
4087 if (!inShorthand()) 4087 if (!inShorthand())
4088 return 0; 4088 return 0;
4089 // We need to rewind the value list, so that when it is advanced we'll end up back at this value. 4089 // We need to rewind the value list, so that when it is advanced we'll end up back at this value.
4090 m_valueList->previous(); 4090 m_valueList->previous();
4091 } else 4091 } else
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
4591 return true; 4591 return true;
4592 } 4592 }
4593 if (value) { 4593 if (value) {
4594 result = value.release(); 4594 result = value.release();
4595 return true; 4595 return true;
4596 } 4596 }
4597 return false; 4597 return false;
4598 } 4598 }
4599 4599
4600 // The function parses [ <integer> || <string> ] in <grid-line> (which can be st and alone or with 'span'). 4600 // The function parses [ <integer> || <string> ] in <grid-line> (which can be st and alone or with 'span').
4601 bool BisonCSSParser::parseIntegerOrStringFromGridPosition(RefPtr<CSSPrimitiveVal ue>& numericValue, RefPtr<CSSPrimitiveValue>& gridLineName) 4601 bool BisonCSSParser::parseIntegerOrStringFromGridPosition(RefPtrWillBeRawPtr<CSS PrimitiveValue>& numericValue, RefPtrWillBeRawPtr<CSSPrimitiveValue>& gridLineNa me)
4602 { 4602 {
4603 CSSParserValue* value = m_valueList->current(); 4603 CSSParserValue* value = m_valueList->current();
4604 if (validUnit(value, FInteger) && value->fValue) { 4604 if (validUnit(value, FInteger) && value->fValue) {
4605 numericValue = createPrimitiveNumericValue(value); 4605 numericValue = createPrimitiveNumericValue(value);
4606 value = m_valueList->next(); 4606 value = m_valueList->next();
4607 if (value && value->unit == CSSPrimitiveValue::CSS_STRING) { 4607 if (value && value->unit == CSSPrimitiveValue::CSS_STRING) {
4608 gridLineName = createPrimitiveStringValue(m_valueList->current()); 4608 gridLineName = createPrimitiveStringValue(m_valueList->current());
4609 m_valueList->next(); 4609 m_valueList->next();
4610 } 4610 }
4611 return true; 4611 return true;
(...skipping 20 matching lines...) Expand all
4632 if (value->id == CSSValueAuto) { 4632 if (value->id == CSSValueAuto) {
4633 m_valueList->next(); 4633 m_valueList->next();
4634 return cssValuePool().createIdentifierValue(CSSValueAuto); 4634 return cssValuePool().createIdentifierValue(CSSValueAuto);
4635 } 4635 }
4636 4636
4637 if (value->id != CSSValueSpan && value->unit == CSSPrimitiveValue::CSS_IDENT ) { 4637 if (value->id != CSSValueSpan && value->unit == CSSPrimitiveValue::CSS_IDENT ) {
4638 m_valueList->next(); 4638 m_valueList->next();
4639 return cssValuePool().createValue(value->string, CSSPrimitiveValue::CSS_ STRING); 4639 return cssValuePool().createValue(value->string, CSSPrimitiveValue::CSS_ STRING);
4640 } 4640 }
4641 4641
4642 RefPtr<CSSPrimitiveValue> numericValue; 4642 RefPtrWillBeRawPtr<CSSPrimitiveValue> numericValue;
4643 RefPtr<CSSPrimitiveValue> gridLineName; 4643 RefPtrWillBeRawPtr<CSSPrimitiveValue> gridLineName;
4644 bool hasSeenSpanKeyword = false; 4644 bool hasSeenSpanKeyword = false;
4645 4645
4646 if (parseIntegerOrStringFromGridPosition(numericValue, gridLineName)) { 4646 if (parseIntegerOrStringFromGridPosition(numericValue, gridLineName)) {
4647 value = m_valueList->current(); 4647 value = m_valueList->current();
4648 if (value && value->id == CSSValueSpan) { 4648 if (value && value->id == CSSValueSpan) {
4649 hasSeenSpanKeyword = true; 4649 hasSeenSpanKeyword = true;
4650 m_valueList->next(); 4650 m_valueList->next();
4651 } 4651 }
4652 } else if (value->id == CSSValueSpan) { 4652 } else if (value->id == CSSValueSpan) {
4653 hasSeenSpanKeyword = true; 4653 hasSeenSpanKeyword = true;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
4778 4778
4779 CSSParserValueList* identList = parserValueList->current()->valueList; 4779 CSSParserValueList* identList = parserValueList->current()->valueList;
4780 if (!identList->size()) { 4780 if (!identList->size()) {
4781 parserValueList->next(); 4781 parserValueList->next();
4782 return; 4782 return;
4783 } 4783 }
4784 4784
4785 RefPtrWillBeRawPtr<CSSGridLineNamesValue> lineNames = CSSGridLineNamesValue: :create(); 4785 RefPtrWillBeRawPtr<CSSGridLineNamesValue> lineNames = CSSGridLineNamesValue: :create();
4786 while (CSSParserValue* identValue = identList->current()) { 4786 while (CSSParserValue* identValue = identList->current()) {
4787 ASSERT(identValue->unit == CSSPrimitiveValue::CSS_IDENT); 4787 ASSERT(identValue->unit == CSSPrimitiveValue::CSS_IDENT);
4788 RefPtr<CSSPrimitiveValue> lineName = createPrimitiveStringValue(identVal ue); 4788 RefPtrWillBeRawPtr<CSSPrimitiveValue> lineName = createPrimitiveStringVa lue(identValue);
4789 lineNames->append(lineName.release()); 4789 lineNames->append(lineName.release());
4790 identList->next(); 4790 identList->next();
4791 } 4791 }
4792 valueList.append(lineNames.release()); 4792 valueList.append(lineNames.release());
4793 4793
4794 parserValueList->next(); 4794 parserValueList->next();
4795 } 4795 }
4796 4796
4797 bool BisonCSSParser::parseGridTrackList(CSSPropertyID propId, bool important) 4797 bool BisonCSSParser::parseGridTrackList(CSSPropertyID propId, bool important)
4798 { 4798 {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4889 4889
4890 if (currentValue->id == CSSValueAuto) 4890 if (currentValue->id == CSSValueAuto)
4891 return cssValuePool().createIdentifierValue(CSSValueAuto); 4891 return cssValuePool().createIdentifierValue(CSSValueAuto);
4892 4892
4893 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(curr entValue->function->name, "minmax(")) { 4893 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(curr entValue->function->name, "minmax(")) {
4894 // The spec defines the following grammar: minmax( <track-breadth> , <tr ack-breadth> ) 4894 // The spec defines the following grammar: minmax( <track-breadth> , <tr ack-breadth> )
4895 CSSParserValueList* arguments = currentValue->function->args.get(); 4895 CSSParserValueList* arguments = currentValue->function->args.get();
4896 if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt( 1))) 4896 if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt( 1)))
4897 return 0; 4897 return 0;
4898 4898
4899 RefPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth(arguments-> valueAt(0)); 4899 RefPtrWillBeRawPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth (arguments->valueAt(0));
4900 if (!minTrackBreadth) 4900 if (!minTrackBreadth)
4901 return 0; 4901 return 0;
4902 4902
4903 RefPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth(arguments-> valueAt(2)); 4903 RefPtrWillBeRawPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth (arguments->valueAt(2));
4904 if (!maxTrackBreadth) 4904 if (!maxTrackBreadth)
4905 return 0; 4905 return 0;
4906 4906
4907 RefPtrWillBeRawPtr<CSSValueList> parsedArguments = CSSValueList::createC ommaSeparated(); 4907 RefPtrWillBeRawPtr<CSSValueList> parsedArguments = CSSValueList::createC ommaSeparated();
4908 parsedArguments->append(minTrackBreadth); 4908 parsedArguments->append(minTrackBreadth);
4909 parsedArguments->append(maxTrackBreadth); 4909 parsedArguments->append(maxTrackBreadth);
4910 return CSSFunctionValue::create("minmax(", parsedArguments); 4910 return CSSFunctionValue::create("minmax(", parsedArguments);
4911 } 4911 }
4912 4912
4913 return parseGridBreadth(currentValue); 4913 return parseGridBreadth(currentValue);
4914 } 4914 }
4915 4915
4916 PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseGridBreadth(CSSParserValue* c urrentValue) 4916 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseGridBreadth(CSSPa rserValue* currentValue)
4917 { 4917 {
4918 if (currentValue->id == CSSValueMinContent || currentValue->id == CSSValueMa xContent) 4918 if (currentValue->id == CSSValueMinContent || currentValue->id == CSSValueMa xContent)
4919 return cssValuePool().createIdentifierValue(currentValue->id); 4919 return cssValuePool().createIdentifierValue(currentValue->id);
4920 4920
4921 if (currentValue->unit == CSSPrimitiveValue::CSS_FR) { 4921 if (currentValue->unit == CSSPrimitiveValue::CSS_FR) {
4922 double flexValue = currentValue->fValue; 4922 double flexValue = currentValue->fValue;
4923 4923
4924 // Fractional unit is a non-negative dimension. 4924 // Fractional unit is a non-negative dimension.
4925 if (flexValue <= 0) 4925 if (flexValue <= 0)
4926 return 0; 4926 return 0;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
5011 { 5011 {
5012 unsigned numArgs = args->size(); 5012 unsigned numArgs = args->size();
5013 if (counters && numArgs != 3 && numArgs != 5) 5013 if (counters && numArgs != 3 && numArgs != 5)
5014 return 0; 5014 return 0;
5015 if (!counters && numArgs != 1 && numArgs != 3) 5015 if (!counters && numArgs != 1 && numArgs != 3)
5016 return 0; 5016 return 0;
5017 5017
5018 CSSParserValue* i = args->current(); 5018 CSSParserValue* i = args->current();
5019 if (i->unit != CSSPrimitiveValue::CSS_IDENT) 5019 if (i->unit != CSSPrimitiveValue::CSS_IDENT)
5020 return 0; 5020 return 0;
5021 RefPtr<CSSPrimitiveValue> identifier = createPrimitiveStringValue(i); 5021 RefPtrWillBeRawPtr<CSSPrimitiveValue> identifier = createPrimitiveStringValu e(i);
5022 5022
5023 RefPtr<CSSPrimitiveValue> separator; 5023 RefPtrWillBeRawPtr<CSSPrimitiveValue> separator;
5024 if (!counters) 5024 if (!counters)
5025 separator = cssValuePool().createValue(String(), CSSPrimitiveValue::CSS_ STRING); 5025 separator = cssValuePool().createValue(String(), CSSPrimitiveValue::CSS_ STRING);
5026 else { 5026 else {
5027 i = args->next(); 5027 i = args->next();
5028 if (i->unit != CSSParserValue::Operator || i->iValue != ',') 5028 if (i->unit != CSSParserValue::Operator || i->iValue != ',')
5029 return 0; 5029 return 0;
5030 5030
5031 i = args->next(); 5031 i = args->next();
5032 if (i->unit != CSSPrimitiveValue::CSS_STRING) 5032 if (i->unit != CSSPrimitiveValue::CSS_STRING)
5033 return 0; 5033 return 0;
5034 5034
5035 separator = createPrimitiveStringValue(i); 5035 separator = createPrimitiveStringValue(i);
5036 } 5036 }
5037 5037
5038 RefPtr<CSSPrimitiveValue> listStyle; 5038 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle;
5039 i = args->next(); 5039 i = args->next();
5040 if (!i) // Make the list style default decimal 5040 if (!i) // Make the list style default decimal
5041 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal); 5041 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal);
5042 else { 5042 else {
5043 if (i->unit != CSSParserValue::Operator || i->iValue != ',') 5043 if (i->unit != CSSParserValue::Operator || i->iValue != ',')
5044 return 0; 5044 return 0;
5045 5045
5046 i = args->next(); 5046 i = args->next();
5047 if (i->unit != CSSPrimitiveValue::CSS_IDENT) 5047 if (i->unit != CSSPrimitiveValue::CSS_IDENT)
5048 return 0; 5048 return 0;
(...skipping 22 matching lines...) Expand all
5071 if (args->size() != 4 && args->size() != 7) 5071 if (args->size() != 4 && args->size() != 7)
5072 return false; 5072 return false;
5073 RefPtr<Rect> rect = Rect::create(); 5073 RefPtr<Rect> rect = Rect::create();
5074 bool valid = true; 5074 bool valid = true;
5075 int i = 0; 5075 int i = 0;
5076 CSSParserValue* a = args->current(); 5076 CSSParserValue* a = args->current();
5077 while (a) { 5077 while (a) {
5078 valid = a->id == CSSValueAuto || validUnit(a, FLength); 5078 valid = a->id == CSSValueAuto || validUnit(a, FLength);
5079 if (!valid) 5079 if (!valid)
5080 break; 5080 break;
5081 RefPtr<CSSPrimitiveValue> length = a->id == CSSValueAuto ? 5081 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = a->id == CSSValueAuto ?
5082 cssValuePool().createIdentifierValue(CSSValueAuto) : 5082 cssValuePool().createIdentifierValue(CSSValueAuto) :
5083 createPrimitiveNumericValue(a); 5083 createPrimitiveNumericValue(a);
5084 if (i == 0) 5084 if (i == 0)
5085 rect->setTop(length); 5085 rect->setTop(length);
5086 else if (i == 1) 5086 else if (i == 1)
5087 rect->setRight(length); 5087 rect->setRight(length);
5088 else if (i == 2) 5088 else if (i == 2)
5089 rect->setBottom(length); 5089 rect->setBottom(length);
5090 else 5090 else
5091 rect->setLeft(length); 5091 rect->setLeft(length);
5092 a = args->next(); 5092 a = args->next();
5093 if (a && args->size() == 7) { 5093 if (a && args->size() == 7) {
5094 if (a->unit == CSSParserValue::Operator && a->iValue == ',') { 5094 if (a->unit == CSSParserValue::Operator && a->iValue == ',') {
5095 a = args->next(); 5095 a = args->next();
5096 } else { 5096 } else {
5097 valid = false; 5097 valid = false;
5098 break; 5098 break;
5099 } 5099 }
5100 } 5100 }
5101 i++; 5101 i++;
5102 } 5102 }
5103 if (valid) { 5103 if (valid) {
5104 addProperty(propId, cssValuePool().createValue(rect.release()), importan t); 5104 addProperty(propId, cssValuePool().createValue(rect.release()), importan t);
5105 m_valueList->next(); 5105 m_valueList->next();
5106 return true; 5106 return true;
5107 } 5107 }
5108 return false; 5108 return false;
5109 } 5109 }
5110 5110
5111 static void completeBorderRadii(RefPtr<CSSPrimitiveValue> radii[4]) 5111 static void completeBorderRadii(RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[4])
5112 { 5112 {
5113 if (radii[3]) 5113 if (radii[3])
5114 return; 5114 return;
5115 if (!radii[2]) { 5115 if (!radii[2]) {
5116 if (!radii[1]) 5116 if (!radii[1])
5117 radii[1] = radii[0]; 5117 radii[1] = radii[0];
5118 radii[2] = radii[0]; 5118 radii[2] = radii[0];
5119 } 5119 }
5120 radii[3] = radii[1]; 5120 radii[3] = radii[1];
5121 } 5121 }
(...skipping 11 matching lines...) Expand all
5133 while (argument) { 5133 while (argument) {
5134 radiusArguments.addValue(*argument); 5134 radiusArguments.addValue(*argument);
5135 argument = args->next(); 5135 argument = args->next();
5136 } 5136 }
5137 5137
5138 unsigned num = radiusArguments.size(); 5138 unsigned num = radiusArguments.size();
5139 if (!num || num > 9) 5139 if (!num || num > 9)
5140 return 0; 5140 return 0;
5141 5141
5142 // FIXME: Refactor completeBorderRadii and the array 5142 // FIXME: Refactor completeBorderRadii and the array
5143 RefPtr<CSSPrimitiveValue> radii[2][4]; 5143 RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[2][4];
5144 5144
5145 unsigned indexAfterSlash = 0; 5145 unsigned indexAfterSlash = 0;
5146 for (unsigned i = 0; i < num; ++i) { 5146 for (unsigned i = 0; i < num; ++i) {
5147 CSSParserValue* value = radiusArguments.valueAt(i); 5147 CSSParserValue* value = radiusArguments.valueAt(i);
5148 if (value->unit == CSSParserValue::Operator) { 5148 if (value->unit == CSSParserValue::Operator) {
5149 if (value->iValue != '/') 5149 if (value->iValue != '/')
5150 return 0; 5150 return 0;
5151 5151
5152 if (!i || indexAfterSlash || i + 1 == num) 5152 if (!i || indexAfterSlash || i + 1 == num)
5153 return 0; 5153 return 0;
5154 5154
5155 indexAfterSlash = i + 1; 5155 indexAfterSlash = i + 1;
5156 completeBorderRadii(radii[0]); 5156 completeBorderRadii(radii[0]);
5157 continue; 5157 continue;
5158 } 5158 }
5159 5159
5160 if (i - indexAfterSlash >= 4) 5160 if (i - indexAfterSlash >= 4)
5161 return 0; 5161 return 0;
5162 5162
5163 if (!validUnit(value, FLength | FPercent | FNonNeg)) 5163 if (!validUnit(value, FLength | FPercent | FNonNeg))
5164 return 0; 5164 return 0;
5165 5165
5166 RefPtr<CSSPrimitiveValue> radius = createPrimitiveNumericValue(value); 5166 RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = createPrimitiveNumericVal ue(value);
5167 5167
5168 if (!indexAfterSlash) 5168 if (!indexAfterSlash)
5169 radii[0][i] = radius; 5169 radii[0][i] = radius;
5170 else 5170 else
5171 radii[1][i - indexAfterSlash] = radius.release(); 5171 radii[1][i - indexAfterSlash] = radius.release();
5172 } 5172 }
5173 5173
5174 if (!indexAfterSlash) { 5174 if (!indexAfterSlash) {
5175 completeBorderRadii(radii[0]); 5175 completeBorderRadii(radii[0]);
5176 for (unsigned i = 0; i < 4; ++i) 5176 for (unsigned i = 0; i < 4; ++i)
5177 radii[1][i] = radii[0][i]; 5177 radii[1][i] = radii[0][i];
5178 } else { 5178 } else {
5179 completeBorderRadii(radii[1]); 5179 completeBorderRadii(radii[1]);
5180 } 5180 }
5181 shape->setTopLeftRadius(createPrimitiveValuePair(radii[0][0].release(), radi i[1][0].release())); 5181 shape->setTopLeftRadius(createPrimitiveValuePair(radii[0][0].release(), radi i[1][0].release()));
5182 shape->setTopRightRadius(createPrimitiveValuePair(radii[0][1].release(), rad ii[1][1].release())); 5182 shape->setTopRightRadius(createPrimitiveValuePair(radii[0][1].release(), rad ii[1][1].release()));
5183 shape->setBottomRightRadius(createPrimitiveValuePair(radii[0][2].release(), radii[1][2].release())); 5183 shape->setBottomRightRadius(createPrimitiveValuePair(radii[0][2].release(), radii[1][2].release()));
5184 shape->setBottomLeftRadius(createPrimitiveValuePair(radii[0][3].release(), r adii[1][3].release())); 5184 shape->setBottomLeftRadius(createPrimitiveValuePair(radii[0][3].release(), r adii[1][3].release()));
5185 5185
5186 return shape; 5186 return shape;
5187 } 5187 }
5188 5188
5189 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeInset(CSSParserValueLis t* args) 5189 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeInset(CSSParserValueLis t* args)
5190 { 5190 {
5191 ASSERT(args); 5191 ASSERT(args);
5192 5192
5193 RefPtr<CSSBasicShapeInset> shape = CSSBasicShapeInset::create(); 5193 RefPtr<CSSBasicShapeInset> shape = CSSBasicShapeInset::create();
5194 5194
5195 CSSParserValue* argument = args->current(); 5195 CSSParserValue* argument = args->current();
5196 Vector<RefPtr<CSSPrimitiveValue> > widthArguments; 5196 WillBeHeapVector<RefPtrWillBeMember<CSSPrimitiveValue> > widthArguments;
5197 bool hasRoundedInset = false; 5197 bool hasRoundedInset = false;
5198 5198
5199 while (argument) { 5199 while (argument) {
5200 if (argument->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase( argument->string, "round")) { 5200 if (argument->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase( argument->string, "round")) {
5201 hasRoundedInset = true; 5201 hasRoundedInset = true;
5202 break; 5202 break;
5203 } 5203 }
5204 5204
5205 Units unitFlags = FLength | FPercent; 5205 Units unitFlags = FLength | FPercent;
5206 if (!validUnit(argument, unitFlags) || widthArguments.size() > 4) 5206 if (!validUnit(argument, unitFlags) || widthArguments.size() > 4)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
5252 CSSParserValue* value = m_valueList->current(); 5252 CSSParserValue* value = m_valueList->current();
5253 5253
5254 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id == CSSValueStretch) { 5254 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id == CSSValueStretch) {
5255 if (m_valueList->next()) 5255 if (m_valueList->next())
5256 return false; 5256 return false;
5257 5257
5258 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant); 5258 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant);
5259 return true; 5259 return true;
5260 } 5260 }
5261 5261
5262 RefPtr<CSSPrimitiveValue> position = 0; 5262 RefPtrWillBeRawPtr<CSSPrimitiveValue> position = 0;
5263 RefPtr<CSSPrimitiveValue> overflowAlignmentKeyword = 0; 5263 RefPtrWillBeRawPtr<CSSPrimitiveValue> overflowAlignmentKeyword = 0;
5264 if (isItemPositionKeyword(value->id)) { 5264 if (isItemPositionKeyword(value->id)) {
5265 position = cssValuePool().createIdentifierValue(value->id); 5265 position = cssValuePool().createIdentifierValue(value->id);
5266 value = m_valueList->next(); 5266 value = m_valueList->next();
5267 if (value) { 5267 if (value) {
5268 if (value->id == CSSValueTrue || value->id == CSSValueSafe) 5268 if (value->id == CSSValueTrue || value->id == CSSValueSafe)
5269 overflowAlignmentKeyword = cssValuePool().createIdentifierValue( value->id); 5269 overflowAlignmentKeyword = cssValuePool().createIdentifierValue( value->id);
5270 else 5270 else
5271 return false; 5271 return false;
5272 } 5272 }
5273 } else if (value->id == CSSValueTrue || value->id == CSSValueSafe) { 5273 } else if (value->id == CSSValueTrue || value->id == CSSValueSafe) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5309 CSSParserValue* argument = args->current(); 5309 CSSParserValue* argument = args->current();
5310 while (argument) { 5310 while (argument) {
5311 Units unitFlags = FLength | FPercent; 5311 Units unitFlags = FLength | FPercent;
5312 if (argumentNumber > 1) { 5312 if (argumentNumber > 1) {
5313 // Arguments width, height, rx, and ry cannot be negative. 5313 // Arguments width, height, rx, and ry cannot be negative.
5314 unitFlags = unitFlags | FNonNeg; 5314 unitFlags = unitFlags | FNonNeg;
5315 } 5315 }
5316 if (!validUnit(argument, unitFlags)) 5316 if (!validUnit(argument, unitFlags))
5317 return 0; 5317 return 0;
5318 5318
5319 RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument) ; 5319 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5320 ASSERT(argumentNumber < 6); 5320 ASSERT(argumentNumber < 6);
5321 switch (argumentNumber) { 5321 switch (argumentNumber) {
5322 case 0: 5322 case 0:
5323 shape->setX(length); 5323 shape->setX(length);
5324 break; 5324 break;
5325 case 1: 5325 case 1:
5326 shape->setY(length); 5326 shape->setY(length);
5327 break; 5327 break;
5328 case 2: 5328 case 2:
5329 shape->setWidth(length); 5329 shape->setWidth(length);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
5363 5363
5364 RefPtr<CSSBasicShapeInsetRectangle> shape = CSSBasicShapeInsetRectangle::cre ate(); 5364 RefPtr<CSSBasicShapeInsetRectangle> shape = CSSBasicShapeInsetRectangle::cre ate();
5365 5365
5366 unsigned argumentNumber = 0; 5366 unsigned argumentNumber = 0;
5367 CSSParserValue* argument = args->current(); 5367 CSSParserValue* argument = args->current();
5368 while (argument) { 5368 while (argument) {
5369 Units unitFlags = FLength | FPercent | FNonNeg; 5369 Units unitFlags = FLength | FPercent | FNonNeg;
5370 if (!validUnit(argument, unitFlags)) 5370 if (!validUnit(argument, unitFlags))
5371 return 0; 5371 return 0;
5372 5372
5373 RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument) ; 5373 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5374 ASSERT(argumentNumber < 6); 5374 ASSERT(argumentNumber < 6);
5375 switch (argumentNumber) { 5375 switch (argumentNumber) {
5376 case 0: 5376 case 0:
5377 shape->setTop(length); 5377 shape->setTop(length);
5378 break; 5378 break;
5379 case 1: 5379 case 1:
5380 shape->setRight(length); 5380 shape->setRight(length);
5381 break; 5381 break;
5382 case 2: 5382 case 2:
5383 shape->setBottom(length); 5383 shape->setBottom(length);
(...skipping 16 matching lines...) Expand all
5400 argument = args->next(); 5400 argument = args->next();
5401 } 5401 }
5402 argumentNumber++; 5402 argumentNumber++;
5403 } 5403 }
5404 5404
5405 if (argumentNumber < 4) 5405 if (argumentNumber < 4)
5406 return 0; 5406 return 0;
5407 return shape; 5407 return shape;
5408 } 5408 }
5409 5409
5410 PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseShapeRadius(CSSParserValue* v alue) 5410 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseShapeRadius(CSSPa rserValue* value)
5411 { 5411 {
5412 if (value->id == CSSValueClosestSide || value->id == CSSValueFarthestSide) 5412 if (value->id == CSSValueClosestSide || value->id == CSSValueFarthestSide)
5413 return cssValuePool().createIdentifierValue(value->id); 5413 return cssValuePool().createIdentifierValue(value->id);
5414 5414
5415 if (!validUnit(value, FLength | FPercent | FNonNeg)) 5415 if (!validUnit(value, FLength | FPercent | FNonNeg))
5416 return 0; 5416 return 0;
5417 5417
5418 return createPrimitiveNumericValue(value); 5418 return createPrimitiveNumericValue(value);
5419 } 5419 }
5420 5420
5421 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeCircle(CSSParserValueLi st* args) 5421 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeCircle(CSSParserValueLi st* args)
5422 { 5422 {
5423 ASSERT(args); 5423 ASSERT(args);
5424 5424
5425 // circle(radius) 5425 // circle(radius)
5426 // circle(radius at <position> 5426 // circle(radius at <position>
5427 // circle(at <position>) 5427 // circle(at <position>)
5428 // where position defines centerX and centerY using a CSS <position> data ty pe. 5428 // where position defines centerX and centerY using a CSS <position> data ty pe.
5429 RefPtr<CSSBasicShapeCircle> shape = CSSBasicShapeCircle::create(); 5429 RefPtr<CSSBasicShapeCircle> shape = CSSBasicShapeCircle::create();
5430 5430
5431 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) { 5431 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) {
5432 // The call to parseFillPosition below should consume all of the 5432 // The call to parseFillPosition below should consume all of the
5433 // arguments except the first two. Thus, and index greater than one 5433 // arguments except the first two. Thus, and index greater than one
5434 // indicates an invalid production. 5434 // indicates an invalid production.
5435 if (args->currentIndex() > 1) 5435 if (args->currentIndex() > 1)
5436 return 0; 5436 return 0;
5437 5437
5438 if (!args->currentIndex() && argument->id != CSSValueAt) { 5438 if (!args->currentIndex() && argument->id != CSSValueAt) {
5439 if (RefPtr<CSSPrimitiveValue> radius = parseShapeRadius(argument)) { 5439 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) {
5440 shape->setRadius(radius); 5440 shape->setRadius(radius);
5441 continue; 5441 continue;
5442 } 5442 }
5443 5443
5444 return 0; 5444 return 0;
5445 } 5445 }
5446 5446
5447 if (argument->id == CSSValueAt) { 5447 if (argument->id == CSSValueAt) {
5448 RefPtr<CSSValue> centerX; 5448 RefPtr<CSSValue> centerX;
5449 RefPtr<CSSValue> centerY; 5449 RefPtr<CSSValue> centerY;
(...skipping 30 matching lines...) Expand all
5480 while (argument) { 5480 while (argument) {
5481 Units unitFlags = FLength | FPercent; 5481 Units unitFlags = FLength | FPercent;
5482 if (argumentNumber == 2) { 5482 if (argumentNumber == 2) {
5483 // Argument radius cannot be negative. 5483 // Argument radius cannot be negative.
5484 unitFlags = unitFlags | FNonNeg; 5484 unitFlags = unitFlags | FNonNeg;
5485 } 5485 }
5486 5486
5487 if (!validUnit(argument, unitFlags)) 5487 if (!validUnit(argument, unitFlags))
5488 return 0; 5488 return 0;
5489 5489
5490 RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument) ; 5490 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5491 ASSERT(argumentNumber < 3); 5491 ASSERT(argumentNumber < 3);
5492 switch (argumentNumber) { 5492 switch (argumentNumber) {
5493 case 0: 5493 case 0:
5494 shape->setCenterX(length); 5494 shape->setCenterX(length);
5495 break; 5495 break;
5496 case 1: 5496 case 1:
5497 shape->setCenterY(length); 5497 shape->setCenterY(length);
5498 break; 5498 break;
5499 case 2: 5499 case 2:
5500 shape->setRadius(length); 5500 shape->setRadius(length);
(...skipping 27 matching lines...) Expand all
5528 RefPtr<CSSBasicShapeEllipse> shape = CSSBasicShapeEllipse::create(); 5528 RefPtr<CSSBasicShapeEllipse> shape = CSSBasicShapeEllipse::create();
5529 5529
5530 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) { 5530 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) {
5531 // The call to parseFillPosition below should consume all of the 5531 // The call to parseFillPosition below should consume all of the
5532 // arguments except the first three. Thus, an index greater than two 5532 // arguments except the first three. Thus, an index greater than two
5533 // indicates an invalid production. 5533 // indicates an invalid production.
5534 if (args->currentIndex() > 2) 5534 if (args->currentIndex() > 2)
5535 return 0; 5535 return 0;
5536 5536
5537 if (args->currentIndex() < 2 && argument->id != CSSValueAt) { 5537 if (args->currentIndex() < 2 && argument->id != CSSValueAt) {
5538 if (RefPtr<CSSPrimitiveValue> radius = parseShapeRadius(argument)) { 5538 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) {
5539 if (!shape->radiusX()) 5539 if (!shape->radiusX())
5540 shape->setRadiusX(radius); 5540 shape->setRadiusX(radius);
5541 else 5541 else
5542 shape->setRadiusY(radius); 5542 shape->setRadiusY(radius);
5543 continue; 5543 continue;
5544 } 5544 }
5545 5545
5546 return 0; 5546 return 0;
5547 } 5547 }
5548 5548
(...skipping 28 matching lines...) Expand all
5577 CSSParserValue* argument = args->current(); 5577 CSSParserValue* argument = args->current();
5578 while (argument) { 5578 while (argument) {
5579 Units unitFlags = FLength | FPercent; 5579 Units unitFlags = FLength | FPercent;
5580 if (argumentNumber > 1) { 5580 if (argumentNumber > 1) {
5581 // Arguments radiusX and radiusY cannot be negative. 5581 // Arguments radiusX and radiusY cannot be negative.
5582 unitFlags = unitFlags | FNonNeg; 5582 unitFlags = unitFlags | FNonNeg;
5583 } 5583 }
5584 if (!validUnit(argument, unitFlags)) 5584 if (!validUnit(argument, unitFlags))
5585 return 0; 5585 return 0;
5586 5586
5587 RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument) ; 5587 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5588 ASSERT(argumentNumber < 4); 5588 ASSERT(argumentNumber < 4);
5589 switch (argumentNumber) { 5589 switch (argumentNumber) {
5590 case 0: 5590 case 0:
5591 shape->setCenterX(length); 5591 shape->setCenterX(length);
5592 break; 5592 break;
5593 case 1: 5593 case 1:
5594 shape->setCenterY(length); 5594 shape->setCenterY(length);
5595 break; 5595 break;
5596 case 2: 5596 case 2:
5597 shape->setRadiusX(length); 5597 shape->setRadiusX(length);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
5642 5642
5643 CSSParserValue* argumentX = argument; 5643 CSSParserValue* argumentX = argument;
5644 while (argumentX) { 5644 while (argumentX) {
5645 if (!validUnit(argumentX, FLength | FPercent)) 5645 if (!validUnit(argumentX, FLength | FPercent))
5646 return 0; 5646 return 0;
5647 5647
5648 CSSParserValue* argumentY = args->next(); 5648 CSSParserValue* argumentY = args->next();
5649 if (!argumentY || !validUnit(argumentY, FLength | FPercent)) 5649 if (!argumentY || !validUnit(argumentY, FLength | FPercent))
5650 return 0; 5650 return 0;
5651 5651
5652 RefPtr<CSSPrimitiveValue> xLength = createPrimitiveNumericValue(argument X); 5652 RefPtrWillBeRawPtr<CSSPrimitiveValue> xLength = createPrimitiveNumericVa lue(argumentX);
5653 RefPtr<CSSPrimitiveValue> yLength = createPrimitiveNumericValue(argument Y); 5653 RefPtrWillBeRawPtr<CSSPrimitiveValue> yLength = createPrimitiveNumericVa lue(argumentY);
5654 5654
5655 shape->appendPoint(xLength.release(), yLength.release()); 5655 shape->appendPoint(xLength.release(), yLength.release());
5656 5656
5657 CSSParserValue* commaOrNull = args->next(); 5657 CSSParserValue* commaOrNull = args->next();
5658 if (!commaOrNull) 5658 if (!commaOrNull)
5659 argumentX = 0; 5659 argumentX = 0;
5660 else if (!isComma(commaOrNull)) 5660 else if (!isComma(commaOrNull))
5661 return 0; 5661 return 0;
5662 else 5662 else
5663 argumentX = args->next(); 5663 argumentX = args->next();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
5695 return false; 5695 return false;
5696 } 5696 }
5697 5697
5698 PassRefPtr<CSSValue> BisonCSSParser::parseShapeProperty(CSSPropertyID propId) 5698 PassRefPtr<CSSValue> BisonCSSParser::parseShapeProperty(CSSPropertyID propId)
5699 { 5699 {
5700 if (!RuntimeEnabledFeatures::cssShapesEnabled()) 5700 if (!RuntimeEnabledFeatures::cssShapesEnabled())
5701 return 0; 5701 return 0;
5702 5702
5703 CSSParserValue* value = m_valueList->current(); 5703 CSSParserValue* value = m_valueList->current();
5704 CSSValueID valueId = value->id; 5704 CSSValueID valueId = value->id;
5705 RefPtr<CSSPrimitiveValue> boxValue; 5705 RefPtrWillBeRawPtr<CSSPrimitiveValue> boxValue;
5706 RefPtr<CSSPrimitiveValue> shapeValue; 5706 RefPtrWillBeRawPtr<CSSPrimitiveValue> shapeValue;
5707 5707
5708 if (valueId == CSSValueNone 5708 if (valueId == CSSValueNone
5709 || (valueId == CSSValueOutsideShape && propId == CSSPropertyShapeInside) ) { 5709 || (valueId == CSSValueOutsideShape && propId == CSSPropertyShapeInside) ) {
5710 RefPtr<CSSPrimitiveValue> keywordValue = parseValidPrimitive(valueId, va lue); 5710 RefPtrWillBeRawPtr<CSSPrimitiveValue> keywordValue = parseValidPrimitive (valueId, value);
5711 m_valueList->next(); 5711 m_valueList->next();
5712 return keywordValue.release(); 5712 return keywordValue.release();
5713 } 5713 }
5714 5714
5715 RefPtr<CSSValue> imageValue; 5715 RefPtr<CSSValue> imageValue;
5716 if (valueId != CSSValueNone && parseFillImage(m_valueList.get(), imageValue) ) { 5716 if (valueId != CSSValueNone && parseFillImage(m_valueList.get(), imageValue) ) {
5717 m_valueList->next(); 5717 m_valueList->next();
5718 return imageValue.release(); 5718 return imageValue.release();
5719 } 5719 }
5720 5720
(...skipping 26 matching lines...) Expand all
5747 5747
5748 ASSERT(shapeValue && boxValue); 5748 ASSERT(shapeValue && boxValue);
5749 shapeValue->getShapeValue()->setLayoutBox(boxValue.release()); 5749 shapeValue->getShapeValue()->setLayoutBox(boxValue.release());
5750 } 5750 }
5751 5751
5752 if (shapeValue) 5752 if (shapeValue)
5753 return shapeValue.release(); 5753 return shapeValue.release();
5754 return boxValue.release(); 5754 return boxValue.release();
5755 } 5755 }
5756 5756
5757 PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseBasicShape() 5757 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseBasicShape()
5758 { 5758 {
5759 CSSParserValue* value = m_valueList->current(); 5759 CSSParserValue* value = m_valueList->current();
5760 ASSERT(value->unit == CSSParserValue::Function); 5760 ASSERT(value->unit == CSSParserValue::Function);
5761 CSSParserValueList* args = value->function->args.get(); 5761 CSSParserValueList* args = value->function->args.get();
5762 5762
5763 if (!args) 5763 if (!args)
5764 return 0; 5764 return 0;
5765 5765
5766 RefPtr<CSSBasicShape> shape; 5766 RefPtr<CSSBasicShape> shape;
5767 if (equalIgnoringCase(value->function->name, "rectangle(")) 5767 if (equalIgnoringCase(value->function->name, "rectangle("))
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
6003 } 6003 }
6004 6004
6005 bool BisonCSSParser::parseFontVariant(bool important) 6005 bool BisonCSSParser::parseFontVariant(bool important)
6006 { 6006 {
6007 RefPtrWillBeRawPtr<CSSValueList> values; 6007 RefPtrWillBeRawPtr<CSSValueList> values;
6008 if (m_valueList->size() > 1) 6008 if (m_valueList->size() > 1)
6009 values = CSSValueList::createCommaSeparated(); 6009 values = CSSValueList::createCommaSeparated();
6010 CSSParserValue* val; 6010 CSSParserValue* val;
6011 bool expectComma = false; 6011 bool expectComma = false;
6012 while ((val = m_valueList->current())) { 6012 while ((val = m_valueList->current())) {
6013 RefPtr<CSSPrimitiveValue> parsedValue; 6013 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue;
6014 if (!expectComma) { 6014 if (!expectComma) {
6015 expectComma = true; 6015 expectComma = true;
6016 if (val->id == CSSValueNormal || val->id == CSSValueSmallCaps) 6016 if (val->id == CSSValueNormal || val->id == CSSValueSmallCaps)
6017 parsedValue = cssValuePool().createIdentifierValue(val->id); 6017 parsedValue = cssValuePool().createIdentifierValue(val->id);
6018 else if (val->id == CSSValueAll && !values) { 6018 else if (val->id == CSSValueAll && !values) {
6019 // 'all' is only allowed in @font-face and with no other values. Make a value list to 6019 // 'all' is only allowed in @font-face and with no other values. Make a value list to
6020 // indicate that we are in the @font-face case. 6020 // indicate that we are in the @font-face case.
6021 values = CSSValueList::createCommaSeparated(); 6021 values = CSSValueList::createCommaSeparated();
6022 parsedValue = cssValuePool().createIdentifierValue(val->id); 6022 parsedValue = cssValuePool().createIdentifierValue(val->id);
6023 } 6023 }
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
6659 if (v->unit != CSSParserValue::Operator && v->iValue != ',') 6659 if (v->unit != CSSParserValue::Operator && v->iValue != ',')
6660 return false; 6660 return false;
6661 v = args->next(); 6661 v = args->next();
6662 if (!validUnit(v, FNumber, HTMLStandardMode)) 6662 if (!validUnit(v, FNumber, HTMLStandardMode))
6663 return false; 6663 return false;
6664 colorArray[3] = max(0.0, min(1.0, parsedDouble(v, ReleaseParsedCalcValue ))); 6664 colorArray[3] = max(0.0, min(1.0, parsedDouble(v, ReleaseParsedCalcValue )));
6665 } 6665 }
6666 return true; 6666 return true;
6667 } 6667 }
6668 6668
6669 PassRefPtr<CSSPrimitiveValue> BisonCSSParser::parseColor(CSSParserValue* value) 6669 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> BisonCSSParser::parseColor(CSSParserVa lue* value)
6670 { 6670 {
6671 RGBA32 c = Color::transparent; 6671 RGBA32 c = Color::transparent;
6672 if (!parseColorFromValue(value ? value : m_valueList->current(), c)) 6672 if (!parseColorFromValue(value ? value : m_valueList->current(), c))
6673 return 0; 6673 return 0;
6674 return cssValuePool().createColorValue(c); 6674 return cssValuePool().createColorValue(c);
6675 } 6675 }
6676 6676
6677 bool BisonCSSParser::parseColorFromValue(CSSParserValue* value, RGBA32& c) 6677 bool BisonCSSParser::parseColorFromValue(CSSParserValue* value, RGBA32& c)
6678 { 6678 {
6679 if (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_NUMBER 6679 if (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_NUMBER
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
6770 allowColor = true; 6770 allowColor = true;
6771 allowBreak = true; 6771 allowBreak = true;
6772 allowY = false; 6772 allowY = false;
6773 allowBlur = false; 6773 allowBlur = false;
6774 allowSpread = false; 6774 allowSpread = false;
6775 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow; 6775 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow;
6776 } 6776 }
6777 6777
6778 void commitLength(CSSParserValue* v) 6778 void commitLength(CSSParserValue* v)
6779 { 6779 {
6780 RefPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNumericValue(v) ; 6780 RefPtrWillBeRawPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNum ericValue(v);
6781 6781
6782 if (allowX) { 6782 if (allowX) {
6783 x = val.release(); 6783 x = val.release();
6784 allowX = false; 6784 allowX = false;
6785 allowY = true; 6785 allowY = true;
6786 allowColor = false; 6786 allowColor = false;
6787 allowStyle = false; 6787 allowStyle = false;
6788 allowBreak = false; 6788 allowBreak = false;
6789 } else if (allowY) { 6789 } else if (allowY) {
6790 y = val.release(); 6790 y = val.release();
6791 allowY = false; 6791 allowY = false;
6792 allowBlur = true; 6792 allowBlur = true;
6793 allowColor = true; 6793 allowColor = true;
6794 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow; 6794 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow;
6795 allowBreak = true; 6795 allowBreak = true;
6796 } else if (allowBlur) { 6796 } else if (allowBlur) {
6797 blur = val.release(); 6797 blur = val.release();
6798 allowBlur = false; 6798 allowBlur = false;
6799 allowSpread = property == CSSPropertyWebkitBoxShadow || property == CSSPropertyBoxShadow; 6799 allowSpread = property == CSSPropertyWebkitBoxShadow || property == CSSPropertyBoxShadow;
6800 } else if (allowSpread) { 6800 } else if (allowSpread) {
6801 spread = val.release(); 6801 spread = val.release();
6802 allowSpread = false; 6802 allowSpread = false;
6803 } 6803 }
6804 } 6804 }
6805 6805
6806 void commitColor(PassRefPtr<CSSPrimitiveValue> val) 6806 void commitColor(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val)
6807 { 6807 {
6808 color = val; 6808 color = val;
6809 allowColor = false; 6809 allowColor = false;
6810 if (allowX) { 6810 if (allowX) {
6811 allowStyle = false; 6811 allowStyle = false;
6812 allowBreak = false; 6812 allowBreak = false;
6813 } else { 6813 } else {
6814 allowBlur = false; 6814 allowBlur = false;
6815 allowSpread = false; 6815 allowSpread = false;
6816 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow; 6816 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow;
(...skipping 10 matching lines...) Expand all
6827 allowBlur = false; 6827 allowBlur = false;
6828 allowSpread = false; 6828 allowSpread = false;
6829 allowColor = false; 6829 allowColor = false;
6830 } 6830 }
6831 } 6831 }
6832 6832
6833 CSSPropertyID property; 6833 CSSPropertyID property;
6834 BisonCSSParser* m_parser; 6834 BisonCSSParser* m_parser;
6835 6835
6836 RefPtrWillBeRawPtr<CSSValueList> values; 6836 RefPtrWillBeRawPtr<CSSValueList> values;
6837 RefPtr<CSSPrimitiveValue> x; 6837 RefPtrWillBeRawPtr<CSSPrimitiveValue> x;
6838 RefPtr<CSSPrimitiveValue> y; 6838 RefPtrWillBeRawPtr<CSSPrimitiveValue> y;
6839 RefPtr<CSSPrimitiveValue> blur; 6839 RefPtrWillBeRawPtr<CSSPrimitiveValue> blur;
6840 RefPtr<CSSPrimitiveValue> spread; 6840 RefPtrWillBeRawPtr<CSSPrimitiveValue> spread;
6841 RefPtr<CSSPrimitiveValue> style; 6841 RefPtrWillBeRawPtr<CSSPrimitiveValue> style;
6842 RefPtr<CSSPrimitiveValue> color; 6842 RefPtrWillBeRawPtr<CSSPrimitiveValue> color;
6843 6843
6844 bool allowX; 6844 bool allowX;
6845 bool allowY; 6845 bool allowY;
6846 bool allowBlur; 6846 bool allowBlur;
6847 bool allowSpread; 6847 bool allowSpread;
6848 bool allowColor; 6848 bool allowColor;
6849 bool allowStyle; // inset or not. 6849 bool allowStyle; // inset or not.
6850 bool allowBreak; 6850 bool allowBreak;
6851 }; 6851 };
6852 6852
(...skipping 21 matching lines...) Expand all
6874 6874
6875 // A length is allowed here. Construct the value and add it. 6875 // A length is allowed here. Construct the value and add it.
6876 context.commitLength(val); 6876 context.commitLength(val);
6877 } else if (val->id == CSSValueInset) { 6877 } else if (val->id == CSSValueInset) {
6878 if (!context.allowStyle) 6878 if (!context.allowStyle)
6879 return 0; 6879 return 0;
6880 6880
6881 context.commitStyle(val); 6881 context.commitStyle(val);
6882 } else { 6882 } else {
6883 // The only other type of value that's ok is a color value. 6883 // The only other type of value that's ok is a color value.
6884 RefPtr<CSSPrimitiveValue> parsedColor; 6884 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedColor;
6885 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu 6885 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu
6886 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode()) 6886 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode())
6887 || val->id == CSSValueCurrentcolor); 6887 || val->id == CSSValueCurrentcolor);
6888 if (isColor) { 6888 if (isColor) {
6889 if (!context.allowColor) 6889 if (!context.allowColor)
6890 return 0; 6890 return 0;
6891 parsedColor = cssValuePool().createIdentifierValue(val->id); 6891 parsedColor = cssValuePool().createIdentifierValue(val->id);
6892 } 6892 }
6893 6893
6894 if (!parsedColor) 6894 if (!parsedColor)
(...skipping 18 matching lines...) Expand all
6913 6913
6914 return 0; 6914 return 0;
6915 } 6915 }
6916 6916
6917 bool BisonCSSParser::parseReflect(CSSPropertyID propId, bool important) 6917 bool BisonCSSParser::parseReflect(CSSPropertyID propId, bool important)
6918 { 6918 {
6919 // box-reflect: <direction> <offset> <mask> 6919 // box-reflect: <direction> <offset> <mask>
6920 6920
6921 // Direction comes first. 6921 // Direction comes first.
6922 CSSParserValue* val = m_valueList->current(); 6922 CSSParserValue* val = m_valueList->current();
6923 RefPtr<CSSPrimitiveValue> direction; 6923 RefPtrWillBeRawPtr<CSSPrimitiveValue> direction;
6924 if (isVariableReference(val)) { 6924 if (isVariableReference(val)) {
6925 direction = createPrimitiveVariableReferenceValue(val); 6925 direction = createPrimitiveVariableReferenceValue(val);
6926 } else { 6926 } else {
6927 switch (val->id) { 6927 switch (val->id) {
6928 case CSSValueAbove: 6928 case CSSValueAbove:
6929 case CSSValueBelow: 6929 case CSSValueBelow:
6930 case CSSValueLeft: 6930 case CSSValueLeft:
6931 case CSSValueRight: 6931 case CSSValueRight:
6932 direction = cssValuePool().createIdentifierValue(val->id); 6932 direction = cssValuePool().createIdentifierValue(val->id);
6933 break; 6933 break;
6934 default: 6934 default:
6935 return false; 6935 return false;
6936 } 6936 }
6937 } 6937 }
6938 6938
6939 // The offset comes next. 6939 // The offset comes next.
6940 val = m_valueList->next(); 6940 val = m_valueList->next();
6941 RefPtr<CSSPrimitiveValue> offset; 6941 RefPtrWillBeRawPtr<CSSPrimitiveValue> offset;
6942 if (!val) 6942 if (!val)
6943 offset = cssValuePool().createValue(0, CSSPrimitiveValue::CSS_PX); 6943 offset = cssValuePool().createValue(0, CSSPrimitiveValue::CSS_PX);
6944 else { 6944 else {
6945 if (!validUnit(val, FLength | FPercent)) 6945 if (!validUnit(val, FLength | FPercent))
6946 return false; 6946 return false;
6947 offset = createPrimitiveNumericValue(val); 6947 offset = createPrimitiveNumericValue(val);
6948 } 6948 }
6949 6949
6950 // Now for the mask. 6950 // Now for the mask.
6951 RefPtr<CSSValue> mask; 6951 RefPtr<CSSValue> mask;
(...skipping 10 matching lines...) Expand all
6962 return true; 6962 return true;
6963 } 6963 }
6964 6964
6965 bool BisonCSSParser::parseFlex(CSSParserValueList* args, bool important) 6965 bool BisonCSSParser::parseFlex(CSSParserValueList* args, bool important)
6966 { 6966 {
6967 if (!args || !args->size() || args->size() > 3) 6967 if (!args || !args->size() || args->size() > 3)
6968 return false; 6968 return false;
6969 static const double unsetValue = -1; 6969 static const double unsetValue = -1;
6970 double flexGrow = unsetValue; 6970 double flexGrow = unsetValue;
6971 double flexShrink = unsetValue; 6971 double flexShrink = unsetValue;
6972 RefPtr<CSSPrimitiveValue> flexBasis; 6972 RefPtrWillBeRawPtr<CSSPrimitiveValue> flexBasis;
6973 6973
6974 while (CSSParserValue* arg = args->current()) { 6974 while (CSSParserValue* arg = args->current()) {
6975 if (validUnit(arg, FNumber | FNonNeg)) { 6975 if (validUnit(arg, FNumber | FNonNeg)) {
6976 if (flexGrow == unsetValue) 6976 if (flexGrow == unsetValue)
6977 flexGrow = arg->fValue; 6977 flexGrow = arg->fValue;
6978 else if (flexShrink == unsetValue) 6978 else if (flexShrink == unsetValue)
6979 flexShrink = arg->fValue; 6979 flexShrink = arg->fValue;
6980 else if (!arg->fValue) { 6980 else if (!arg->fValue) {
6981 // flex only allows a basis of 0 (sans units) if flex-grow and f lex-shrink values have already been set. 6981 // flex only allows a basis of 0 (sans units) if flex-grow and f lex-shrink values have already been set.
6982 flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::CSS _PX); 6982 flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::CSS _PX);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
7069 m_canAdvance = true; 7069 m_canAdvance = true;
7070 m_allowCommit = m_allowImage = m_allowImageSlice = m_allowRepeat = m_all owForwardSlashOperator = false; 7070 m_allowCommit = m_allowImage = m_allowImageSlice = m_allowRepeat = m_all owForwardSlashOperator = false;
7071 if (!m_borderSlice) { 7071 if (!m_borderSlice) {
7072 m_requireWidth = true; 7072 m_requireWidth = true;
7073 m_requireOutset = false; 7073 m_requireOutset = false;
7074 } else { 7074 } else {
7075 m_requireOutset = true; 7075 m_requireOutset = true;
7076 m_requireWidth = false; 7076 m_requireWidth = false;
7077 } 7077 }
7078 } 7078 }
7079 void commitBorderWidth(PassRefPtr<CSSPrimitiveValue> slice) 7079 void commitBorderWidth(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> slice)
7080 { 7080 {
7081 m_borderSlice = slice; 7081 m_borderSlice = slice;
7082 m_canAdvance = true; 7082 m_canAdvance = true;
7083 m_allowCommit = m_allowForwardSlashOperator = true; 7083 m_allowCommit = m_allowForwardSlashOperator = true;
7084 m_allowImageSlice = m_requireWidth = m_requireOutset = false; 7084 m_allowImageSlice = m_requireWidth = m_requireOutset = false;
7085 m_allowImage = !m_image; 7085 m_allowImage = !m_image;
7086 m_allowRepeat = !m_repeat; 7086 m_allowRepeat = !m_repeat;
7087 } 7087 }
7088 void commitBorderOutset(PassRefPtr<CSSPrimitiveValue> outset) 7088 void commitBorderOutset(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> outset)
7089 { 7089 {
7090 m_outset = outset; 7090 m_outset = outset;
7091 m_canAdvance = true; 7091 m_canAdvance = true;
7092 m_allowCommit = true; 7092 m_allowCommit = true;
7093 m_allowImageSlice = m_allowForwardSlashOperator = m_requireWidth = m_req uireOutset = false; 7093 m_allowImageSlice = m_allowForwardSlashOperator = m_requireWidth = m_req uireOutset = false;
7094 m_allowImage = !m_image; 7094 m_allowImage = !m_image;
7095 m_allowRepeat = !m_repeat; 7095 m_allowRepeat = !m_repeat;
7096 } 7096 }
7097 void commitRepeat(PassRefPtr<CSSValue> repeat) 7097 void commitRepeat(PassRefPtr<CSSValue> repeat)
7098 { 7098 {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
7141 bool m_allowImage; 7141 bool m_allowImage;
7142 bool m_allowImageSlice; 7142 bool m_allowImageSlice;
7143 bool m_allowRepeat; 7143 bool m_allowRepeat;
7144 bool m_allowForwardSlashOperator; 7144 bool m_allowForwardSlashOperator;
7145 7145
7146 bool m_requireWidth; 7146 bool m_requireWidth;
7147 bool m_requireOutset; 7147 bool m_requireOutset;
7148 7148
7149 RefPtr<CSSValue> m_image; 7149 RefPtr<CSSValue> m_image;
7150 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> m_imageSlice; 7150 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> m_imageSlice;
7151 RefPtr<CSSPrimitiveValue> m_borderSlice; 7151 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_borderSlice;
7152 RefPtr<CSSPrimitiveValue> m_outset; 7152 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_outset;
7153 7153
7154 RefPtr<CSSValue> m_repeat; 7154 RefPtr<CSSValue> m_repeat;
7155 }; 7155 };
7156 7156
7157 static bool buildBorderImageParseContext(BisonCSSParser& parser, CSSPropertyID p ropId, BorderImageParseContext& context) 7157 static bool buildBorderImageParseContext(BisonCSSParser& parser, CSSPropertyID p ropId, BorderImageParseContext& context)
7158 { 7158 {
7159 ShorthandScope scope(&parser, propId); 7159 ShorthandScope scope(&parser, propId);
7160 while (CSSParserValue* val = parser.m_valueList->current()) { 7160 while (CSSParserValue* val = parser.m_valueList->current()) {
7161 context.setCanAdvance(false); 7161 context.setCanAdvance(false);
7162 7162
(...skipping 25 matching lines...) Expand all
7188 context.commitImageSlice(imageSlice.release()); 7188 context.commitImageSlice(imageSlice.release());
7189 } 7189 }
7190 7190
7191 if (!context.canAdvance() && context.allowRepeat()) { 7191 if (!context.canAdvance() && context.allowRepeat()) {
7192 RefPtr<CSSValue> repeat; 7192 RefPtr<CSSValue> repeat;
7193 if (parser.parseBorderImageRepeat(repeat)) 7193 if (parser.parseBorderImageRepeat(repeat))
7194 context.commitRepeat(repeat.release()); 7194 context.commitRepeat(repeat.release());
7195 } 7195 }
7196 7196
7197 if (!context.canAdvance() && context.requireWidth()) { 7197 if (!context.canAdvance() && context.requireWidth()) {
7198 RefPtr<CSSPrimitiveValue> borderSlice; 7198 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderSlice;
7199 if (parser.parseBorderImageWidth(borderSlice)) 7199 if (parser.parseBorderImageWidth(borderSlice))
7200 context.commitBorderWidth(borderSlice.release()); 7200 context.commitBorderWidth(borderSlice.release());
7201 } 7201 }
7202 7202
7203 if (!context.canAdvance() && context.requireOutset()) { 7203 if (!context.canAdvance() && context.requireOutset()) {
7204 RefPtr<CSSPrimitiveValue> borderOutset; 7204 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderOutset;
7205 if (parser.parseBorderImageOutset(borderOutset)) 7205 if (parser.parseBorderImageOutset(borderOutset))
7206 context.commitBorderOutset(borderOutset.release()); 7206 context.commitBorderOutset(borderOutset.release());
7207 } 7207 }
7208 7208
7209 if (!context.canAdvance()) 7209 if (!context.canAdvance())
7210 return false; 7210 return false;
7211 7211
7212 parser.m_valueList->next(); 7212 parser.m_valueList->next();
7213 } 7213 }
7214 7214
(...skipping 28 matching lines...) Expand all
7243 return 0; 7243 return 0;
7244 } 7244 }
7245 7245
7246 static bool isBorderImageRepeatKeyword(int id) 7246 static bool isBorderImageRepeatKeyword(int id)
7247 { 7247 {
7248 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound; 7248 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound;
7249 } 7249 }
7250 7250
7251 bool BisonCSSParser::parseBorderImageRepeat(RefPtr<CSSValue>& result) 7251 bool BisonCSSParser::parseBorderImageRepeat(RefPtr<CSSValue>& result)
7252 { 7252 {
7253 RefPtr<CSSPrimitiveValue> firstValue; 7253 RefPtrWillBeRawPtr<CSSPrimitiveValue> firstValue;
7254 RefPtr<CSSPrimitiveValue> secondValue; 7254 RefPtrWillBeRawPtr<CSSPrimitiveValue> secondValue;
7255 CSSParserValue* val = m_valueList->current(); 7255 CSSParserValue* val = m_valueList->current();
7256 if (!val) 7256 if (!val)
7257 return false; 7257 return false;
7258 if (isBorderImageRepeatKeyword(val->id)) 7258 if (isBorderImageRepeatKeyword(val->id))
7259 firstValue = cssValuePool().createIdentifierValue(val->id); 7259 firstValue = cssValuePool().createIdentifierValue(val->id);
7260 else 7260 else
7261 return false; 7261 return false;
7262 7262
7263 val = m_valueList->next(); 7263 val = m_valueList->next();
7264 if (val) { 7264 if (val) {
7265 if (isBorderImageRepeatKeyword(val->id)) 7265 if (isBorderImageRepeatKeyword(val->id))
7266 secondValue = cssValuePool().createIdentifierValue(val->id); 7266 secondValue = cssValuePool().createIdentifierValue(val->id);
7267 else if (!inShorthand()) { 7267 else if (!inShorthand()) {
7268 // If we're not parsing a shorthand then we are invalid. 7268 // If we're not parsing a shorthand then we are invalid.
7269 return false; 7269 return false;
7270 } else { 7270 } else {
7271 // We need to rewind the value list, so that when its advanced we'll 7271 // We need to rewind the value list, so that when its advanced we'll
7272 // end up back at this value. 7272 // end up back at this value.
7273 m_valueList->previous(); 7273 m_valueList->previous();
7274 secondValue = firstValue; 7274 secondValue = firstValue;
7275 } 7275 }
7276 } else 7276 } else
7277 secondValue = firstValue; 7277 secondValue = firstValue;
7278 7278
7279 result = createPrimitiveValuePair(firstValue, secondValue); 7279 result = createPrimitiveValuePair(firstValue, secondValue);
7280 return true; 7280 return true;
7281 } 7281 }
7282 7282
7283 class BorderImageSliceParseContext { 7283 class BorderImageSliceParseContext {
haraken 2014/02/12 14:05:45 You need DISALLOW_ALLOCATION(). It would be nice
wibling-chromium 2014/02/12 14:42:19 Done.
7284 public: 7284 public:
7285 BorderImageSliceParseContext(BisonCSSParser* parser) 7285 BorderImageSliceParseContext(BisonCSSParser* parser)
7286 : m_parser(parser) 7286 : m_parser(parser)
7287 , m_allowNumber(true) 7287 , m_allowNumber(true)
7288 , m_allowFill(true) 7288 , m_allowFill(true)
7289 , m_allowFinalCommit(false) 7289 , m_allowFinalCommit(false)
7290 , m_fill(false) 7290 , m_fill(false)
7291 { } 7291 { }
7292 7292
7293 bool allowNumber() const { return m_allowNumber; } 7293 bool allowNumber() const { return m_allowNumber; }
7294 bool allowFill() const { return m_allowFill; } 7294 bool allowFill() const { return m_allowFill; }
7295 bool allowFinalCommit() const { return m_allowFinalCommit; } 7295 bool allowFinalCommit() const { return m_allowFinalCommit; }
7296 CSSPrimitiveValue* top() const { return m_top.get(); } 7296 CSSPrimitiveValue* top() const { return m_top.get(); }
7297 7297
7298 void commitNumber(CSSParserValue* v) 7298 void commitNumber(CSSParserValue* v)
7299 { 7299 {
7300 RefPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNumericValue(v) ; 7300 RefPtrWillBeRawPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNum ericValue(v);
7301 if (!m_top) 7301 if (!m_top)
7302 m_top = val; 7302 m_top = val;
7303 else if (!m_right) 7303 else if (!m_right)
7304 m_right = val; 7304 m_right = val;
7305 else if (!m_bottom) 7305 else if (!m_bottom)
7306 m_bottom = val; 7306 m_bottom = val;
7307 else { 7307 else {
7308 ASSERT(!m_left); 7308 ASSERT(!m_left);
7309 m_left = val; 7309 m_left = val;
7310 } 7310 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
7342 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad. release()), m_fill); 7342 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad. release()), m_fill);
7343 } 7343 }
7344 7344
7345 private: 7345 private:
7346 BisonCSSParser* m_parser; 7346 BisonCSSParser* m_parser;
7347 7347
7348 bool m_allowNumber; 7348 bool m_allowNumber;
7349 bool m_allowFill; 7349 bool m_allowFill;
7350 bool m_allowFinalCommit; 7350 bool m_allowFinalCommit;
7351 7351
7352 RefPtr<CSSPrimitiveValue> m_top; 7352 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_top;
7353 RefPtr<CSSPrimitiveValue> m_right; 7353 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_right;
7354 RefPtr<CSSPrimitiveValue> m_bottom; 7354 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_bottom;
7355 RefPtr<CSSPrimitiveValue> m_left; 7355 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_left;
7356 7356
7357 bool m_fill; 7357 bool m_fill;
7358 }; 7358 };
7359 7359
7360 bool BisonCSSParser::parseBorderImageSlice(CSSPropertyID propId, RefPtrWillBeRaw Ptr<CSSBorderImageSliceValue>& result) 7360 bool BisonCSSParser::parseBorderImageSlice(CSSPropertyID propId, RefPtrWillBeRaw Ptr<CSSBorderImageSliceValue>& result)
7361 { 7361 {
7362 BorderImageSliceParseContext context(this); 7362 BorderImageSliceParseContext context(this);
7363 CSSParserValue* val; 7363 CSSParserValue* val;
7364 while ((val = m_valueList->current())) { 7364 while ((val = m_valueList->current())) {
7365 // FIXME calc() http://webkit.org/b/16662 : calc is parsed but values ar e not created yet. 7365 // FIXME calc() http://webkit.org/b/16662 : calc is parsed but values ar e not created yet.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
7401 , m_allowNumber(true) 7401 , m_allowNumber(true)
7402 , m_allowFinalCommit(false) 7402 , m_allowFinalCommit(false)
7403 { } 7403 { }
7404 7404
7405 bool allowNumber() const { return m_allowNumber; } 7405 bool allowNumber() const { return m_allowNumber; }
7406 bool allowFinalCommit() const { return m_allowFinalCommit; } 7406 bool allowFinalCommit() const { return m_allowFinalCommit; }
7407 CSSPrimitiveValue* top() const { return m_top.get(); } 7407 CSSPrimitiveValue* top() const { return m_top.get(); }
7408 7408
7409 void commitNumber(CSSParserValue* v) 7409 void commitNumber(CSSParserValue* v)
7410 { 7410 {
7411 RefPtr<CSSPrimitiveValue> val; 7411 RefPtrWillBeRawPtr<CSSPrimitiveValue> val;
7412 if (v->id == CSSValueAuto) 7412 if (v->id == CSSValueAuto)
7413 val = cssValuePool().createIdentifierValue(v->id); 7413 val = cssValuePool().createIdentifierValue(v->id);
7414 else 7414 else
7415 val = m_parser->createPrimitiveNumericValue(v); 7415 val = m_parser->createPrimitiveNumericValue(v);
7416 7416
7417 if (!m_top) 7417 if (!m_top)
7418 m_top = val; 7418 m_top = val;
7419 else if (!m_right) 7419 else if (!m_right)
7420 m_right = val; 7420 m_right = val;
7421 else if (!m_bottom) 7421 else if (!m_bottom)
7422 m_bottom = val; 7422 m_bottom = val;
7423 else { 7423 else {
7424 ASSERT(!m_left); 7424 ASSERT(!m_left);
7425 m_left = val; 7425 m_left = val;
7426 } 7426 }
7427 7427
7428 m_allowNumber = !m_left; 7428 m_allowNumber = !m_left;
7429 m_allowFinalCommit = true; 7429 m_allowFinalCommit = true;
7430 } 7430 }
7431 7431
7432 void setAllowFinalCommit() { m_allowFinalCommit = true; } 7432 void setAllowFinalCommit() { m_allowFinalCommit = true; }
7433 void setTop(PassRefPtr<CSSPrimitiveValue> val) { m_top = val; } 7433 void setTop(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val) { m_top = val; }
7434 7434
7435 PassRefPtr<CSSPrimitiveValue> commitBorderImageQuad() 7435 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> commitBorderImageQuad()
7436 { 7436 {
7437 // We need to clone and repeat values for any omissions. 7437 // We need to clone and repeat values for any omissions.
7438 ASSERT(m_top); 7438 ASSERT(m_top);
7439 if (!m_right) { 7439 if (!m_right) {
7440 m_right = m_top; 7440 m_right = m_top;
7441 m_bottom = m_top; 7441 m_bottom = m_top;
7442 m_left = m_top; 7442 m_left = m_top;
7443 } 7443 }
7444 if (!m_bottom) { 7444 if (!m_bottom) {
7445 m_bottom = m_top; 7445 m_bottom = m_top;
(...skipping 12 matching lines...) Expand all
7458 // Make our new value now. 7458 // Make our new value now.
7459 return cssValuePool().createValue(quad.release()); 7459 return cssValuePool().createValue(quad.release());
7460 } 7460 }
7461 7461
7462 private: 7462 private:
7463 BisonCSSParser* m_parser; 7463 BisonCSSParser* m_parser;
7464 7464
7465 bool m_allowNumber; 7465 bool m_allowNumber;
7466 bool m_allowFinalCommit; 7466 bool m_allowFinalCommit;
7467 7467
7468 RefPtr<CSSPrimitiveValue> m_top; 7468 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_top;
7469 RefPtr<CSSPrimitiveValue> m_right; 7469 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_right;
7470 RefPtr<CSSPrimitiveValue> m_bottom; 7470 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_bottom;
7471 RefPtr<CSSPrimitiveValue> m_left; 7471 RefPtrWillBeRawPtr<CSSPrimitiveValue> m_left;
7472 }; 7472 };
7473 7473
7474 bool BisonCSSParser::parseBorderImageQuad(Units validUnits, RefPtr<CSSPrimitiveV alue>& result) 7474 bool BisonCSSParser::parseBorderImageQuad(Units validUnits, RefPtrWillBeRawPtr<C SSPrimitiveValue>& result)
7475 { 7475 {
7476 BorderImageQuadParseContext context(this); 7476 BorderImageQuadParseContext context(this);
7477 CSSParserValue* val; 7477 CSSParserValue* val;
7478 while ((val = m_valueList->current())) { 7478 while ((val = m_valueList->current())) {
7479 if (context.allowNumber() && (validUnit(val, validUnits, HTMLStandardMod e) || val->id == CSSValueAuto)) { 7479 if (context.allowNumber() && (validUnit(val, validUnits, HTMLStandardMod e) || val->id == CSSValueAuto)) {
7480 context.commitNumber(val); 7480 context.commitNumber(val);
7481 } else if (!inShorthand()) { 7481 } else if (!inShorthand()) {
7482 // If we're not parsing a shorthand then we are invalid. 7482 // If we're not parsing a shorthand then we are invalid.
7483 return false; 7483 return false;
7484 } else { 7484 } else {
7485 if (context.allowFinalCommit()) 7485 if (context.allowFinalCommit())
7486 m_valueList->previous(); // The shorthand loop will advance back to this point. 7486 m_valueList->previous(); // The shorthand loop will advance back to this point.
7487 break; 7487 break;
7488 } 7488 }
7489 m_valueList->next(); 7489 m_valueList->next();
7490 } 7490 }
7491 7491
7492 if (context.allowFinalCommit()) { 7492 if (context.allowFinalCommit()) {
7493 // Need to fully commit as a single value. 7493 // Need to fully commit as a single value.
7494 result = context.commitBorderImageQuad(); 7494 result = context.commitBorderImageQuad();
7495 return true; 7495 return true;
7496 } 7496 }
7497 return false; 7497 return false;
7498 } 7498 }
7499 7499
7500 bool BisonCSSParser::parseBorderImageWidth(RefPtr<CSSPrimitiveValue>& result) 7500 bool BisonCSSParser::parseBorderImageWidth(RefPtrWillBeRawPtr<CSSPrimitiveValue> & result)
7501 { 7501 {
7502 return parseBorderImageQuad(FLength | FNumber | FNonNeg | FPercent, result); 7502 return parseBorderImageQuad(FLength | FNumber | FNonNeg | FPercent, result);
7503 } 7503 }
7504 7504
7505 bool BisonCSSParser::parseBorderImageOutset(RefPtr<CSSPrimitiveValue>& result) 7505 bool BisonCSSParser::parseBorderImageOutset(RefPtrWillBeRawPtr<CSSPrimitiveValue >& result)
7506 { 7506 {
7507 return parseBorderImageQuad(FLength | FNumber | FNonNeg, result); 7507 return parseBorderImageQuad(FLength | FNumber | FNonNeg, result);
7508 } 7508 }
7509 7509
7510 bool BisonCSSParser::parseBorderRadius(CSSPropertyID propId, bool important) 7510 bool BisonCSSParser::parseBorderRadius(CSSPropertyID propId, bool important)
7511 { 7511 {
7512 unsigned num = m_valueList->size(); 7512 unsigned num = m_valueList->size();
7513 if (num > 9) 7513 if (num > 9)
7514 return false; 7514 return false;
7515 7515
7516 ShorthandScope scope(this, propId); 7516 ShorthandScope scope(this, propId);
7517 RefPtr<CSSPrimitiveValue> radii[2][4]; 7517 RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[2][4];
7518 7518
7519 unsigned indexAfterSlash = 0; 7519 unsigned indexAfterSlash = 0;
7520 for (unsigned i = 0; i < num; ++i) { 7520 for (unsigned i = 0; i < num; ++i) {
7521 CSSParserValue* value = m_valueList->valueAt(i); 7521 CSSParserValue* value = m_valueList->valueAt(i);
7522 if (value->unit == CSSParserValue::Operator) { 7522 if (value->unit == CSSParserValue::Operator) {
7523 if (value->iValue != '/') 7523 if (value->iValue != '/')
7524 return false; 7524 return false;
7525 7525
7526 if (!i || indexAfterSlash || i + 1 == num || num > i + 5) 7526 if (!i || indexAfterSlash || i + 1 == num || num > i + 5)
7527 return false; 7527 return false;
7528 7528
7529 indexAfterSlash = i + 1; 7529 indexAfterSlash = i + 1;
7530 completeBorderRadii(radii[0]); 7530 completeBorderRadii(radii[0]);
7531 continue; 7531 continue;
7532 } 7532 }
7533 7533
7534 if (i - indexAfterSlash >= 4) 7534 if (i - indexAfterSlash >= 4)
7535 return false; 7535 return false;
7536 7536
7537 if (!validUnit(value, FLength | FPercent | FNonNeg)) 7537 if (!validUnit(value, FLength | FPercent | FNonNeg))
7538 return false; 7538 return false;
7539 7539
7540 RefPtr<CSSPrimitiveValue> radius = createPrimitiveNumericValue(value); 7540 RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = createPrimitiveNumericVal ue(value);
7541 7541
7542 if (!indexAfterSlash) { 7542 if (!indexAfterSlash) {
7543 radii[0][i] = radius; 7543 radii[0][i] = radius;
7544 7544
7545 // Legacy syntax: -webkit-border-radius: l1 l2; is equivalent to bor der-radius: l1 / l2; 7545 // Legacy syntax: -webkit-border-radius: l1 l2; is equivalent to bor der-radius: l1 / l2;
7546 if (num == 2 && propId == CSSPropertyWebkitBorderRadius) { 7546 if (num == 2 && propId == CSSPropertyWebkitBorderRadius) {
7547 indexAfterSlash = 1; 7547 indexAfterSlash = 1;
7548 completeBorderRadii(radii[0]); 7548 completeBorderRadii(radii[0]);
7549 } 7549 }
7550 } else 7550 } else
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
7593 addProperty(CSSPropertyWebkitAspectRatio, CSSAspectRatioValue::create(narrow PrecisionToFloat(lvalue->fValue), narrowPrecisionToFloat(rvalue->fValue)), impor tant); 7593 addProperty(CSSPropertyWebkitAspectRatio, CSSAspectRatioValue::create(narrow PrecisionToFloat(lvalue->fValue), narrowPrecisionToFloat(rvalue->fValue)), impor tant);
7594 7594
7595 return true; 7595 return true;
7596 } 7596 }
7597 7597
7598 bool BisonCSSParser::parseCounter(CSSPropertyID propId, int defaultValue, bool i mportant) 7598 bool BisonCSSParser::parseCounter(CSSPropertyID propId, int defaultValue, bool i mportant)
7599 { 7599 {
7600 enum { ID, VAL } state = ID; 7600 enum { ID, VAL } state = ID;
7601 7601
7602 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ; 7602 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ;
7603 RefPtr<CSSPrimitiveValue> counterName; 7603 RefPtrWillBeRawPtr<CSSPrimitiveValue> counterName;
7604 7604
7605 while (true) { 7605 while (true) {
7606 CSSParserValue* val = m_valueList->current(); 7606 CSSParserValue* val = m_valueList->current();
7607 switch (state) { 7607 switch (state) {
7608 case ID: 7608 case ID:
7609 if (val && val->unit == CSSPrimitiveValue::CSS_IDENT) { 7609 if (val && val->unit == CSSPrimitiveValue::CSS_IDENT) {
7610 counterName = createPrimitiveStringValue(val); 7610 counterName = createPrimitiveStringValue(val);
7611 state = VAL; 7611 state = VAL;
7612 m_valueList->next(); 7612 m_valueList->next();
7613 continue; 7613 continue;
(...skipping 17 matching lines...) Expand all
7631 7631
7632 if (list->length() > 0) { 7632 if (list->length() > 0) {
7633 addProperty(propId, list.release(), important); 7633 addProperty(propId, list.release(), important);
7634 return true; 7634 return true;
7635 } 7635 }
7636 7636
7637 return false; 7637 return false;
7638 } 7638 }
7639 7639
7640 // This should go away once we drop support for -webkit-gradient 7640 // This should go away once we drop support for -webkit-gradient
7641 static PassRefPtr<CSSPrimitiveValue> parseDeprecatedGradientPoint(CSSParserValue * a, bool horizontal) 7641 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseDeprecatedGradientPoint(CS SParserValue* a, bool horizontal)
7642 { 7642 {
7643 RefPtr<CSSPrimitiveValue> result; 7643 RefPtrWillBeRawPtr<CSSPrimitiveValue> result;
7644 if (a->unit == CSSPrimitiveValue::CSS_IDENT) { 7644 if (a->unit == CSSPrimitiveValue::CSS_IDENT) {
7645 if ((equalIgnoringCase(a, "left") && horizontal) 7645 if ((equalIgnoringCase(a, "left") && horizontal)
7646 || (equalIgnoringCase(a, "top") && !horizontal)) 7646 || (equalIgnoringCase(a, "top") && !horizontal))
7647 result = cssValuePool().createValue(0., CSSPrimitiveValue::CSS_PERCE NTAGE); 7647 result = cssValuePool().createValue(0., CSSPrimitiveValue::CSS_PERCE NTAGE);
7648 else if ((equalIgnoringCase(a, "right") && horizontal) 7648 else if ((equalIgnoringCase(a, "right") && horizontal)
7649 || (equalIgnoringCase(a, "bottom") && !horizontal)) 7649 || (equalIgnoringCase(a, "bottom") && !horizontal))
7650 result = cssValuePool().createValue(100., CSSPrimitiveValue::CSS_PER CENTAGE); 7650 result = cssValuePool().createValue(100., CSSPrimitiveValue::CSS_PER CENTAGE);
7651 else if (equalIgnoringCase(a, "center")) 7651 else if (equalIgnoringCase(a, "center"))
7652 result = cssValuePool().createValue(50., CSSPrimitiveValue::CSS_PERC ENTAGE); 7652 result = cssValuePool().createValue(50., CSSPrimitiveValue::CSS_PERC ENTAGE);
7653 } else if (a->unit == CSSPrimitiveValue::CSS_NUMBER || a->unit == CSSPrimiti veValue::CSS_PERCENTAGE) 7653 } else if (a->unit == CSSPrimitiveValue::CSS_NUMBER || a->unit == CSSPrimiti veValue::CSS_PERCENTAGE)
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
7755 a = args->next(); 7755 a = args->next();
7756 if (!isComma(a)) 7756 if (!isComma(a))
7757 return false; 7757 return false;
7758 7758
7759 // Next comes the starting point for the gradient as an x y pair. There is no 7759 // Next comes the starting point for the gradient as an x y pair. There is no
7760 // comma between the x and the y values. 7760 // comma between the x and the y values.
7761 // First X. It can be left, right, number or percent. 7761 // First X. It can be left, right, number or percent.
7762 a = args->next(); 7762 a = args->next();
7763 if (!a) 7763 if (!a)
7764 return false; 7764 return false;
7765 RefPtr<CSSPrimitiveValue> point = parseDeprecatedGradientPoint(a, true); 7765 RefPtrWillBeRawPtr<CSSPrimitiveValue> point = parseDeprecatedGradientPoint(a , true);
7766 if (!point) 7766 if (!point)
7767 return false; 7767 return false;
7768 result->setFirstX(point.release()); 7768 result->setFirstX(point.release());
7769 7769
7770 // First Y. It can be top, bottom, number or percent. 7770 // First Y. It can be top, bottom, number or percent.
7771 a = args->next(); 7771 a = args->next();
7772 if (!a) 7772 if (!a)
7773 return false; 7773 return false;
7774 point = parseDeprecatedGradientPoint(a, false); 7774 point = parseDeprecatedGradientPoint(a, false);
7775 if (!point) 7775 if (!point)
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
7845 result->addStop(stop); 7845 result->addStop(stop);
7846 7846
7847 // Advance 7847 // Advance
7848 a = args->next(); 7848 a = args->next();
7849 } 7849 }
7850 7850
7851 gradient = result.release(); 7851 gradient = result.release();
7852 return true; 7852 return true;
7853 } 7853 }
7854 7854
7855 static PassRefPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserValue* a, boo l& isHorizontal) 7855 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserV alue* a, bool& isHorizontal)
7856 { 7856 {
7857 if (a->unit != CSSPrimitiveValue::CSS_IDENT) 7857 if (a->unit != CSSPrimitiveValue::CSS_IDENT)
7858 return 0; 7858 return 0;
7859 7859
7860 switch (a->id) { 7860 switch (a->id) {
7861 case CSSValueLeft: 7861 case CSSValueLeft:
7862 case CSSValueRight: 7862 case CSSValueRight:
7863 isHorizontal = true; 7863 isHorizontal = true;
7864 break; 7864 break;
7865 case CSSValueTop: 7865 case CSSValueTop:
7866 case CSSValueBottom: 7866 case CSSValueBottom:
7867 isHorizontal = false; 7867 isHorizontal = false;
7868 break; 7868 break;
7869 default: 7869 default:
7870 return 0; 7870 return 0;
7871 } 7871 }
7872 return cssValuePool().createIdentifierValue(a->id); 7872 return cssValuePool().createIdentifierValue(a->id);
7873 } 7873 }
7874 7874
7875 static PassRefPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(BisonCSSParser* p, CSSParserValue* value) 7875 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(Bis onCSSParser* p, CSSParserValue* value)
7876 { 7876 {
7877 CSSValueID id = value->id; 7877 CSSValueID id = value->id;
7878 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowt ext) || id == CSSValueMenu || id == CSSValueCurrentcolor) 7878 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowt ext) || id == CSSValueMenu || id == CSSValueCurrentcolor)
7879 return cssValuePool().createIdentifierValue(id); 7879 return cssValuePool().createIdentifierValue(id);
7880 7880
7881 return p->parseColor(value); 7881 return p->parseColor(value);
7882 } 7882 }
7883 7883
7884 bool BisonCSSParser::parseDeprecatedLinearGradient(CSSParserValueList* valueList , RefPtr<CSSValue>& gradient, CSSGradientRepeat repeating) 7884 bool BisonCSSParser::parseDeprecatedLinearGradient(CSSParserValueList* valueList , RefPtr<CSSValue>& gradient, CSSGradientRepeat repeating)
7885 { 7885 {
(...skipping 10 matching lines...) Expand all
7896 7896
7897 bool expectComma = false; 7897 bool expectComma = false;
7898 // Look for angle. 7898 // Look for angle.
7899 if (validUnit(a, FAngle, HTMLStandardMode)) { 7899 if (validUnit(a, FAngle, HTMLStandardMode)) {
7900 result->setAngle(createPrimitiveNumericValue(a)); 7900 result->setAngle(createPrimitiveNumericValue(a));
7901 7901
7902 args->next(); 7902 args->next();
7903 expectComma = true; 7903 expectComma = true;
7904 } else { 7904 } else {
7905 // Look one or two optional keywords that indicate a side or corner. 7905 // Look one or two optional keywords that indicate a side or corner.
7906 RefPtr<CSSPrimitiveValue> startX, startY; 7906 RefPtrWillBeRawPtr<CSSPrimitiveValue> startX, startY;
7907 7907
7908 RefPtr<CSSPrimitiveValue> location; 7908 RefPtrWillBeRawPtr<CSSPrimitiveValue> location;
7909 bool isHorizontal = false; 7909 bool isHorizontal = false;
7910 if ((location = valueFromSideKeyword(a, isHorizontal))) { 7910 if ((location = valueFromSideKeyword(a, isHorizontal))) {
7911 if (isHorizontal) 7911 if (isHorizontal)
7912 startX = location; 7912 startX = location;
7913 else 7913 else
7914 startY = location; 7914 startY = location;
7915 7915
7916 if ((a = args->next())) { 7916 if ((a = args->next())) {
7917 if ((location = valueFromSideKeyword(a, isHorizontal))) { 7917 if ((location = valueFromSideKeyword(a, isHorizontal))) {
7918 if (isHorizontal) { 7918 if (isHorizontal) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
7982 if (!a) 7982 if (!a)
7983 return false; 7983 return false;
7984 } 7984 }
7985 7985
7986 result->setFirstX(toCSSPrimitiveValue(centerX.get())); 7986 result->setFirstX(toCSSPrimitiveValue(centerX.get()));
7987 result->setSecondX(toCSSPrimitiveValue(centerX.get())); 7987 result->setSecondX(toCSSPrimitiveValue(centerX.get()));
7988 // CSS3 radial gradients always share the same start and end point. 7988 // CSS3 radial gradients always share the same start and end point.
7989 result->setFirstY(toCSSPrimitiveValue(centerY.get())); 7989 result->setFirstY(toCSSPrimitiveValue(centerY.get()));
7990 result->setSecondY(toCSSPrimitiveValue(centerY.get())); 7990 result->setSecondY(toCSSPrimitiveValue(centerY.get()));
7991 7991
7992 RefPtr<CSSPrimitiveValue> shapeValue; 7992 RefPtrWillBeRawPtr<CSSPrimitiveValue> shapeValue;
7993 RefPtr<CSSPrimitiveValue> sizeValue; 7993 RefPtrWillBeRawPtr<CSSPrimitiveValue> sizeValue;
7994 7994
7995 // Optional shape and/or size in any order. 7995 // Optional shape and/or size in any order.
7996 for (int i = 0; i < 2; ++i) { 7996 for (int i = 0; i < 2; ++i) {
7997 if (a->unit != CSSPrimitiveValue::CSS_IDENT) 7997 if (a->unit != CSSPrimitiveValue::CSS_IDENT)
7998 break; 7998 break;
7999 7999
8000 bool foundValue = false; 8000 bool foundValue = false;
8001 switch (a->id) { 8001 switch (a->id) {
8002 case CSSValueCircle: 8002 case CSSValueCircle:
8003 case CSSValueEllipse: 8003 case CSSValueEllipse:
(...skipping 19 matching lines...) Expand all
8023 return false; 8023 return false;
8024 8024
8025 expectComma = true; 8025 expectComma = true;
8026 } 8026 }
8027 } 8027 }
8028 8028
8029 result->setShape(shapeValue); 8029 result->setShape(shapeValue);
8030 result->setSizingBehavior(sizeValue); 8030 result->setSizingBehavior(sizeValue);
8031 8031
8032 // Or, two lengths or percentages 8032 // Or, two lengths or percentages
8033 RefPtr<CSSPrimitiveValue> horizontalSize; 8033 RefPtrWillBeRawPtr<CSSPrimitiveValue> horizontalSize;
8034 RefPtr<CSSPrimitiveValue> verticalSize; 8034 RefPtrWillBeRawPtr<CSSPrimitiveValue> verticalSize;
8035 8035
8036 if (!shapeValue && !sizeValue) { 8036 if (!shapeValue && !sizeValue) {
8037 if (validUnit(a, FLength | FPercent)) { 8037 if (validUnit(a, FLength | FPercent)) {
8038 horizontalSize = createPrimitiveNumericValue(a); 8038 horizontalSize = createPrimitiveNumericValue(a);
8039 a = args->next(); 8039 a = args->next();
8040 if (!a) 8040 if (!a)
8041 return false; 8041 return false;
8042 8042
8043 expectComma = true; 8043 expectComma = true;
8044 } 8044 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
8085 result->setAngle(createPrimitiveNumericValue(a)); 8085 result->setAngle(createPrimitiveNumericValue(a));
8086 8086
8087 args->next(); 8087 args->next();
8088 expectComma = true; 8088 expectComma = true;
8089 } else if (a->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase(a, " to")) { 8089 } else if (a->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase(a, " to")) {
8090 // to [ [left | right] || [top | bottom] ] 8090 // to [ [left | right] || [top | bottom] ]
8091 a = args->next(); 8091 a = args->next();
8092 if (!a) 8092 if (!a)
8093 return false; 8093 return false;
8094 8094
8095 RefPtr<CSSPrimitiveValue> endX, endY; 8095 RefPtrWillBeRawPtr<CSSPrimitiveValue> endX, endY;
8096 RefPtr<CSSPrimitiveValue> location; 8096 RefPtrWillBeRawPtr<CSSPrimitiveValue> location;
8097 bool isHorizontal = false; 8097 bool isHorizontal = false;
8098 8098
8099 location = valueFromSideKeyword(a, isHorizontal); 8099 location = valueFromSideKeyword(a, isHorizontal);
8100 if (!location) 8100 if (!location)
8101 return false; 8101 return false;
8102 8102
8103 if (isHorizontal) 8103 if (isHorizontal)
8104 endX = location; 8104 endX = location;
8105 else 8105 else
8106 endY = location; 8106 endY = location;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
8146 CSSParserValueList* args = valueList->current()->function->args.get(); 8146 CSSParserValueList* args = valueList->current()->function->args.get();
8147 if (!args || !args->size()) 8147 if (!args || !args->size())
8148 return false; 8148 return false;
8149 8149
8150 CSSParserValue* a = args->current(); 8150 CSSParserValue* a = args->current();
8151 if (!a) 8151 if (!a)
8152 return false; 8152 return false;
8153 8153
8154 bool expectComma = false; 8154 bool expectComma = false;
8155 8155
8156 RefPtr<CSSPrimitiveValue> shapeValue; 8156 RefPtrWillBeRawPtr<CSSPrimitiveValue> shapeValue;
8157 RefPtr<CSSPrimitiveValue> sizeValue; 8157 RefPtrWillBeRawPtr<CSSPrimitiveValue> sizeValue;
8158 RefPtr<CSSPrimitiveValue> horizontalSize; 8158 RefPtrWillBeRawPtr<CSSPrimitiveValue> horizontalSize;
8159 RefPtr<CSSPrimitiveValue> verticalSize; 8159 RefPtrWillBeRawPtr<CSSPrimitiveValue> verticalSize;
8160 8160
8161 // First part of grammar, the size/shape clause: 8161 // First part of grammar, the size/shape clause:
8162 // [ circle || <length> ] | 8162 // [ circle || <length> ] |
8163 // [ ellipse || [ <length> | <percentage> ]{2} ] | 8163 // [ ellipse || [ <length> | <percentage> ]{2} ] |
8164 // [ [ circle | ellipse] || <size-keyword> ] 8164 // [ [ circle | ellipse] || <size-keyword> ]
8165 for (int i = 0; i < 3; ++i) { 8165 for (int i = 0; i < 3; ++i) {
8166 if (a->unit == CSSPrimitiveValue::CSS_IDENT) { 8166 if (a->unit == CSSPrimitiveValue::CSS_IDENT) {
8167 bool badIdent = false; 8167 bool badIdent = false;
8168 switch (a->id) { 8168 switch (a->id) {
8169 case CSSValueCircle: 8169 case CSSValueCircle:
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
8386 if (!a || !parseFillImage(args, toImageValue)) 8386 if (!a || !parseFillImage(args, toImageValue))
8387 return false; 8387 return false;
8388 a = args->next(); 8388 a = args->next();
8389 8389
8390 // Skip a comma 8390 // Skip a comma
8391 if (!isComma(a)) 8391 if (!isComma(a))
8392 return false; 8392 return false;
8393 a = args->next(); 8393 a = args->next();
8394 8394
8395 // The third argument is the crossfade value. It is a percentage or a fracti onal number. 8395 // The third argument is the crossfade value. It is a percentage or a fracti onal number.
8396 RefPtr<CSSPrimitiveValue> percentage; 8396 RefPtrWillBeRawPtr<CSSPrimitiveValue> percentage;
8397 if (!a) 8397 if (!a)
8398 return false; 8398 return false;
8399 8399
8400 if (a->unit == CSSPrimitiveValue::CSS_PERCENTAGE) 8400 if (a->unit == CSSPrimitiveValue::CSS_PERCENTAGE)
8401 percentage = cssValuePool().createValue(clampTo<double>(a->fValue / 100, 0, 1), CSSPrimitiveValue::CSS_NUMBER); 8401 percentage = cssValuePool().createValue(clampTo<double>(a->fValue / 100, 0, 1), CSSPrimitiveValue::CSS_NUMBER);
8402 else if (a->unit == CSSPrimitiveValue::CSS_NUMBER) 8402 else if (a->unit == CSSPrimitiveValue::CSS_NUMBER)
8403 percentage = cssValuePool().createValue(clampTo<double>(a->fValue, 0, 1) , CSSPrimitiveValue::CSS_NUMBER); 8403 percentage = cssValuePool().createValue(clampTo<double>(a->fValue, 0, 1) , CSSPrimitiveValue::CSS_NUMBER);
8404 else 8404 else
8405 return false; 8405 return false;
8406 8406
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
9136 return true; 9136 return true;
9137 default: 9137 default:
9138 return false; 9138 return false;
9139 } 9139 }
9140 } 9140 }
9141 9141
9142 bool BisonCSSParser::parseTextEmphasisStyle(bool important) 9142 bool BisonCSSParser::parseTextEmphasisStyle(bool important)
9143 { 9143 {
9144 unsigned valueListSize = m_valueList->size(); 9144 unsigned valueListSize = m_valueList->size();
9145 9145
9146 RefPtr<CSSPrimitiveValue> fill; 9146 RefPtrWillBeRawPtr<CSSPrimitiveValue> fill;
9147 RefPtr<CSSPrimitiveValue> shape; 9147 RefPtrWillBeRawPtr<CSSPrimitiveValue> shape;
9148 9148
9149 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 9149 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
9150 if (value->unit == CSSPrimitiveValue::CSS_STRING) { 9150 if (value->unit == CSSPrimitiveValue::CSS_STRING) {
9151 if (fill || shape || (valueListSize != 1 && !inShorthand())) 9151 if (fill || shape || (valueListSize != 1 && !inShorthand()))
9152 return false; 9152 return false;
9153 addProperty(CSSPropertyWebkitTextEmphasisStyle, createPrimitiveStrin gValue(value), important); 9153 addProperty(CSSPropertyWebkitTextEmphasisStyle, createPrimitiveStrin gValue(value), important);
9154 m_valueList->next(); 9154 m_valueList->next();
9155 return true; 9155 return true;
9156 } 9156 }
9157 9157
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
9314 m_valueList->next(); 9314 m_valueList->next();
9315 } 9315 }
9316 } 9316 }
9317 settings->append(CSSFontFeatureValue::create(tag, tagValue)); 9317 settings->append(CSSFontFeatureValue::create(tag, tagValue));
9318 return true; 9318 return true;
9319 } 9319 }
9320 9320
9321 bool BisonCSSParser::parseFontFeatureSettings(bool important) 9321 bool BisonCSSParser::parseFontFeatureSettings(bool important)
9322 { 9322 {
9323 if (m_valueList->size() == 1 && m_valueList->current()->id == CSSValueNormal ) { 9323 if (m_valueList->size() == 1 && m_valueList->current()->id == CSSValueNormal ) {
9324 RefPtr<CSSPrimitiveValue> normalValue = cssValuePool().createIdentifierV alue(CSSValueNormal); 9324 RefPtrWillBeRawPtr<CSSPrimitiveValue> normalValue = cssValuePool().creat eIdentifierValue(CSSValueNormal);
9325 m_valueList->next(); 9325 m_valueList->next();
9326 addProperty(CSSPropertyWebkitFontFeatureSettings, normalValue.release(), important); 9326 addProperty(CSSPropertyWebkitFontFeatureSettings, normalValue.release(), important);
9327 return true; 9327 return true;
9328 } 9328 }
9329 9329
9330 RefPtrWillBeRawPtr<CSSValueList> settings = CSSValueList::createCommaSeparat ed(); 9330 RefPtrWillBeRawPtr<CSSValueList> settings = CSSValueList::createCommaSeparat ed();
9331 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 9331 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
9332 if (!parseFontFeatureTag(settings.get())) 9332 if (!parseFontFeatureTag(settings.get()))
9333 return false; 9333 return false;
9334 9334
(...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after
10314 { 10314 {
10315 // The tokenizer checks for the construct of an+b. 10315 // The tokenizer checks for the construct of an+b.
10316 // However, since the {ident} rule precedes the {nth} rule, some of those 10316 // However, since the {ident} rule precedes the {nth} rule, some of those
10317 // tokens are identified as string literal. Furthermore we need to accept 10317 // tokens are identified as string literal. Furthermore we need to accept
10318 // "odd" and "even" which does not match to an+b. 10318 // "odd" and "even" which does not match to an+b.
10319 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") 10319 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even")
10320 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); 10320 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n");
10321 } 10321 }
10322 10322
10323 } 10323 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698