| OLD | NEW |
| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "core/css/CSSImageValue.h" | 43 #include "core/css/CSSImageValue.h" |
| 44 #include "core/css/CSSLineBoxContainValue.h" | 44 #include "core/css/CSSLineBoxContainValue.h" |
| 45 #include "core/css/CSSPathValue.h" | 45 #include "core/css/CSSPathValue.h" |
| 46 #include "core/css/CSSPrimitiveValueMappings.h" | 46 #include "core/css/CSSPrimitiveValueMappings.h" |
| 47 #include "core/css/CSSProperty.h" | 47 #include "core/css/CSSProperty.h" |
| 48 #include "core/css/CSSPropertyMetadata.h" | 48 #include "core/css/CSSPropertyMetadata.h" |
| 49 #include "core/css/CSSQuadValue.h" | 49 #include "core/css/CSSQuadValue.h" |
| 50 #include "core/css/CSSReflectValue.h" | 50 #include "core/css/CSSReflectValue.h" |
| 51 #include "core/css/CSSSVGDocumentValue.h" | 51 #include "core/css/CSSSVGDocumentValue.h" |
| 52 #include "core/css/CSSShadowValue.h" | 52 #include "core/css/CSSShadowValue.h" |
| 53 #include "core/css/CSSStringValue.h" |
| 53 #include "core/css/CSSTimingFunctionValue.h" | 54 #include "core/css/CSSTimingFunctionValue.h" |
| 54 #include "core/css/CSSUnicodeRangeValue.h" | 55 #include "core/css/CSSUnicodeRangeValue.h" |
| 55 #include "core/css/CSSValuePair.h" | 56 #include "core/css/CSSValuePair.h" |
| 56 #include "core/css/CSSValuePool.h" | 57 #include "core/css/CSSValuePool.h" |
| 57 #include "core/css/HashTools.h" | 58 #include "core/css/HashTools.h" |
| 58 #include "core/css/parser/CSSParserFastPaths.h" | 59 #include "core/css/parser/CSSParserFastPaths.h" |
| 59 #include "core/css/parser/CSSParserValues.h" | 60 #include "core/css/parser/CSSParserValues.h" |
| 60 #include "core/frame/UseCounter.h" | 61 #include "core/frame/UseCounter.h" |
| 61 #include "core/layout/LayoutTheme.h" | 62 #include "core/layout/LayoutTheme.h" |
| 62 #include "core/style/GridCoordinate.h" | 63 #include "core/style/GridCoordinate.h" |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 return CSSPrimitiveValue::create(m_parsedCalculation.release()); | 301 return CSSPrimitiveValue::create(m_parsedCalculation.release()); |
| 301 } | 302 } |
| 302 | 303 |
| 303 ASSERT((value->unit() >= CSSPrimitiveValue::UnitType::Number && value->unit(
) <= CSSPrimitiveValue::UnitType::Kilohertz) | 304 ASSERT((value->unit() >= CSSPrimitiveValue::UnitType::Number && value->unit(
) <= CSSPrimitiveValue::UnitType::Kilohertz) |
| 304 || (value->unit() >= CSSPrimitiveValue::UnitType::Turns && value->unit()
<= CSSPrimitiveValue::UnitType::Chs) | 305 || (value->unit() >= CSSPrimitiveValue::UnitType::Turns && value->unit()
<= CSSPrimitiveValue::UnitType::Chs) |
| 305 || (value->unit() >= CSSPrimitiveValue::UnitType::ViewportWidth && value
->unit() <= CSSPrimitiveValue::UnitType::ViewportMax) | 306 || (value->unit() >= CSSPrimitiveValue::UnitType::ViewportWidth && value
->unit() <= CSSPrimitiveValue::UnitType::ViewportMax) |
| 306 || (value->unit() >= CSSPrimitiveValue::UnitType::DotsPerPixel && value-
>unit() <= CSSPrimitiveValue::UnitType::DotsPerCentimeter)); | 307 || (value->unit() >= CSSPrimitiveValue::UnitType::DotsPerPixel && value-
>unit() <= CSSPrimitiveValue::UnitType::DotsPerCentimeter)); |
| 307 return cssValuePool().createValue(value->fValue, value->unit()); | 308 return cssValuePool().createValue(value->fValue, value->unit()); |
| 308 } | 309 } |
| 309 | 310 |
| 310 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::createPrimit
iveStringValue(CSSParserValue* value) | 311 inline PassRefPtrWillBeRawPtr<CSSStringValue> CSSPropertyParser::createPrimitive
StringValue(CSSParserValue* value) |
| 311 { | 312 { |
| 312 ASSERT(value->unit() == CSSPrimitiveValue::UnitType::String || value->m_unit
== CSSParserValue::Identifier); | 313 ASSERT(value->m_unit == CSSParserValue::String || value->m_unit == CSSParser
Value::Identifier); |
| 313 return cssValuePool().createValue(value->string, CSSPrimitiveValue::UnitType
::String); | 314 return CSSStringValue::create(value->string, CSSStringValue::SerializeAsStri
ng); |
| 314 } | 315 } |
| 315 | 316 |
| 316 inline PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::createPrimit
iveCustomIdentValue(CSSParserValue* value) | 317 inline PassRefPtrWillBeRawPtr<CSSStringValue> CSSPropertyParser::createPrimitive
CustomIdentValue(CSSParserValue* value) |
| 317 { | 318 { |
| 318 ASSERT(value->unit() == CSSPrimitiveValue::UnitType::String || value->m_unit
== CSSParserValue::Identifier); | 319 ASSERT(value->m_unit == CSSParserValue::String || value->m_unit == CSSParser
Value::Identifier); |
| 319 return cssValuePool().createValue(value->string, CSSPrimitiveValue::UnitType
::CustomIdentifier); | 320 return CSSStringValue::create(value->string, CSSStringValue::SerializeAsCust
omIdentifier); |
| 320 } | 321 } |
| 321 | 322 |
| 322 inline PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::createCSSImageValueWi
thReferrer(const String& rawValue, const KURL& url) | 323 inline PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::createCSSImageValueWi
thReferrer(const String& rawValue, const KURL& url) |
| 323 { | 324 { |
| 324 RefPtrWillBeRawPtr<CSSValue> imageValue = CSSImageValue::create(rawValue, ur
l); | 325 RefPtrWillBeRawPtr<CSSValue> imageValue = CSSImageValue::create(rawValue, ur
l); |
| 325 toCSSImageValue(imageValue.get())->setReferrer(m_context.referrer()); | 326 toCSSImageValue(imageValue.get())->setReferrer(m_context.referrer()); |
| 326 return imageValue; | 327 return imageValue; |
| 327 } | 328 } |
| 328 | 329 |
| 329 static inline bool isComma(CSSParserValue* value) | 330 static inline bool isComma(CSSParserValue* value) |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 // Grammar defined by CSS3 UI and modified by CSS4 images: | 589 // Grammar defined by CSS3 UI and modified by CSS4 images: |
| 589 // [ [<image> [<x> <y>]?,]* | 590 // [ [<image> [<x> <y>]?,]* |
| 590 // [ auto | crosshair | default | pointer | progress | move | e-resize |
ne-resize | | 591 // [ auto | crosshair | default | pointer | progress | move | e-resize |
ne-resize | |
| 591 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize |
ew-resize | | 592 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize |
ew-resize | |
| 592 // ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | tex
t | wait | help | | 593 // ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | tex
t | wait | help | |
| 593 // vertical-text | cell | context-menu | alias | copy | no-drop | not-al
lowed | all-scroll | | 594 // vertical-text | cell | context-menu | alias | copy | no-drop | not-al
lowed | all-scroll | |
| 594 // zoom-in | zoom-out | -webkit-grab | -webkit-grabbing | -webkit-zoom-i
n | -webkit-zoom-out ] ] | inherit | 595 // zoom-in | zoom-out | -webkit-grab | -webkit-grabbing | -webkit-zoom-i
n | -webkit-zoom-out ] ] | inherit |
| 595 RefPtrWillBeRawPtr<CSSValueList> list = nullptr; | 596 RefPtrWillBeRawPtr<CSSValueList> list = nullptr; |
| 596 while (value) { | 597 while (value) { |
| 597 RefPtrWillBeRawPtr<CSSValue> image = nullptr; | 598 RefPtrWillBeRawPtr<CSSValue> image = nullptr; |
| 598 if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 599 if (value->m_unit == CSSParserValue::URI) { |
| 599 String uri = value->string; | 600 String uri = value->string; |
| 600 if (!uri.isNull()) | 601 if (!uri.isNull()) |
| 601 image = createCSSImageValueWithReferrer(uri, completeURL(uri
)); | 602 image = createCSSImageValueWithReferrer(uri, completeURL(uri
)); |
| 602 } else if (value->m_unit == CSSParserValue::Function && value->funct
ion->id == CSSValueWebkitImageSet) { | 603 } else if (value->m_unit == CSSParserValue::Function && value->funct
ion->id == CSSValueWebkitImageSet) { |
| 603 image = parseImageSet(m_valueList); | 604 image = parseImageSet(m_valueList); |
| 604 if (!image) | 605 if (!image) |
| 605 break; | 606 break; |
| 606 } else | 607 } else |
| 607 break; | 608 break; |
| 608 | 609 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 } | 718 } |
| 718 case CSSPropertyObjectPosition: | 719 case CSSPropertyObjectPosition: |
| 719 parsedValue = parsePosition(m_valueList); | 720 parsedValue = parsePosition(m_valueList); |
| 720 break; | 721 break; |
| 721 case CSSPropertyListStyleImage: // <uri> | none | inherit | 722 case CSSPropertyListStyleImage: // <uri> | none | inherit |
| 722 case CSSPropertyBorderImageSource: | 723 case CSSPropertyBorderImageSource: |
| 723 case CSSPropertyWebkitMaskBoxImageSource: | 724 case CSSPropertyWebkitMaskBoxImageSource: |
| 724 if (id == CSSValueNone) { | 725 if (id == CSSValueNone) { |
| 725 parsedValue = cssValuePool().createIdentifierValue(CSSValueNone); | 726 parsedValue = cssValuePool().createIdentifierValue(CSSValueNone); |
| 726 m_valueList->next(); | 727 m_valueList->next(); |
| 727 } else if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 728 } else if (value->m_unit == CSSParserValue::URI) { |
| 728 parsedValue = createCSSImageValueWithReferrer(value->string, complet
eURL(value->string)); | 729 parsedValue = createCSSImageValueWithReferrer(value->string, complet
eURL(value->string)); |
| 729 m_valueList->next(); | 730 m_valueList->next(); |
| 730 } else if (isGeneratedImageValue(value)) { | 731 } else if (isGeneratedImageValue(value)) { |
| 731 if (parseGeneratedImage(m_valueList, parsedValue)) | 732 if (parseGeneratedImage(m_valueList, parsedValue)) |
| 732 m_valueList->next(); | 733 m_valueList->next(); |
| 733 else | 734 else |
| 734 return false; | 735 return false; |
| 735 } else if (value->m_unit == CSSParserValue::Function && value->function-
>id == CSSValueWebkitImageSet) { | 736 } else if (value->m_unit == CSSParserValue::Function && value->function-
>id == CSSValueWebkitImageSet) { |
| 736 parsedValue = parseImageSet(m_valueList); | 737 parsedValue = parseImageSet(m_valueList); |
| 737 if (!parsedValue) | 738 if (!parsedValue) |
| (...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1334 validPrimitive = (!id && !isCalculation(value) && validUnit(value, FInte
ger | FPercent | FNonNeg) && (value->unit() == CSSPrimitiveValue::UnitType::Perc
entage || value->fValue)); | 1335 validPrimitive = (!id && !isCalculation(value) && validUnit(value, FInte
ger | FPercent | FNonNeg) && (value->unit() == CSSPrimitiveValue::UnitType::Perc
entage || value->fValue)); |
| 1335 break; | 1336 break; |
| 1336 | 1337 |
| 1337 case CSSPropertyWebkitFontSizeDelta: // <length> | 1338 case CSSPropertyWebkitFontSizeDelta: // <length> |
| 1338 validPrimitive = validUnit(value, FLength | FUnitlessQuirk); | 1339 validPrimitive = validUnit(value, FLength | FUnitlessQuirk); |
| 1339 break; | 1340 break; |
| 1340 | 1341 |
| 1341 case CSSPropertyWebkitHighlight: | 1342 case CSSPropertyWebkitHighlight: |
| 1342 if (id == CSSValueNone) { | 1343 if (id == CSSValueNone) { |
| 1343 validPrimitive = true; | 1344 validPrimitive = true; |
| 1344 } else if (value->unit() == CSSPrimitiveValue::UnitType::String) { | 1345 } else if (value->m_unit == CSSParserValue::String) { |
| 1345 parsedValue = createPrimitiveStringValue(value); | 1346 parsedValue = createPrimitiveStringValue(value); |
| 1346 m_valueList->next(); | 1347 m_valueList->next(); |
| 1347 } | 1348 } |
| 1348 break; | 1349 break; |
| 1349 | 1350 |
| 1350 case CSSPropertyWebkitHyphenateCharacter: | 1351 case CSSPropertyWebkitHyphenateCharacter: |
| 1351 case CSSPropertyWebkitLocale: | 1352 case CSSPropertyWebkitLocale: |
| 1352 if (id == CSSValueAuto) { | 1353 if (id == CSSValueAuto) { |
| 1353 validPrimitive = true; | 1354 validPrimitive = true; |
| 1354 } else if (value->unit() == CSSPrimitiveValue::UnitType::String) { | 1355 } else if (value->m_unit == CSSParserValue::String) { |
| 1355 parsedValue = createPrimitiveStringValue(value); | 1356 parsedValue = createPrimitiveStringValue(value); |
| 1356 m_valueList->next(); | 1357 m_valueList->next(); |
| 1357 } | 1358 } |
| 1358 break; | 1359 break; |
| 1359 | 1360 |
| 1360 // End Apple-specific properties | 1361 // End Apple-specific properties |
| 1361 | 1362 |
| 1362 case CSSPropertyWebkitAppRegion: | 1363 case CSSPropertyWebkitAppRegion: |
| 1363 if (id >= CSSValueDrag && id <= CSSValueNoDrag) | 1364 if (id >= CSSValueDrag && id <= CSSValueNoDrag) |
| 1364 validPrimitive = true; | 1365 validPrimitive = true; |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1489 if (id == CSSValueNormal) | 1490 if (id == CSSValueNormal) |
| 1490 validPrimitive = true; | 1491 validPrimitive = true; |
| 1491 else | 1492 else |
| 1492 return parseFontVariantLigatures(important); | 1493 return parseFontVariantLigatures(important); |
| 1493 break; | 1494 break; |
| 1494 case CSSPropertyWebkitClipPath: | 1495 case CSSPropertyWebkitClipPath: |
| 1495 if (id == CSSValueNone) { | 1496 if (id == CSSValueNone) { |
| 1496 validPrimitive = true; | 1497 validPrimitive = true; |
| 1497 } else if (value->m_unit == CSSParserValue::Function) { | 1498 } else if (value->m_unit == CSSParserValue::Function) { |
| 1498 parsedValue = parseBasicShape(); | 1499 parsedValue = parseBasicShape(); |
| 1499 } else if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 1500 } else if (value->m_unit == CSSParserValue::URI) { |
| 1500 parsedValue = CSSPrimitiveValue::create(value->string, CSSPrimitiveV
alue::UnitType::URI); | 1501 parsedValue = CSSStringValue::create(value->string, CSSStringValue::
SerializeAsURI); |
| 1501 addProperty(propId, parsedValue.release(), important); | 1502 addProperty(propId, parsedValue.release(), important); |
| 1502 return true; | 1503 return true; |
| 1503 } | 1504 } |
| 1504 break; | 1505 break; |
| 1505 case CSSPropertyShapeOutside: | 1506 case CSSPropertyShapeOutside: |
| 1506 if (id == CSSValueNone) | 1507 if (id == CSSValueNone) |
| 1507 validPrimitive = true; | 1508 validPrimitive = true; |
| 1508 else | 1509 else |
| 1509 parsedValue = parseShapeProperty(propId); | 1510 parsedValue = parseShapeProperty(propId); |
| 1510 break; | 1511 break; |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2095 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseScrollSnapCoordinate() | 2096 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseScrollSnapCoordinate() |
| 2096 { | 2097 { |
| 2097 if (m_valueList->current()->id == CSSValueNone) { | 2098 if (m_valueList->current()->id == CSSValueNone) { |
| 2098 m_valueList->next(); | 2099 m_valueList->next(); |
| 2099 return cssValuePool().createIdentifierValue(CSSValueNone); | 2100 return cssValuePool().createIdentifierValue(CSSValueNone); |
| 2100 } | 2101 } |
| 2101 | 2102 |
| 2102 return parsePositionList(m_valueList); | 2103 return parsePositionList(m_valueList); |
| 2103 } | 2104 } |
| 2104 | 2105 |
| 2105 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parsePage() | 2106 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parsePage() |
| 2106 { | 2107 { |
| 2107 CSSParserValue* value = m_valueList->current(); | 2108 CSSParserValue* value = m_valueList->current(); |
| 2108 m_valueList->next(); | 2109 m_valueList->next(); |
| 2109 ASSERT(value); | 2110 ASSERT(value); |
| 2110 | 2111 |
| 2111 if (value->id == CSSValueAuto) | 2112 if (value->id == CSSValueAuto) |
| 2112 return cssValuePool().createIdentifierValue(value->id); | 2113 return cssValuePool().createIdentifierValue(value->id); |
| 2113 if (value->m_unit == CSSParserValue::Identifier) | 2114 if (value->m_unit == CSSParserValue::Identifier) |
| 2114 return createPrimitiveCustomIdentValue(value); | 2115 return createPrimitiveCustomIdentValue(value); |
| 2115 return nullptr; | 2116 return nullptr; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2180 return None; | 2181 return None; |
| 2181 } | 2182 } |
| 2182 } | 2183 } |
| 2183 | 2184 |
| 2184 // [ <string> <string> ]+ | none, but none is handled in parseValue | 2185 // [ <string> <string> ]+ | none, but none is handled in parseValue |
| 2185 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseQuotes() | 2186 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseQuotes() |
| 2186 { | 2187 { |
| 2187 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); | 2188 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); |
| 2188 while (CSSParserValue* val = m_valueList->current()) { | 2189 while (CSSParserValue* val = m_valueList->current()) { |
| 2189 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; | 2190 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; |
| 2190 if (val->unit() != CSSPrimitiveValue::UnitType::String) | 2191 if (val->m_unit != CSSParserValue::String) |
| 2191 return nullptr; | 2192 return nullptr; |
| 2192 parsedValue = createPrimitiveStringValue(val); | 2193 parsedValue = createPrimitiveStringValue(val); |
| 2193 values->append(parsedValue.release()); | 2194 values->append(parsedValue.release()); |
| 2194 m_valueList->next(); | 2195 m_valueList->next(); |
| 2195 } | 2196 } |
| 2196 if (values->length() && values->length() % 2 == 0) | 2197 if (values->length() && values->length() % 2 == 0) |
| 2197 return values.release(); | 2198 return values.release(); |
| 2198 return nullptr; | 2199 return nullptr; |
| 2199 } | 2200 } |
| 2200 | 2201 |
| 2201 // [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open
-quote | no-close-quote ]+ | inherit | 2202 // [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open
-quote | no-close-quote ]+ | inherit |
| 2202 // in CSS 2.1 this got somewhat reduced: | 2203 // in CSS 2.1 this got somewhat reduced: |
| 2203 // [ <string> | attr(X) | open-quote | close-quote | no-open-quote | no-close-qu
ote ]+ | inherit | 2204 // [ <string> | attr(X) | open-quote | close-quote | no-open-quote | no-close-qu
ote ]+ | inherit |
| 2204 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseContent() | 2205 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseContent() |
| 2205 { | 2206 { |
| 2206 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); | 2207 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); |
| 2207 | 2208 |
| 2208 while (CSSParserValue* val = m_valueList->current()) { | 2209 while (CSSParserValue* val = m_valueList->current()) { |
| 2209 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; | 2210 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; |
| 2210 if (val->unit() == CSSPrimitiveValue::UnitType::URI) { | 2211 if (val->m_unit == CSSParserValue::URI) { |
| 2211 // url | 2212 // url |
| 2212 parsedValue = createCSSImageValueWithReferrer(val->string, completeU
RL(val->string)); | 2213 parsedValue = createCSSImageValueWithReferrer(val->string, completeU
RL(val->string)); |
| 2213 } else if (val->m_unit == CSSParserValue::Function) { | 2214 } else if (val->m_unit == CSSParserValue::Function) { |
| 2214 // attr(X) | counter(X [,Y]) | counters(X, Y, [,Z]) | -webkit-gradie
nt(...) | 2215 // attr(X) | counter(X [,Y]) | counters(X, Y, [,Z]) | -webkit-gradie
nt(...) |
| 2215 CSSParserValueList* args = val->function->args.get(); | 2216 CSSParserValueList* args = val->function->args.get(); |
| 2216 if (!args) | 2217 if (!args) |
| 2217 return nullptr; | 2218 return nullptr; |
| 2218 if (val->function->id == CSSValueAttr) { | 2219 if (val->function->id == CSSValueAttr) { |
| 2219 parsedValue = parseAttr(args); | 2220 parsedValue = parseAttr(args); |
| 2220 } else if (val->function->id == CSSValueCounter) { | 2221 } else if (val->function->id == CSSValueCounter) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2232 case CSSValueOpenQuote: | 2233 case CSSValueOpenQuote: |
| 2233 case CSSValueCloseQuote: | 2234 case CSSValueCloseQuote: |
| 2234 case CSSValueNoOpenQuote: | 2235 case CSSValueNoOpenQuote: |
| 2235 case CSSValueNoCloseQuote: | 2236 case CSSValueNoCloseQuote: |
| 2236 case CSSValueNone: | 2237 case CSSValueNone: |
| 2237 case CSSValueNormal: | 2238 case CSSValueNormal: |
| 2238 parsedValue = cssValuePool().createIdentifierValue(val->id); | 2239 parsedValue = cssValuePool().createIdentifierValue(val->id); |
| 2239 default: | 2240 default: |
| 2240 break; | 2241 break; |
| 2241 } | 2242 } |
| 2242 } else if (val->unit() == CSSPrimitiveValue::UnitType::String) { | 2243 } else if (val->m_unit == CSSParserValue::String) { |
| 2243 parsedValue = createPrimitiveStringValue(val); | 2244 parsedValue = createPrimitiveStringValue(val); |
| 2244 } | 2245 } |
| 2245 if (!parsedValue) | 2246 if (!parsedValue) |
| 2246 return nullptr; | 2247 return nullptr; |
| 2247 values->append(parsedValue.release()); | 2248 values->append(parsedValue.release()); |
| 2248 m_valueList->next(); | 2249 m_valueList->next(); |
| 2249 } | 2250 } |
| 2250 | 2251 |
| 2251 return values.release(); | 2252 return values.release(); |
| 2252 } | 2253 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2265 // CSS allows identifiers with "-" at the start, like "-webkit-mask-image". | 2266 // CSS allows identifiers with "-" at the start, like "-webkit-mask-image". |
| 2266 // But HTML attribute names can't have those characters, and we should not | 2267 // But HTML attribute names can't have those characters, and we should not |
| 2267 // even parse them inside attr(). | 2268 // even parse them inside attr(). |
| 2268 if (attrName[0] == '-') | 2269 if (attrName[0] == '-') |
| 2269 return nullptr; | 2270 return nullptr; |
| 2270 | 2271 |
| 2271 if (m_context.isHTMLDocument()) | 2272 if (m_context.isHTMLDocument()) |
| 2272 attrName = attrName.lower(); | 2273 attrName = attrName.lower(); |
| 2273 | 2274 |
| 2274 RefPtrWillBeRawPtr<CSSFunctionValue> attrValue = CSSFunctionValue::create(CS
SValueAttr); | 2275 RefPtrWillBeRawPtr<CSSFunctionValue> attrValue = CSSFunctionValue::create(CS
SValueAttr); |
| 2275 attrValue->append(CSSPrimitiveValue::create(attrName, CSSPrimitiveValue::Uni
tType::CustomIdentifier)); | 2276 attrValue->append(CSSStringValue::create(attrName, CSSStringValue::Serialize
AsCustomIdentifier)); |
| 2276 return attrValue.release(); | 2277 return attrValue.release(); |
| 2277 } | 2278 } |
| 2278 | 2279 |
| 2279 bool CSSPropertyParser::acceptQuirkyColors(CSSPropertyID propertyId) const | 2280 bool CSSPropertyParser::acceptQuirkyColors(CSSPropertyID propertyId) const |
| 2280 { | 2281 { |
| 2281 if (!inQuirksMode()) | 2282 if (!inQuirksMode()) |
| 2282 return false; | 2283 return false; |
| 2283 switch (propertyId) { | 2284 switch (propertyId) { |
| 2284 case CSSPropertyBackgroundColor: | 2285 case CSSPropertyBackgroundColor: |
| 2285 case CSSPropertyBorderBottomColor: | 2286 case CSSPropertyBorderBottomColor: |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2337 return nullptr; | 2338 return nullptr; |
| 2338 return cssValuePool().createColorValue(c); | 2339 return cssValuePool().createColorValue(c); |
| 2339 } | 2340 } |
| 2340 | 2341 |
| 2341 bool CSSPropertyParser::parseFillImage(CSSParserValueList* valueList, RefPtrWill
BeRawPtr<CSSValue>& value) | 2342 bool CSSPropertyParser::parseFillImage(CSSParserValueList* valueList, RefPtrWill
BeRawPtr<CSSValue>& value) |
| 2342 { | 2343 { |
| 2343 if (valueList->current()->id == CSSValueNone) { | 2344 if (valueList->current()->id == CSSValueNone) { |
| 2344 value = cssValuePool().createIdentifierValue(CSSValueNone); | 2345 value = cssValuePool().createIdentifierValue(CSSValueNone); |
| 2345 return true; | 2346 return true; |
| 2346 } | 2347 } |
| 2347 if (valueList->current()->unit() == CSSPrimitiveValue::UnitType::URI) { | 2348 if (valueList->current()->m_unit == CSSParserValue::URI) { |
| 2348 value = createCSSImageValueWithReferrer(valueList->current()->string, co
mpleteURL(valueList->current()->string)); | 2349 value = createCSSImageValueWithReferrer(valueList->current()->string, co
mpleteURL(valueList->current()->string)); |
| 2349 return true; | 2350 return true; |
| 2350 } | 2351 } |
| 2351 | 2352 |
| 2352 if (isGeneratedImageValue(valueList->current())) | 2353 if (isGeneratedImageValue(valueList->current())) |
| 2353 return parseGeneratedImage(valueList, value); | 2354 return parseGeneratedImage(valueList, value); |
| 2354 | 2355 |
| 2355 if (valueList->current()->m_unit == CSSParserValue::Function && valueList->c
urrent()->function->id == CSSValueWebkitImageSet) { | 2356 if (valueList->current()->m_unit == CSSParserValue::Function && valueList->c
urrent()->function->id == CSSValueWebkitImageSet) { |
| 2356 value = parseImageSet(m_valueList); | 2357 value = parseImageSet(m_valueList); |
| 2357 if (value) | 2358 if (value) |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3026 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationName(bool allo
wQuotedName) | 3027 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationName(bool allo
wQuotedName) |
| 3027 { | 3028 { |
| 3028 CSSParserValue* value = m_valueList->current(); | 3029 CSSParserValue* value = m_valueList->current(); |
| 3029 | 3030 |
| 3030 if (value->id == CSSValueNone) | 3031 if (value->id == CSSValueNone) |
| 3031 return cssValuePool().createIdentifierValue(CSSValueNone); | 3032 return cssValuePool().createIdentifierValue(CSSValueNone); |
| 3032 | 3033 |
| 3033 if (value->m_unit == CSSParserValue::Identifier) | 3034 if (value->m_unit == CSSParserValue::Identifier) |
| 3034 return createPrimitiveCustomIdentValue(value); | 3035 return createPrimitiveCustomIdentValue(value); |
| 3035 | 3036 |
| 3036 if (allowQuotedName && value->unit() == CSSPrimitiveValue::UnitType::String)
{ | 3037 if (allowQuotedName && value->m_unit == CSSParserValue::String) { |
| 3037 // Legacy support for strings in prefixed animations | 3038 // Legacy support for strings in prefixed animations |
| 3038 if (m_context.useCounter()) | 3039 if (m_context.useCounter()) |
| 3039 m_context.useCounter()->count(UseCounter::QuotedAnimationName); | 3040 m_context.useCounter()->count(UseCounter::QuotedAnimationName); |
| 3040 if (equalIgnoringCase(value->string, "none")) | 3041 if (equalIgnoringCase(value->string, "none")) |
| 3041 return cssValuePool().createIdentifierValue(CSSValueNone); | 3042 return cssValuePool().createIdentifierValue(CSSValueNone); |
| 3042 return createPrimitiveCustomIdentValue(value); | 3043 return createPrimitiveCustomIdentValue(value); |
| 3043 } | 3044 } |
| 3044 | 3045 |
| 3045 return nullptr; | 3046 return nullptr; |
| 3046 } | 3047 } |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3232 return value.id == CSSValueInitial || value.id == CSSValueInherit || value.i
d == CSSValueUnset || value.id == CSSValueDefault; | 3233 return value.id == CSSValueInitial || value.id == CSSValueInherit || value.i
d == CSSValueUnset || value.id == CSSValueDefault; |
| 3233 } | 3234 } |
| 3234 | 3235 |
| 3235 static inline bool isValidCustomIdentForGridPositions(const CSSParserValue& valu
e) | 3236 static inline bool isValidCustomIdentForGridPositions(const CSSParserValue& valu
e) |
| 3236 { | 3237 { |
| 3237 // FIXME: we need a more general solution for <custom-ident> in all properti
es. | 3238 // FIXME: we need a more general solution for <custom-ident> in all properti
es. |
| 3238 return value.m_unit == CSSParserValue::Identifier && value.id != CSSValueSpa
n && value.id != CSSValueAuto && !isCSSWideKeyword(value); | 3239 return value.m_unit == CSSParserValue::Identifier && value.id != CSSValueSpa
n && value.id != CSSValueAuto && !isCSSWideKeyword(value); |
| 3239 } | 3240 } |
| 3240 | 3241 |
| 3241 // The function parses [ <integer> || <custom-ident> ] in <grid-line> (which can
be stand alone or with 'span'). | 3242 // The function parses [ <integer> || <custom-ident> ] in <grid-line> (which can
be stand alone or with 'span'). |
| 3242 bool CSSPropertyParser::parseIntegerOrCustomIdentFromGridPosition(RefPtrWillBeRa
wPtr<CSSPrimitiveValue>& numericValue, RefPtrWillBeRawPtr<CSSPrimitiveValue>& gr
idLineName) | 3243 bool CSSPropertyParser::parseIntegerOrCustomIdentFromGridPosition(RefPtrWillBeRa
wPtr<CSSPrimitiveValue>& numericValue, RefPtrWillBeRawPtr<CSSStringValue>& gridL
ineName) |
| 3243 { | 3244 { |
| 3244 CSSParserValue* value = m_valueList->current(); | 3245 CSSParserValue* value = m_valueList->current(); |
| 3245 if (validUnit(value, FInteger) && value->fValue) { | 3246 if (validUnit(value, FInteger) && value->fValue) { |
| 3246 numericValue = createPrimitiveNumericValue(value); | 3247 numericValue = createPrimitiveNumericValue(value); |
| 3247 value = m_valueList->next(); | 3248 value = m_valueList->next(); |
| 3248 if (value && isValidCustomIdentForGridPositions(*value)) { | 3249 if (value && isValidCustomIdentForGridPositions(*value)) { |
| 3249 gridLineName = createPrimitiveCustomIdentValue(m_valueList->current(
)); | 3250 gridLineName = createPrimitiveCustomIdentValue(m_valueList->current(
)); |
| 3250 m_valueList->next(); | 3251 m_valueList->next(); |
| 3251 } | 3252 } |
| 3252 return true; | 3253 return true; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3269 { | 3270 { |
| 3270 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); | 3271 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); |
| 3271 | 3272 |
| 3272 CSSParserValue* value = m_valueList->current(); | 3273 CSSParserValue* value = m_valueList->current(); |
| 3273 if (value->id == CSSValueAuto) { | 3274 if (value->id == CSSValueAuto) { |
| 3274 m_valueList->next(); | 3275 m_valueList->next(); |
| 3275 return cssValuePool().createIdentifierValue(CSSValueAuto); | 3276 return cssValuePool().createIdentifierValue(CSSValueAuto); |
| 3276 } | 3277 } |
| 3277 | 3278 |
| 3278 RefPtrWillBeRawPtr<CSSPrimitiveValue> numericValue = nullptr; | 3279 RefPtrWillBeRawPtr<CSSPrimitiveValue> numericValue = nullptr; |
| 3279 RefPtrWillBeRawPtr<CSSPrimitiveValue> gridLineName = nullptr; | 3280 RefPtrWillBeRawPtr<CSSStringValue> gridLineName = nullptr; |
| 3280 bool hasSeenSpanKeyword = false; | 3281 bool hasSeenSpanKeyword = false; |
| 3281 | 3282 |
| 3282 if (parseIntegerOrCustomIdentFromGridPosition(numericValue, gridLineName)) { | 3283 if (parseIntegerOrCustomIdentFromGridPosition(numericValue, gridLineName)) { |
| 3283 value = m_valueList->current(); | 3284 value = m_valueList->current(); |
| 3284 if (value && value->id == CSSValueSpan) { | 3285 if (value && value->id == CSSValueSpan) { |
| 3285 hasSeenSpanKeyword = true; | 3286 hasSeenSpanKeyword = true; |
| 3286 m_valueList->next(); | 3287 m_valueList->next(); |
| 3287 } | 3288 } |
| 3288 } else if (value->id == CSSValueSpan) { | 3289 } else if (value->id == CSSValueSpan) { |
| 3289 hasSeenSpanKeyword = true; | 3290 hasSeenSpanKeyword = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3301 // If we didn't parse anything, this is not a valid grid position. | 3302 // If we didn't parse anything, this is not a valid grid position. |
| 3302 if (!hasSeenSpanKeyword && !gridLineName && !numericValue) | 3303 if (!hasSeenSpanKeyword && !gridLineName && !numericValue) |
| 3303 return nullptr; | 3304 return nullptr; |
| 3304 | 3305 |
| 3305 // Negative numbers are not allowed for span (but are for <integer>). | 3306 // Negative numbers are not allowed for span (but are for <integer>). |
| 3306 if (hasSeenSpanKeyword && numericValue && numericValue->getIntValue() < 0) | 3307 if (hasSeenSpanKeyword && numericValue && numericValue->getIntValue() < 0) |
| 3307 return nullptr; | 3308 return nullptr; |
| 3308 | 3309 |
| 3309 // For the <custom-ident> case. | 3310 // For the <custom-ident> case. |
| 3310 if (gridLineName && !numericValue && !hasSeenSpanKeyword) | 3311 if (gridLineName && !numericValue && !hasSeenSpanKeyword) |
| 3311 return cssValuePool().createValue(gridLineName->getStringValue(), CSSPri
mitiveValue::UnitType::CustomIdentifier); | 3312 return CSSStringValue::create(gridLineName->getStringValue(), CSSStringV
alue::SerializeAsCustomIdentifier); |
| 3312 | 3313 |
| 3313 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); | 3314 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated
(); |
| 3314 if (hasSeenSpanKeyword) | 3315 if (hasSeenSpanKeyword) |
| 3315 values->append(cssValuePool().createIdentifierValue(CSSValueSpan)); | 3316 values->append(cssValuePool().createIdentifierValue(CSSValueSpan)); |
| 3316 if (numericValue) | 3317 if (numericValue) |
| 3317 values->append(numericValue.release()); | 3318 values->append(numericValue.release()); |
| 3318 if (gridLineName) | 3319 if (gridLineName) |
| 3319 values->append(gridLineName.release()); | 3320 values->append(gridLineName.release()); |
| 3320 ASSERT(values->length()); | 3321 ASSERT(values->length()); |
| 3321 return values.release(); | 3322 return values.release(); |
| 3322 } | 3323 } |
| 3323 | 3324 |
| 3324 static PassRefPtrWillBeRawPtr<CSSValue> gridMissingGridPositionValue(CSSValue* v
alue) | 3325 static PassRefPtrWillBeRawPtr<CSSValue> gridMissingGridPositionValue(CSSValue* v
alue) |
| 3325 { | 3326 { |
| 3326 if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->isCustomIdent()
) | 3327 if (value->isStringValue() && toCSSStringValue(value)->serializationType() =
= CSSStringValue::SerializeAsCustomIdentifier) |
| 3327 return value; | 3328 return value; |
| 3328 | 3329 |
| 3329 return cssValuePool().createIdentifierValue(CSSValueAuto); | 3330 return cssValuePool().createIdentifierValue(CSSValueAuto); |
| 3330 } | 3331 } |
| 3331 | 3332 |
| 3332 bool CSSPropertyParser::parseGridItemPositionShorthand(CSSPropertyID shorthandId
, bool important) | 3333 bool CSSPropertyParser::parseGridItemPositionShorthand(CSSPropertyID shorthandId
, bool important) |
| 3333 { | 3334 { |
| 3334 ShorthandScope scope(this, shorthandId); | 3335 ShorthandScope scope(this, shorthandId); |
| 3335 const StylePropertyShorthand& shorthand = shorthandForProperty(shorthandId); | 3336 const StylePropertyShorthand& shorthand = shorthandForProperty(shorthandId); |
| 3336 ASSERT(shorthand.length() == 2); | 3337 ASSERT(shorthand.length() == 2); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3375 // Handle leading <custom-ident>*. | 3376 // Handle leading <custom-ident>*. |
| 3376 if (!parseGridLineNames(*m_valueList, *templateRows, trailingIdentWasAdd
ed ? toCSSGridLineNamesValue(templateRows->item(templateRows->length() - 1)) : n
ullptr)) | 3377 if (!parseGridLineNames(*m_valueList, *templateRows, trailingIdentWasAdd
ed ? toCSSGridLineNamesValue(templateRows->item(templateRows->length() - 1)) : n
ullptr)) |
| 3377 return false; | 3378 return false; |
| 3378 | 3379 |
| 3379 // Handle a template-area's row. | 3380 // Handle a template-area's row. |
| 3380 if (!parseGridTemplateAreasRow(gridAreaMap, rowCount, columnCount)) | 3381 if (!parseGridTemplateAreasRow(gridAreaMap, rowCount, columnCount)) |
| 3381 return false; | 3382 return false; |
| 3382 ++rowCount; | 3383 ++rowCount; |
| 3383 | 3384 |
| 3384 // Handle template-rows's track-size. | 3385 // Handle template-rows's track-size. |
| 3385 if (m_valueList->current() && m_valueList->current()->unit() != CSSPrimi
tiveValue::UnitType::String) { | 3386 if (m_valueList->current() && m_valueList->current()->m_unit != CSSParse
rValue::String) { |
| 3386 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList
); | 3387 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList
); |
| 3387 if (!value) | 3388 if (!value) |
| 3388 return false; | 3389 return false; |
| 3389 templateRows->append(value); | 3390 templateRows->append(value); |
| 3390 } else { | 3391 } else { |
| 3391 templateRows->append(cssValuePool().createIdentifierValue(CSSValueAu
to)); | 3392 templateRows->append(cssValuePool().createIdentifierValue(CSSValueAu
to)); |
| 3392 } | 3393 } |
| 3393 | 3394 |
| 3394 // This will handle the trailing/leading <custom-ident>* in the grammar. | 3395 // This will handle the trailing/leading <custom-ident>* in the grammar. |
| 3395 if (!parseGridLineNames(*m_valueList, *templateRows)) | 3396 if (!parseGridLineNames(*m_valueList, *templateRows)) |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3598 if (!lineNames) | 3599 if (!lineNames) |
| 3599 lineNames = CSSGridLineNamesValue::create(); | 3600 lineNames = CSSGridLineNamesValue::create(); |
| 3600 | 3601 |
| 3601 while (CSSParserValue* identValue = inputList.current()) { | 3602 while (CSSParserValue* identValue = inputList.current()) { |
| 3602 if (isClosingBracket(*identValue)) | 3603 if (isClosingBracket(*identValue)) |
| 3603 break; | 3604 break; |
| 3604 | 3605 |
| 3605 if (!isValidCustomIdentForGridPositions(*identValue)) | 3606 if (!isValidCustomIdentForGridPositions(*identValue)) |
| 3606 return false; | 3607 return false; |
| 3607 | 3608 |
| 3608 RefPtrWillBeRawPtr<CSSPrimitiveValue> lineName = createPrimitiveCustomId
entValue(identValue); | 3609 RefPtrWillBeRawPtr<CSSStringValue> lineName = createPrimitiveCustomIdent
Value(identValue); |
| 3609 lineNames->append(lineName.release()); | 3610 lineNames->append(lineName.release()); |
| 3610 inputList.next(); | 3611 inputList.next(); |
| 3611 } | 3612 } |
| 3612 | 3613 |
| 3613 if (!inputList.current() || !isClosingBracket(*inputList.current())) | 3614 if (!inputList.current() || !isClosingBracket(*inputList.current())) |
| 3614 return false; | 3615 return false; |
| 3615 | 3616 |
| 3616 if (!previousNamedAreaTrailingLineNames) | 3617 if (!previousNamedAreaTrailingLineNames) |
| 3617 valueList.append(lineNames.release()); | 3618 valueList.append(lineNames.release()); |
| 3618 | 3619 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3802 | 3803 |
| 3803 if (!areaName.isEmpty()) | 3804 if (!areaName.isEmpty()) |
| 3804 columnNames.append(areaName.toString()); | 3805 columnNames.append(areaName.toString()); |
| 3805 | 3806 |
| 3806 return columnNames; | 3807 return columnNames; |
| 3807 } | 3808 } |
| 3808 | 3809 |
| 3809 bool CSSPropertyParser::parseGridTemplateAreasRow(NamedGridAreaMap& gridAreaMap,
const size_t rowCount, size_t& columnCount) | 3810 bool CSSPropertyParser::parseGridTemplateAreasRow(NamedGridAreaMap& gridAreaMap,
const size_t rowCount, size_t& columnCount) |
| 3810 { | 3811 { |
| 3811 CSSParserValue* currentValue = m_valueList->current(); | 3812 CSSParserValue* currentValue = m_valueList->current(); |
| 3812 if (!currentValue || currentValue->unit() != CSSPrimitiveValue::UnitType::St
ring) | 3813 if (!currentValue || currentValue->m_unit != CSSParserValue::String) |
| 3813 return false; | 3814 return false; |
| 3814 | 3815 |
| 3815 String gridRowNames = currentValue->string; | 3816 String gridRowNames = currentValue->string; |
| 3816 if (gridRowNames.isEmpty() || gridRowNames.containsOnlyWhitespace()) | 3817 if (gridRowNames.isEmpty() || gridRowNames.containsOnlyWhitespace()) |
| 3817 return false; | 3818 return false; |
| 3818 | 3819 |
| 3819 Vector<String> columnNames = parseGridTemplateAreasColumnNames(gridRowNames)
; | 3820 Vector<String> columnNames = parseGridTemplateAreasColumnNames(gridRowNames)
; |
| 3820 if (!columnCount) { | 3821 if (!columnCount) { |
| 3821 columnCount = columnNames.size(); | 3822 columnCount = columnNames.size(); |
| 3822 ASSERT(columnCount); | 3823 ASSERT(columnCount); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3934 { | 3935 { |
| 3935 unsigned numArgs = args->size(); | 3936 unsigned numArgs = args->size(); |
| 3936 if (counters && numArgs != 3 && numArgs != 5) | 3937 if (counters && numArgs != 3 && numArgs != 5) |
| 3937 return nullptr; | 3938 return nullptr; |
| 3938 if (!counters && numArgs != 1 && numArgs != 3) | 3939 if (!counters && numArgs != 1 && numArgs != 3) |
| 3939 return nullptr; | 3940 return nullptr; |
| 3940 | 3941 |
| 3941 CSSParserValue* i = args->current(); | 3942 CSSParserValue* i = args->current(); |
| 3942 if (i->m_unit != CSSParserValue::Identifier) | 3943 if (i->m_unit != CSSParserValue::Identifier) |
| 3943 return nullptr; | 3944 return nullptr; |
| 3944 RefPtrWillBeRawPtr<CSSPrimitiveValue> identifier = createPrimitiveCustomIden
tValue(i); | 3945 RefPtrWillBeRawPtr<CSSStringValue> identifier = createPrimitiveCustomIdentVa
lue(i); |
| 3945 | 3946 |
| 3946 RefPtrWillBeRawPtr<CSSPrimitiveValue> separator = nullptr; | 3947 RefPtrWillBeRawPtr<CSSStringValue> separator = nullptr; |
| 3947 if (!counters) | 3948 if (!counters) |
| 3948 separator = cssValuePool().createValue(String(), CSSPrimitiveValue::Unit
Type::CustomIdentifier); | 3949 separator = CSSStringValue::create(String(), CSSStringValue::SerializeAs
CustomIdentifier); |
| 3949 else { | 3950 else { |
| 3950 args->next(); | 3951 args->next(); |
| 3951 if (!consumeComma(args)) | 3952 if (!consumeComma(args)) |
| 3952 return nullptr; | 3953 return nullptr; |
| 3953 | 3954 |
| 3954 i = args->current(); | 3955 i = args->current(); |
| 3955 if (i->unit() != CSSPrimitiveValue::UnitType::String) | 3956 if (i->m_unit != CSSParserValue::String) |
| 3956 return nullptr; | 3957 return nullptr; |
| 3957 | 3958 |
| 3958 separator = createPrimitiveCustomIdentValue(i); | 3959 separator = createPrimitiveCustomIdentValue(i); |
| 3959 } | 3960 } |
| 3960 | 3961 |
| 3961 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle = nullptr; | 3962 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle = nullptr; |
| 3962 i = args->next(); | 3963 i = args->next(); |
| 3963 if (!i) // Make the list style default decimal | 3964 if (!i) // Make the list style default decimal |
| 3964 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal); | 3965 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal); |
| 3965 else { | 3966 else { |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4705 CSSParserValue* value = m_valueList->current(); | 4706 CSSParserValue* value = m_valueList->current(); |
| 4706 | 4707 |
| 4707 FontFamilyValueBuilder familyBuilder(list.get()); | 4708 FontFamilyValueBuilder familyBuilder(list.get()); |
| 4708 bool inFamily = false; | 4709 bool inFamily = false; |
| 4709 | 4710 |
| 4710 while (value) { | 4711 while (value) { |
| 4711 CSSParserValue* nextValue = m_valueList->next(); | 4712 CSSParserValue* nextValue = m_valueList->next(); |
| 4712 bool nextValBreaksFont = !nextValue || isComma(nextValue); | 4713 bool nextValBreaksFont = !nextValue || isComma(nextValue); |
| 4713 bool nextValIsFontName = nextValue && | 4714 bool nextValIsFontName = nextValue && |
| 4714 ((nextValue->id >= CSSValueSerif && nextValue->id <= CSSValueWebkitB
ody) || | 4715 ((nextValue->id >= CSSValueSerif && nextValue->id <= CSSValueWebkitB
ody) || |
| 4715 (nextValue->unit() == CSSPrimitiveValue::UnitType::String || nextVal
ue->m_unit == CSSParserValue::Identifier)); | 4716 (nextValue->m_unit == CSSParserValue::String || nextValue->m_unit ==
CSSParserValue::Identifier)); |
| 4716 | 4717 |
| 4717 if (isCSSWideKeyword(*value) && !inFamily) { | 4718 if (isCSSWideKeyword(*value) && !inFamily) { |
| 4718 if (nextValBreaksFont) | 4719 if (nextValBreaksFont) |
| 4719 return nullptr; | 4720 return nullptr; |
| 4720 else if (nextValIsFontName) | 4721 else if (nextValIsFontName) |
| 4721 value = nextValue; | 4722 value = nextValue; |
| 4722 continue; | 4723 continue; |
| 4723 } | 4724 } |
| 4724 | 4725 |
| 4725 if (value->id >= CSSValueSerif && value->id <= CSSValueWebkitBody) { | 4726 if (value->id >= CSSValueSerif && value->id <= CSSValueWebkitBody) { |
| 4726 if (inFamily) | 4727 if (inFamily) |
| 4727 familyBuilder.add(value->string); | 4728 familyBuilder.add(value->string); |
| 4728 else if (nextValBreaksFont || !nextValIsFontName) | 4729 else if (nextValBreaksFont || !nextValIsFontName) |
| 4729 list->append(cssValuePool().createIdentifierValue(value->id)); | 4730 list->append(cssValuePool().createIdentifierValue(value->id)); |
| 4730 else { | 4731 else { |
| 4731 familyBuilder.commit(); | 4732 familyBuilder.commit(); |
| 4732 familyBuilder.add(value->string); | 4733 familyBuilder.add(value->string); |
| 4733 inFamily = true; | 4734 inFamily = true; |
| 4734 } | 4735 } |
| 4735 } else if (value->unit() == CSSPrimitiveValue::UnitType::String) { | 4736 } else if (value->m_unit == CSSParserValue::String) { |
| 4736 // Strings never share in a family name. | 4737 // Strings never share in a family name. |
| 4737 inFamily = false; | 4738 inFamily = false; |
| 4738 familyBuilder.commit(); | 4739 familyBuilder.commit(); |
| 4739 list->append(cssValuePool().createFontFamilyValue(value->string)); | 4740 list->append(cssValuePool().createFontFamilyValue(value->string)); |
| 4740 } else if (value->m_unit == CSSParserValue::Identifier) { | 4741 } else if (value->m_unit == CSSParserValue::Identifier) { |
| 4741 if (inFamily) | 4742 if (inFamily) |
| 4742 familyBuilder.add(value->string); | 4743 familyBuilder.add(value->string); |
| 4743 else if (nextValBreaksFont || !nextValIsFontName) | 4744 else if (nextValBreaksFont || !nextValIsFontName) |
| 4744 list->append(cssValuePool().createFontFamilyValue(value->string)
); | 4745 list->append(cssValuePool().createFontFamilyValue(value->string)
); |
| 4745 else { | 4746 else { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4881 | 4882 |
| 4882 CSSParserValue* value = m_valueList->next(); | 4883 CSSParserValue* value = m_valueList->next(); |
| 4883 if (!value || value->m_unit != CSSParserValue::Function || value->function->
id != CSSValueFormat) { | 4884 if (!value || value->m_unit != CSSParserValue::Function || value->function->
id != CSSValueFormat) { |
| 4884 valueList->append(uriValue.release()); | 4885 valueList->append(uriValue.release()); |
| 4885 return true; | 4886 return true; |
| 4886 } | 4887 } |
| 4887 | 4888 |
| 4888 // FIXME: http://www.w3.org/TR/2011/WD-css3-fonts-20111004/ says that format
() contains a comma-separated list of strings, | 4889 // FIXME: http://www.w3.org/TR/2011/WD-css3-fonts-20111004/ says that format
() contains a comma-separated list of strings, |
| 4889 // but CSSFontFaceSrcValue stores only one format. Allowing one format for n
ow. | 4890 // but CSSFontFaceSrcValue stores only one format. Allowing one format for n
ow. |
| 4890 CSSParserValueList* args = value->function->args.get(); | 4891 CSSParserValueList* args = value->function->args.get(); |
| 4891 if (!args || args->size() != 1 || (args->current()->unit() != CSSPrimitiveVa
lue::UnitType::String && args->current()->m_unit != CSSParserValue::Identifier)) | 4892 if (!args || args->size() != 1 || (args->current()->m_unit != CSSParserValue
::String && args->current()->m_unit != CSSParserValue::Identifier)) |
| 4892 return false; | 4893 return false; |
| 4893 uriValue->setFormat(args->current()->string); | 4894 uriValue->setFormat(args->current()->string); |
| 4894 valueList->append(uriValue.release()); | 4895 valueList->append(uriValue.release()); |
| 4895 m_valueList->next(); | 4896 m_valueList->next(); |
| 4896 return true; | 4897 return true; |
| 4897 } | 4898 } |
| 4898 | 4899 |
| 4899 bool CSSPropertyParser::parseFontFaceSrcLocal(CSSValueList* valueList) | 4900 bool CSSPropertyParser::parseFontFaceSrcLocal(CSSValueList* valueList) |
| 4900 { | 4901 { |
| 4901 CSSParserValueList* args = m_valueList->current()->function->args.get(); | 4902 CSSParserValueList* args = m_valueList->current()->function->args.get(); |
| 4902 if (!args || !args->size()) | 4903 if (!args || !args->size()) |
| 4903 return false; | 4904 return false; |
| 4904 m_valueList->next(); | 4905 m_valueList->next(); |
| 4905 | 4906 |
| 4906 ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy = m_contex
t.shouldCheckContentSecurityPolicy(); | 4907 ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy = m_contex
t.shouldCheckContentSecurityPolicy(); |
| 4907 if (args->size() == 1 && args->current()->unit() == CSSPrimitiveValue::UnitT
ype::String) { | 4908 if (args->size() == 1 && args->current()->m_unit == CSSParserValue::String)
{ |
| 4908 valueList->append(CSSFontFaceSrcValue::createLocal(args->current()->stri
ng, shouldCheckContentSecurityPolicy)); | 4909 valueList->append(CSSFontFaceSrcValue::createLocal(args->current()->stri
ng, shouldCheckContentSecurityPolicy)); |
| 4909 } else if (args->current()->m_unit == CSSParserValue::Identifier) { | 4910 } else if (args->current()->m_unit == CSSParserValue::Identifier) { |
| 4910 StringBuilder builder; | 4911 StringBuilder builder; |
| 4911 for (CSSParserValue* localValue = args->current(); localValue; localValu
e = args->next()) { | 4912 for (CSSParserValue* localValue = args->current(); localValue; localValu
e = args->next()) { |
| 4912 if (localValue->m_unit != CSSParserValue::Identifier) | 4913 if (localValue->m_unit != CSSParserValue::Identifier) |
| 4913 return false; | 4914 return false; |
| 4914 if (!builder.isEmpty()) | 4915 if (!builder.isEmpty()) |
| 4915 builder.append(' '); | 4916 builder.append(' '); |
| 4916 builder.append(localValue->string); | 4917 builder.append(localValue->string); |
| 4917 } | 4918 } |
| 4918 valueList->append(CSSFontFaceSrcValue::createLocal(builder.toString(), s
houldCheckContentSecurityPolicy)); | 4919 valueList->append(CSSFontFaceSrcValue::createLocal(builder.toString(), s
houldCheckContentSecurityPolicy)); |
| 4919 } else | 4920 } else |
| 4920 return false; | 4921 return false; |
| 4921 | 4922 |
| 4922 return true; | 4923 return true; |
| 4923 } | 4924 } |
| 4924 | 4925 |
| 4925 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFontFaceSrc() | 4926 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFontFaceSrc() |
| 4926 { | 4927 { |
| 4927 RefPtrWillBeRawPtr<CSSValueList> values(CSSValueList::createCommaSeparated()
); | 4928 RefPtrWillBeRawPtr<CSSValueList> values(CSSValueList::createCommaSeparated()
); |
| 4928 | 4929 |
| 4929 while (true) { | 4930 while (true) { |
| 4930 CSSParserValue* value = m_valueList->current(); | 4931 CSSParserValue* value = m_valueList->current(); |
| 4931 if (!value) | 4932 if (!value) |
| 4932 return nullptr; | 4933 return nullptr; |
| 4933 if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 4934 if (value->m_unit == CSSParserValue::URI) { |
| 4934 if (!parseFontFaceSrcURI(values.get())) | 4935 if (!parseFontFaceSrcURI(values.get())) |
| 4935 return nullptr; | 4936 return nullptr; |
| 4936 } else if (value->m_unit == CSSParserValue::Function && value->function-
>id == CSSValueLocal) { | 4937 } else if (value->m_unit == CSSParserValue::Function && value->function-
>id == CSSValueLocal) { |
| 4937 if (!parseFontFaceSrcLocal(values.get())) | 4938 if (!parseFontFaceSrcLocal(values.get())) |
| 4938 return nullptr; | 4939 return nullptr; |
| 4939 } else { | 4940 } else { |
| 4940 return nullptr; | 4941 return nullptr; |
| 4941 } | 4942 } |
| 4942 | 4943 |
| 4943 if (!m_valueList->current()) | 4944 if (!m_valueList->current()) |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5567 bool CSSPropertyParser::buildBorderImageParseContext(CSSPropertyID propId, Borde
rImageParseContext& context) | 5568 bool CSSPropertyParser::buildBorderImageParseContext(CSSPropertyID propId, Borde
rImageParseContext& context) |
| 5568 { | 5569 { |
| 5569 CSSPropertyParser::ShorthandScope scope(this, propId); | 5570 CSSPropertyParser::ShorthandScope scope(this, propId); |
| 5570 while (CSSParserValue* val = m_valueList->current()) { | 5571 while (CSSParserValue* val = m_valueList->current()) { |
| 5571 context.setCanAdvance(false); | 5572 context.setCanAdvance(false); |
| 5572 | 5573 |
| 5573 if (!context.canAdvance() && context.allowForwardSlashOperator() && isFo
rwardSlashOperator(val)) | 5574 if (!context.canAdvance() && context.allowForwardSlashOperator() && isFo
rwardSlashOperator(val)) |
| 5574 context.commitForwardSlashOperator(); | 5575 context.commitForwardSlashOperator(); |
| 5575 | 5576 |
| 5576 if (!context.canAdvance() && context.allowImage()) { | 5577 if (!context.canAdvance() && context.allowImage()) { |
| 5577 if (val->unit() == CSSPrimitiveValue::UnitType::URI) { | 5578 if (val->m_unit == CSSParserValue::URI) { |
| 5578 context.commitImage(createCSSImageValueWithReferrer(val->string,
m_context.completeURL(val->string))); | 5579 context.commitImage(createCSSImageValueWithReferrer(val->string,
m_context.completeURL(val->string))); |
| 5579 } else if (isGeneratedImageValue(val)) { | 5580 } else if (isGeneratedImageValue(val)) { |
| 5580 RefPtrWillBeRawPtr<CSSValue> value = nullptr; | 5581 RefPtrWillBeRawPtr<CSSValue> value = nullptr; |
| 5581 if (parseGeneratedImage(m_valueList, value)) | 5582 if (parseGeneratedImage(m_valueList, value)) |
| 5582 context.commitImage(value.release()); | 5583 context.commitImage(value.release()); |
| 5583 else | 5584 else |
| 5584 return false; | 5585 return false; |
| 5585 } else if (val->m_unit == CSSParserValue::Function && val->function-
>id == CSSValueWebkitImageSet) { | 5586 } else if (val->m_unit == CSSParserValue::Function && val->function-
>id == CSSValueWebkitImageSet) { |
| 5586 RefPtrWillBeRawPtr<CSSValue> value = parseImageSet(m_valueList); | 5587 RefPtrWillBeRawPtr<CSSValue> value = parseImageSet(m_valueList); |
| 5587 if (value) | 5588 if (value) |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5968 } | 5969 } |
| 5969 | 5970 |
| 5970 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseCounter(int defaultValu
e) | 5971 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseCounter(int defaultValu
e) |
| 5971 { | 5972 { |
| 5972 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated()
; | 5973 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated()
; |
| 5973 | 5974 |
| 5974 while (m_valueList->current()) { | 5975 while (m_valueList->current()) { |
| 5975 CSSParserValue* val = m_valueList->current(); | 5976 CSSParserValue* val = m_valueList->current(); |
| 5976 if (val->m_unit != CSSParserValue::Identifier) | 5977 if (val->m_unit != CSSParserValue::Identifier) |
| 5977 return nullptr; | 5978 return nullptr; |
| 5978 RefPtrWillBeRawPtr<CSSPrimitiveValue> counterName = createPrimitiveCusto
mIdentValue(val); | 5979 RefPtrWillBeRawPtr<CSSStringValue> counterName = createPrimitiveCustomId
entValue(val); |
| 5979 m_valueList->next(); | 5980 m_valueList->next(); |
| 5980 | 5981 |
| 5981 val = m_valueList->current(); | 5982 val = m_valueList->current(); |
| 5982 int i = defaultValue; | 5983 int i = defaultValue; |
| 5983 if (val && validUnit(val, FInteger)) { | 5984 if (val && validUnit(val, FInteger)) { |
| 5984 i = clampTo<int>(val->fValue); | 5985 i = clampTo<int>(val->fValue); |
| 5985 m_valueList->next(); | 5986 m_valueList->next(); |
| 5986 } | 5987 } |
| 5987 | 5988 |
| 5988 list->append(createCSSValuePair(counterName.release(), | 5989 list->append(createCSSValuePair(counterName.release(), |
| (...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6797 return nullptr; | 6798 return nullptr; |
| 6798 | 6799 |
| 6799 CSSParserValueList* functionArgs = valueList->current()->function->args.get(
); | 6800 CSSParserValueList* functionArgs = valueList->current()->function->args.get(
); |
| 6800 if (!functionArgs || !functionArgs->size() || !functionArgs->current()) | 6801 if (!functionArgs || !functionArgs->size() || !functionArgs->current()) |
| 6801 return nullptr; | 6802 return nullptr; |
| 6802 | 6803 |
| 6803 RefPtrWillBeRawPtr<CSSImageSetValue> imageSet = CSSImageSetValue::create(); | 6804 RefPtrWillBeRawPtr<CSSImageSetValue> imageSet = CSSImageSetValue::create(); |
| 6804 | 6805 |
| 6805 while (functionArgs->current()) { | 6806 while (functionArgs->current()) { |
| 6806 CSSParserValue* arg = functionArgs->current(); | 6807 CSSParserValue* arg = functionArgs->current(); |
| 6807 if (arg->unit() != CSSPrimitiveValue::UnitType::URI) | 6808 if (arg->m_unit != CSSParserValue::URI) |
| 6808 return nullptr; | 6809 return nullptr; |
| 6809 | 6810 |
| 6810 RefPtrWillBeRawPtr<CSSValue> image = createCSSImageValueWithReferrer(arg
->string, completeURL(arg->string)); | 6811 RefPtrWillBeRawPtr<CSSValue> image = createCSSImageValueWithReferrer(arg
->string, completeURL(arg->string)); |
| 6811 imageSet->append(image); | 6812 imageSet->append(image); |
| 6812 | 6813 |
| 6813 arg = functionArgs->next(); | 6814 arg = functionArgs->next(); |
| 6814 if (!arg) | 6815 if (!arg) |
| 6815 return nullptr; | 6816 return nullptr; |
| 6816 | 6817 |
| 6817 if (arg->m_unit != CSSParserValue::DimensionList) | 6818 if (arg->m_unit != CSSParserValue::DimensionList) |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6973 } | 6974 } |
| 6974 | 6975 |
| 6975 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFilter() | 6976 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFilter() |
| 6976 { | 6977 { |
| 6977 if (!m_valueList) | 6978 if (!m_valueList) |
| 6978 return nullptr; | 6979 return nullptr; |
| 6979 | 6980 |
| 6980 // The filter is a list of functional primitives that specify individual ope
rations. | 6981 // The filter is a list of functional primitives that specify individual ope
rations. |
| 6981 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated()
; | 6982 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated()
; |
| 6982 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL
ist->next()) { | 6983 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL
ist->next()) { |
| 6983 if (value->unit() != CSSPrimitiveValue::UnitType::URI && (value->m_unit
!= CSSParserValue::Function || !value->function)) | 6984 if (value->m_unit != CSSParserValue::URI && (value->m_unit != CSSParserV
alue::Function || !value->function)) |
| 6984 return nullptr; | 6985 return nullptr; |
| 6985 | 6986 |
| 6986 // See if the specified primitive is one we understand. | 6987 // See if the specified primitive is one we understand. |
| 6987 if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 6988 if (value->m_unit == CSSParserValue::URI) { |
| 6988 RefPtrWillBeRawPtr<CSSFunctionValue> referenceFilterValue = CSSFunct
ionValue::create(CSSValueUrl); | 6989 RefPtrWillBeRawPtr<CSSFunctionValue> referenceFilterValue = CSSFunct
ionValue::create(CSSValueUrl); |
| 6989 referenceFilterValue->append(CSSSVGDocumentValue::create(value->stri
ng)); | 6990 referenceFilterValue->append(CSSSVGDocumentValue::create(value->stri
ng)); |
| 6990 list->append(referenceFilterValue.release()); | 6991 list->append(referenceFilterValue.release()); |
| 6991 } else { | 6992 } else { |
| 6992 CSSValueID filterType = value->function->id; | 6993 CSSValueID filterType = value->function->id; |
| 6993 unsigned maximumArgumentCount = filterType == CSSValueDropShadow ? 4
: 1; | 6994 unsigned maximumArgumentCount = filterType == CSSValueDropShadow ? 4
: 1; |
| 6994 | 6995 |
| 6995 CSSParserValueList* args = value->function->args.get(); | 6996 CSSParserValueList* args = value->function->args.get(); |
| 6996 if (!args || args->size() > maximumArgumentCount) | 6997 if (!args || args->size() > maximumArgumentCount) |
| 6997 return nullptr; | 6998 return nullptr; |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7157 return list.release(); | 7158 return list.release(); |
| 7158 return nullptr; | 7159 return nullptr; |
| 7159 } | 7160 } |
| 7160 | 7161 |
| 7161 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTextEmphasisStyle() | 7162 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTextEmphasisStyle() |
| 7162 { | 7163 { |
| 7163 RefPtrWillBeRawPtr<CSSPrimitiveValue> fill = nullptr; | 7164 RefPtrWillBeRawPtr<CSSPrimitiveValue> fill = nullptr; |
| 7164 RefPtrWillBeRawPtr<CSSPrimitiveValue> shape = nullptr; | 7165 RefPtrWillBeRawPtr<CSSPrimitiveValue> shape = nullptr; |
| 7165 | 7166 |
| 7166 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL
ist->next()) { | 7167 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL
ist->next()) { |
| 7167 if (value->unit() == CSSPrimitiveValue::UnitType::String) { | 7168 if (value->m_unit == CSSParserValue::String) { |
| 7168 if (fill || shape) | 7169 if (fill || shape) |
| 7169 return nullptr; | 7170 return nullptr; |
| 7170 m_valueList->next(); | 7171 m_valueList->next(); |
| 7171 return createPrimitiveStringValue(value); | 7172 return createPrimitiveStringValue(value); |
| 7172 } | 7173 } |
| 7173 | 7174 |
| 7174 if (value->id == CSSValueNone) { | 7175 if (value->id == CSSValueNone) { |
| 7175 if (fill || shape) | 7176 if (fill || shape) |
| 7176 return nullptr; | 7177 return nullptr; |
| 7177 m_valueList->next(); | 7178 m_valueList->next(); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7274 return CSSLineBoxContainValue::create(lineBoxContain); | 7275 return CSSLineBoxContainValue::create(lineBoxContain); |
| 7275 } | 7276 } |
| 7276 | 7277 |
| 7277 bool CSSPropertyParser::parseFontFeatureTag(CSSValueList* settings) | 7278 bool CSSPropertyParser::parseFontFeatureTag(CSSValueList* settings) |
| 7278 { | 7279 { |
| 7279 // Feature tag name consists of 4-letter characters. | 7280 // Feature tag name consists of 4-letter characters. |
| 7280 static const unsigned tagNameLength = 4; | 7281 static const unsigned tagNameLength = 4; |
| 7281 | 7282 |
| 7282 CSSParserValue* value = m_valueList->current(); | 7283 CSSParserValue* value = m_valueList->current(); |
| 7283 // Feature tag name comes first | 7284 // Feature tag name comes first |
| 7284 if (value->unit() != CSSPrimitiveValue::UnitType::String) | 7285 if (value->m_unit != CSSParserValue::String) |
| 7285 return false; | 7286 return false; |
| 7286 if (value->string.length() != tagNameLength) | 7287 if (value->string.length() != tagNameLength) |
| 7287 return false; | 7288 return false; |
| 7288 for (unsigned i = 0; i < tagNameLength; ++i) { | 7289 for (unsigned i = 0; i < tagNameLength; ++i) { |
| 7289 // Limits the range of characters to 0x20-0x7E, following the tag name r
ules defiend in the OpenType specification. | 7290 // Limits the range of characters to 0x20-0x7E, following the tag name r
ules defiend in the OpenType specification. |
| 7290 UChar character = value->string[i]; | 7291 UChar character = value->string[i]; |
| 7291 if (character < 0x20 || character > 0x7E) | 7292 if (character < 0x20 || character > 0x7E) |
| 7292 return false; | 7293 return false; |
| 7293 } | 7294 } |
| 7294 | 7295 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7624 break; | 7625 break; |
| 7625 | 7626 |
| 7626 case CSSPropertyClipPath: | 7627 case CSSPropertyClipPath: |
| 7627 case CSSPropertyFilter: | 7628 case CSSPropertyFilter: |
| 7628 case CSSPropertyMarkerStart: | 7629 case CSSPropertyMarkerStart: |
| 7629 case CSSPropertyMarkerMid: | 7630 case CSSPropertyMarkerMid: |
| 7630 case CSSPropertyMarkerEnd: | 7631 case CSSPropertyMarkerEnd: |
| 7631 case CSSPropertyMask: | 7632 case CSSPropertyMask: |
| 7632 if (id == CSSValueNone) { | 7633 if (id == CSSValueNone) { |
| 7633 validPrimitive = true; | 7634 validPrimitive = true; |
| 7634 } else if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 7635 } else if (value->m_unit == CSSParserValue::URI) { |
| 7635 parsedValue = CSSPrimitiveValue::create(value->string, CSSPrimitiveV
alue::UnitType::URI); | 7636 parsedValue = CSSStringValue::create(value->string, CSSStringValue::
SerializeAsURI); |
| 7636 if (parsedValue) | 7637 if (parsedValue) |
| 7637 m_valueList->next(); | 7638 m_valueList->next(); |
| 7638 } | 7639 } |
| 7639 break; | 7640 break; |
| 7640 | 7641 |
| 7641 case CSSPropertyStrokeMiterlimit: // <miterlimit> | inherit | 7642 case CSSPropertyStrokeMiterlimit: // <miterlimit> | inherit |
| 7642 validPrimitive = validUnit(value, FNumber | FNonNeg, SVGAttributeMode); | 7643 validPrimitive = validUnit(value, FNumber | FNonNeg, SVGAttributeMode); |
| 7643 break; | 7644 break; |
| 7644 | 7645 |
| 7645 case CSSPropertyStrokeOpacity: // <opacity-value> | inherit | 7646 case CSSPropertyStrokeOpacity: // <opacity-value> | inherit |
| (...skipping 20 matching lines...) Expand all Loading... |
| 7666 if (parsedValue) | 7667 if (parsedValue) |
| 7667 m_valueList->next(); | 7668 m_valueList->next(); |
| 7668 } | 7669 } |
| 7669 break; | 7670 break; |
| 7670 | 7671 |
| 7671 case CSSPropertyFill: // <paint> | inherit | 7672 case CSSPropertyFill: // <paint> | inherit |
| 7672 case CSSPropertyStroke: // <paint> | inherit | 7673 case CSSPropertyStroke: // <paint> | inherit |
| 7673 { | 7674 { |
| 7674 if (id == CSSValueNone) { | 7675 if (id == CSSValueNone) { |
| 7675 parsedValue = cssValuePool().createIdentifierValue(id); | 7676 parsedValue = cssValuePool().createIdentifierValue(id); |
| 7676 } else if (value->unit() == CSSPrimitiveValue::UnitType::URI) { | 7677 } else if (value->m_unit == CSSParserValue::URI) { |
| 7677 if (m_valueList->next()) { | 7678 if (m_valueList->next()) { |
| 7678 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::crea
teSpaceSeparated(); | 7679 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::crea
teSpaceSeparated(); |
| 7679 values->append(CSSPrimitiveValue::create(value->string, CSSP
rimitiveValue::UnitType::URI)); | 7680 values->append(CSSStringValue::create(value->string, CSSStri
ngValue::SerializeAsURI)); |
| 7680 if (m_valueList->current()->id == CSSValueNone) | 7681 if (m_valueList->current()->id == CSSValueNone) |
| 7681 parsedValue = cssValuePool().createIdentifierValue(m_val
ueList->current()->id); | 7682 parsedValue = cssValuePool().createIdentifierValue(m_val
ueList->current()->id); |
| 7682 else | 7683 else |
| 7683 parsedValue = parseColor(m_valueList->current()); | 7684 parsedValue = parseColor(m_valueList->current()); |
| 7684 if (parsedValue) { | 7685 if (parsedValue) { |
| 7685 values->append(parsedValue); | 7686 values->append(parsedValue); |
| 7686 parsedValue = values; | 7687 parsedValue = values; |
| 7687 } | 7688 } |
| 7688 } | 7689 } |
| 7689 if (!parsedValue) | 7690 if (!parsedValue) |
| 7690 parsedValue = CSSPrimitiveValue::create(value->string, CSSPr
imitiveValue::UnitType::URI); | 7691 parsedValue = CSSStringValue::create(value->string, CSSStrin
gValue::SerializeAsURI); |
| 7691 } else { | 7692 } else { |
| 7692 parsedValue = parseColor(m_valueList->current()); | 7693 parsedValue = parseColor(m_valueList->current()); |
| 7693 } | 7694 } |
| 7694 | 7695 |
| 7695 if (parsedValue) | 7696 if (parsedValue) |
| 7696 m_valueList->next(); | 7697 m_valueList->next(); |
| 7697 } | 7698 } |
| 7698 break; | 7699 break; |
| 7699 | 7700 |
| 7700 case CSSPropertyStopColor: // TODO : icccolor | 7701 case CSSPropertyStopColor: // TODO : icccolor |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7749 default: | 7750 default: |
| 7750 // If you crash here, it's because you added a css property and are not
handling it | 7751 // If you crash here, it's because you added a css property and are not
handling it |
| 7751 // in either this switch statement or the one in CSSPropertyParser::pars
eValue | 7752 // in either this switch statement or the one in CSSPropertyParser::pars
eValue |
| 7752 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", propId); | 7753 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", propId); |
| 7753 return false; | 7754 return false; |
| 7754 } | 7755 } |
| 7755 | 7756 |
| 7756 if (validPrimitive) { | 7757 if (validPrimitive) { |
| 7757 if (id) | 7758 if (id) |
| 7758 parsedValue = CSSPrimitiveValue::createIdentifier(id); | 7759 parsedValue = CSSPrimitiveValue::createIdentifier(id); |
| 7759 else if (value->unit() == CSSPrimitiveValue::UnitType::String) | 7760 else if (value->m_unit == CSSParserValue::String) |
| 7760 parsedValue = CSSPrimitiveValue::create(value->string, value->unit()
); | 7761 parsedValue = CSSStringValue::create(value->string, CSSStringValue::
SerializeAsString); |
| 7761 else if (value->unit() >= CSSPrimitiveValue::UnitType::Number && value->
unit() <= CSSPrimitiveValue::UnitType::Kilohertz) | 7762 else if (value->unit() >= CSSPrimitiveValue::UnitType::Number && value->
unit() <= CSSPrimitiveValue::UnitType::Kilohertz) |
| 7762 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit()
); | 7763 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit()
); |
| 7763 else if (value->unit() == CSSPrimitiveValue::UnitType::Rems || value->un
it() == CSSPrimitiveValue::UnitType::Chs) | 7764 else if (value->unit() == CSSPrimitiveValue::UnitType::Rems || value->un
it() == CSSPrimitiveValue::UnitType::Chs) |
| 7764 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit()
); | 7765 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit()
); |
| 7765 else if (value->unit() == CSSPrimitiveValue::UnitType::QuirkyEms) | 7766 else if (value->unit() == CSSPrimitiveValue::UnitType::QuirkyEms) |
| 7766 parsedValue = CSSPrimitiveValue::createAllowingMarginQuirk(value->fV
alue, CSSPrimitiveValue::UnitType::Ems); | 7767 parsedValue = CSSPrimitiveValue::createAllowingMarginQuirk(value->fV
alue, CSSPrimitiveValue::UnitType::Ems); |
| 7767 if (isCalculation(value)) { | 7768 if (isCalculation(value)) { |
| 7768 // FIXME calc() http://webkit.org/b/16662 : actually create a CSSPri
mitiveValue here, ie | 7769 // FIXME calc() http://webkit.org/b/16662 : actually create a CSSPri
mitiveValue here, ie |
| 7769 // parsedValue = CSSPrimitiveValue::create(m_parsedCalculation.relea
se()); | 7770 // parsedValue = CSSPrimitiveValue::create(m_parsedCalculation.relea
se()); |
| 7770 m_parsedCalculation.release(); | 7771 m_parsedCalculation.release(); |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8057 // FIXME: Add support for <url>, <basic-shape>, <geometry-box>. | 8058 // FIXME: Add support for <url>, <basic-shape>, <geometry-box>. |
| 8058 if (value->m_unit != CSSParserValue::Function || value->function->id != CSSV
aluePath) | 8059 if (value->m_unit != CSSParserValue::Function || value->function->id != CSSV
aluePath) |
| 8059 return nullptr; | 8060 return nullptr; |
| 8060 | 8061 |
| 8061 // FIXME: Add support for <fill-rule>. | 8062 // FIXME: Add support for <fill-rule>. |
| 8062 CSSParserValueList* functionArgs = value->function->args.get(); | 8063 CSSParserValueList* functionArgs = value->function->args.get(); |
| 8063 if (!functionArgs || functionArgs->size() != 1 || !functionArgs->current()) | 8064 if (!functionArgs || functionArgs->size() != 1 || !functionArgs->current()) |
| 8064 return nullptr; | 8065 return nullptr; |
| 8065 | 8066 |
| 8066 CSSParserValue* arg = functionArgs->current(); | 8067 CSSParserValue* arg = functionArgs->current(); |
| 8067 if (arg->unit() != CSSPrimitiveValue::UnitType::String) | 8068 if (arg->m_unit != CSSParserValue::String) |
| 8068 return nullptr; | 8069 return nullptr; |
| 8069 | 8070 |
| 8070 String pathString = arg->string; | 8071 String pathString = arg->string; |
| 8071 Path path; | 8072 Path path; |
| 8072 if (!buildPathFromString(pathString, path)) | 8073 if (!buildPathFromString(pathString, path)) |
| 8073 return nullptr; | 8074 return nullptr; |
| 8074 | 8075 |
| 8075 m_valueList->next(); | 8076 m_valueList->next(); |
| 8076 return CSSPathValue::create(pathString); | 8077 return CSSPathValue::create(pathString); |
| 8077 } | 8078 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8094 } | 8095 } |
| 8095 } | 8096 } |
| 8096 | 8097 |
| 8097 if (!list->length()) | 8098 if (!list->length()) |
| 8098 return nullptr; | 8099 return nullptr; |
| 8099 | 8100 |
| 8100 return list.release(); | 8101 return list.release(); |
| 8101 } | 8102 } |
| 8102 | 8103 |
| 8103 } // namespace blink | 8104 } // namespace blink |
| OLD | NEW |