Chromium Code Reviews| Index: Source/core/css/SVGCSSParser.cpp |
| diff --git a/Source/core/css/SVGCSSParser.cpp b/Source/core/css/SVGCSSParser.cpp |
| index e6e115e3424075e57f5b1aa0de91853cb5509bdb..7806feeddece0f929483d5d8a23bb2f946a09cf3 100644 |
| --- a/Source/core/css/SVGCSSParser.cpp |
| +++ b/Source/core/css/SVGCSSParser.cpp |
| @@ -221,6 +221,13 @@ bool CSSParser::parseSVGValue(CSSPropertyID propId, bool important) |
| break; |
| + case CSSPropertyPaintOrder: |
|
pdr.
2013/05/03 17:58:29
When adding a property, you need to add an entry t
Erik Dahlström (inactive)
2013/06/03 15:58:24
is that really useful? it's a new feature, and Use
|
| + if (m_valueList->size() == 1 && id == CSSValueNormal) |
| + valid_primitive = true; |
| + else if (parsedValue = parsePaintOrder()) |
|
pdr.
2013/05/03 17:58:29
You'll need to use extra parenthesis here to make
|
| + m_valueList->next(); |
| + break; |
| + |
| case CSSPropertyVectorEffect: // none | non-scaling-stroke | inherit |
| if (id == CSSValueNone || id == CSSValueNonScalingStroke) |
| valid_primitive = true; |
| @@ -365,6 +372,136 @@ PassRefPtr<CSSValue> CSSParser::parseSVGColor() |
| return SVGColor::createFromColor(Color(c)); |
| } |
| +// normal | [ fill || stroke || markers ] |
| +PassRefPtr<CSSValue> CSSParser::parsePaintOrder() |
| +{ |
| + if (m_valueList->size() > 3) |
| + return 0; |
| + |
| + CSSParserValue* value = m_valueList->current(); |
| + if (!value) |
| + return 0; |
| + |
| + RefPtr<CSSValueList> parsedValues = CSSValueList::createSpaceSeparated(); |
| + |
| + PaintOrderState paint_order = NORMAL; |
| + bool valid = true; |
| + |
| + for ( ; valid && value; value = m_valueList->next()) |
|
pdr.
2013/05/03 17:58:29
Style nit (here, and elsewhere): paintOrder instea
|
| + { |
| + valid = parsePaintOrderParameter(parsedValues.get(), value, paint_order); |
| + if (valid) |
| + parsedValues->append(CSSPrimitiveValue::createIdentifier(value->id)); |
| + } |
| + |
| + return valid ? parsedValues : 0; |
| +} |
| + |
| +bool CSSParser::parsePaintOrderParameter(CSSValueList* parsedValues, CSSParserValue* value, PaintOrderState& paint_order) |
| +{ |
| + switch (paint_order) |
| + { |
| + case NORMAL: |
| + switch (value->id) { |
| + case CSSValueFill: |
| + paint_order = FILL; |
| + return true; |
| + case CSSValueStroke: |
| + paint_order = STROKE; |
| + return true; |
| + case CSSValueMarkers: |
| + paint_order = MARKERS; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case FILL: |
| + switch (value->id) { |
| + case CSSValueStroke: |
| + paint_order = FILL_STROKE; |
| + return true; |
| + case CSSValueMarkers: |
| + paint_order = FILL_MARKERS; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case STROKE: |
| + switch (value->id) { |
| + case CSSValueFill: |
| + paint_order = STROKE_FILL; |
| + return true; |
| + case CSSValueMarkers: |
| + paint_order = STROKE_MARKERS; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case MARKERS: |
| + switch (value->id) { |
| + case CSSValueFill: |
| + paint_order = MARKERS_FILL; |
| + return true; |
| + case CSSValueStroke: |
| + paint_order = MARKERS_STROKE; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case FILL_STROKE: |
| + switch (value->id) { |
| + case CSSValueMarkers: |
| + paint_order = NORMAL; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case FILL_MARKERS: |
| + switch (value->id) { |
| + case CSSValueStroke: |
| + paint_order = FILL_MARKERS_STROKE; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case STROKE_MARKERS: |
| + switch (value->id) { |
| + case CSSValueFill: |
| + paint_order = STROKE_MARKERS_FILL; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case STROKE_FILL: |
| + switch (value->id) { |
| + case CSSValueMarkers: |
| + paint_order = STROKE_FILL_MARKERS; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case MARKERS_FILL: |
| + switch (value->id) { |
| + case CSSValueStroke: |
| + paint_order = MARKERS_FILL_STROKE; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + case MARKERS_STROKE: |
| + switch (value->id) { |
| + case CSSValueFill: |
| + paint_order = MARKERS_STROKE_FILL; |
| + return true; |
| + default: |
| + return false; |
| + } |
| + default: |
| + ASSERT_NOT_REACHED(); |
| + return false; |
| + } |
| +} |
| + |
| } |
| #endif // ENABLE(SVG) |