| 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 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 case CSSPropertyInternalCallback: | 677 case CSSPropertyInternalCallback: |
| 678 // This property is only injected programmatically, not parsed from styl
esheets. | 678 // This property is only injected programmatically, not parsed from styl
esheets. |
| 679 return false; | 679 return false; |
| 680 case CSSPropertyColumnFill: | 680 case CSSPropertyColumnFill: |
| 681 if (RuntimeEnabledFeatures::regionBasedColumnsEnabled()) { | 681 if (RuntimeEnabledFeatures::regionBasedColumnsEnabled()) { |
| 682 if (valueID == CSSValueAuto || valueID == CSSValueBalance) | 682 if (valueID == CSSValueAuto || valueID == CSSValueBalance) |
| 683 return true; | 683 return true; |
| 684 } | 684 } |
| 685 break; | 685 break; |
| 686 case CSSPropertyAlignContent: | 686 case CSSPropertyAlignContent: |
| 687 // FIXME: Per CSS alignment, this property should accept an optional <ov
erflow-position>. We should share this parsing code with 'justify-self'. |
| 687 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || value
ID == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSp
aceAround || valueID == CSSValueStretch) | 688 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || value
ID == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSp
aceAround || valueID == CSSValueStretch) |
| 688 return true; | 689 return true; |
| 689 break; | 690 break; |
| 690 case CSSPropertyAlignItems: | 691 case CSSPropertyAlignItems: |
| 692 // FIXME: Per CSS alignment, this property should accept the same argume
nts as 'justify-self' so we should share its parsing code. |
| 691 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueBaseline || valueID == CSSValueStretch
) | 693 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueBaseline || valueID == CSSValueStretch
) |
| 692 return true; | 694 return true; |
| 693 break; | 695 break; |
| 694 case CSSPropertyAlignSelf: | 696 case CSSPropertyAlignSelf: |
| 697 // FIXME: Per CSS alignment, this property should accept the same argume
nts as 'justify-self' so we should share its parsing code. |
| 695 if (valueID == CSSValueAuto || valueID == CSSValueFlexStart || valueID =
= CSSValueFlexEnd || valueID == CSSValueCenter || valueID == CSSValueBaseline ||
valueID == CSSValueStretch) | 698 if (valueID == CSSValueAuto || valueID == CSSValueFlexStart || valueID =
= CSSValueFlexEnd || valueID == CSSValueCenter || valueID == CSSValueBaseline ||
valueID == CSSValueStretch) |
| 696 return true; | 699 return true; |
| 697 break; | 700 break; |
| 698 case CSSPropertyFlexDirection: | 701 case CSSPropertyFlexDirection: |
| 699 if (valueID == CSSValueRow || valueID == CSSValueRowReverse || valueID =
= CSSValueColumn || valueID == CSSValueColumnReverse) | 702 if (valueID == CSSValueRow || valueID == CSSValueRowReverse || valueID =
= CSSValueColumn || valueID == CSSValueColumnReverse) |
| 700 return true; | 703 return true; |
| 701 break; | 704 break; |
| 702 case CSSPropertyFlexWrap: | 705 case CSSPropertyFlexWrap: |
| 703 if (valueID == CSSValueNowrap || valueID == CSSValueWrap || valueID == C
SSValueWrapReverse) | 706 if (valueID == CSSValueNowrap || valueID == CSSValueWrap || valueID == C
SSValueWrapReverse) |
| 704 return true; | 707 return true; |
| 705 break; | 708 break; |
| 706 case CSSPropertyJustifyContent: | 709 case CSSPropertyJustifyContent: |
| 710 // FIXME: Per CSS alignment, this property should accept an optional <ov
erflow-position>. We should share this parsing code with 'justify-self'. |
| 707 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSpa
ceAround) | 711 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSpa
ceAround) |
| 708 return true; | 712 return true; |
| 709 break; | 713 break; |
| 710 case CSSPropertyFontKerning: | 714 case CSSPropertyFontKerning: |
| 711 if (valueID == CSSValueAuto || valueID == CSSValueNormal || valueID == C
SSValueNone) | 715 if (valueID == CSSValueAuto || valueID == CSSValueNormal || valueID == C
SSValueNone) |
| 712 return true; | 716 return true; |
| 713 break; | 717 break; |
| 714 case CSSPropertyWebkitFontSmoothing: | 718 case CSSPropertyWebkitFontSmoothing: |
| 715 if (valueID == CSSValueAuto || valueID == CSSValueNone || valueID == CSS
ValueAntialiased || valueID == CSSValueSubpixelAntialiased) | 719 if (valueID == CSSValueAuto || valueID == CSSValueNone || valueID == CSS
ValueAntialiased || valueID == CSSValueSubpixelAntialiased) |
| 716 return true; | 720 return true; |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1221 { | 1225 { |
| 1222 if (!document) | 1226 if (!document) |
| 1223 return false; | 1227 return false; |
| 1224 | 1228 |
| 1225 CSSParserString cssColor; | 1229 CSSParserString cssColor; |
| 1226 cssColor.init(string); | 1230 cssColor.init(string); |
| 1227 CSSValueID id = cssValueKeywordID(cssColor); | 1231 CSSValueID id = cssValueKeywordID(cssColor); |
| 1228 if (id <= 0) | 1232 if (id <= 0) |
| 1229 return false; | 1233 return false; |
| 1230 | 1234 |
| 1231 color = RenderTheme::theme().systemColor(id).rgb(); | 1235 Color parsedColor = RenderTheme::theme().systemColor(id); |
| 1232 return true; | 1236 color = parsedColor.rgb(); |
| 1237 return parsedColor.isValid(); |
| 1233 } | 1238 } |
| 1234 | 1239 |
| 1235 void BisonCSSParser::parseSelector(const String& string, CSSSelectorList& select
orList) | 1240 void BisonCSSParser::parseSelector(const String& string, CSSSelectorList& select
orList) |
| 1236 { | 1241 { |
| 1237 m_selectorListForParseSelector = &selectorList; | 1242 m_selectorListForParseSelector = &selectorList; |
| 1238 | 1243 |
| 1239 setupParser("@-internal-selector ", string, ""); | 1244 setupParser("@-internal-selector ", string, ""); |
| 1240 | 1245 |
| 1241 cssyyparse(this); | 1246 cssyyparse(this); |
| 1242 | 1247 |
| (...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2419 case CSSPropertyWebkitTransitionProperty: { | 2424 case CSSPropertyWebkitTransitionProperty: { |
| 2420 RefPtr<CSSValue> val; | 2425 RefPtr<CSSValue> val; |
| 2421 AnimationParseContext context; | 2426 AnimationParseContext context; |
| 2422 if (parseAnimationProperty(propId, val, context)) { | 2427 if (parseAnimationProperty(propId, val, context)) { |
| 2423 addPropertyWithPrefixingVariant(propId, val.release(), important); | 2428 addPropertyWithPrefixingVariant(propId, val.release(), important); |
| 2424 return true; | 2429 return true; |
| 2425 } | 2430 } |
| 2426 return false; | 2431 return false; |
| 2427 } | 2432 } |
| 2428 | 2433 |
| 2434 case CSSPropertyJustifySelf: |
| 2435 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) |
| 2436 return false; |
| 2437 |
| 2438 return parseJustifySelf(propId, important); |
| 2429 case CSSPropertyGridAutoColumns: | 2439 case CSSPropertyGridAutoColumns: |
| 2430 case CSSPropertyGridAutoRows: | 2440 case CSSPropertyGridAutoRows: |
| 2431 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) | 2441 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) |
| 2432 return false; | 2442 return false; |
| 2433 parsedValue = parseGridTrackSize(*m_valueList); | 2443 parsedValue = parseGridTrackSize(*m_valueList); |
| 2434 break; | 2444 break; |
| 2435 | 2445 |
| 2436 case CSSPropertyGridDefinitionColumns: | 2446 case CSSPropertyGridDefinitionColumns: |
| 2437 case CSSPropertyGridDefinitionRows: | 2447 case CSSPropertyGridDefinitionRows: |
| 2438 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) | 2448 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) |
| (...skipping 2634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5073 i++; | 5083 i++; |
| 5074 } | 5084 } |
| 5075 if (valid) { | 5085 if (valid) { |
| 5076 addProperty(propId, cssValuePool().createValue(rect.release()), importan
t); | 5086 addProperty(propId, cssValuePool().createValue(rect.release()), importan
t); |
| 5077 m_valueList->next(); | 5087 m_valueList->next(); |
| 5078 return true; | 5088 return true; |
| 5079 } | 5089 } |
| 5080 return false; | 5090 return false; |
| 5081 } | 5091 } |
| 5082 | 5092 |
| 5093 static bool isItemPositionKeyword(CSSValueID id) |
| 5094 { |
| 5095 return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter |
| 5096 || id == CSSValueSelfStart || id == CSSValueSelfEnd || id == CSSValueFle
xStart |
| 5097 || id == CSSValueFlexEnd || id == CSSValueLeft || id == CSSValueRight; |
| 5098 } |
| 5099 |
| 5100 bool BisonCSSParser::parseJustifySelf(CSSPropertyID propId, bool important) |
| 5101 { |
| 5102 // auto | baseline | stretch | [<item-position> && <overflow-position>? ] |
| 5103 // <item-position> = center | start | end | self-start | self-end | flex-sta
rt | flex-end | left | right; |
| 5104 // <overflow-position> = true | safe |
| 5105 |
| 5106 CSSParserValue* value = m_valueList->current(); |
| 5107 |
| 5108 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id
== CSSValueStretch) { |
| 5109 if (m_valueList->next()) |
| 5110 return false; |
| 5111 |
| 5112 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp
ortant); |
| 5113 return true; |
| 5114 } |
| 5115 |
| 5116 RefPtr<CSSPrimitiveValue> position = 0; |
| 5117 RefPtr<CSSPrimitiveValue> overflowAlignmentKeyword = 0; |
| 5118 if (isItemPositionKeyword(value->id)) { |
| 5119 position = cssValuePool().createIdentifierValue(value->id); |
| 5120 value = m_valueList->next(); |
| 5121 if (value) { |
| 5122 if (value->id == CSSValueTrue || value->id == CSSValueSafe) |
| 5123 overflowAlignmentKeyword = cssValuePool().createIdentifierValue(
value->id); |
| 5124 else |
| 5125 return false; |
| 5126 } |
| 5127 } else if (value->id == CSSValueTrue || value->id == CSSValueSafe) { |
| 5128 overflowAlignmentKeyword = cssValuePool().createIdentifierValue(value->i
d); |
| 5129 value = m_valueList->next(); |
| 5130 if (value) { |
| 5131 if (isItemPositionKeyword(value->id)) |
| 5132 position = cssValuePool().createIdentifierValue(value->id); |
| 5133 else |
| 5134 return false; |
| 5135 } |
| 5136 } else { |
| 5137 return false; |
| 5138 } |
| 5139 |
| 5140 if (m_valueList->next()) |
| 5141 return false; |
| 5142 |
| 5143 ASSERT(position); |
| 5144 if (overflowAlignmentKeyword) |
| 5145 addProperty(propId, createPrimitiveValuePair(position, overflowAlignment
Keyword), important); |
| 5146 else |
| 5147 addProperty(propId, position.release(), important); |
| 5148 |
| 5149 return true; |
| 5150 } |
| 5151 |
| 5083 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeRectangle(CSSParserValu
eList* args) | 5152 PassRefPtr<CSSBasicShape> BisonCSSParser::parseBasicShapeRectangle(CSSParserValu
eList* args) |
| 5084 { | 5153 { |
| 5085 ASSERT(args); | 5154 ASSERT(args); |
| 5086 | 5155 |
| 5087 // rect(x, y, width, height, [[rx], ry]) | 5156 // rect(x, y, width, height, [[rx], ry]) |
| 5088 if (args->size() != 7 && args->size() != 9 && args->size() != 11) | 5157 if (args->size() != 7 && args->size() != 9 && args->size() != 11) |
| 5089 return 0; | 5158 return 0; |
| 5090 | 5159 |
| 5091 RefPtr<CSSBasicShapeRectangle> shape = CSSBasicShapeRectangle::create(); | 5160 RefPtr<CSSBasicShapeRectangle> shape = CSSBasicShapeRectangle::create(); |
| 5092 | 5161 |
| (...skipping 5429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10522 { | 10591 { |
| 10523 // The tokenizer checks for the construct of an+b. | 10592 // The tokenizer checks for the construct of an+b. |
| 10524 // However, since the {ident} rule precedes the {nth} rule, some of those | 10593 // However, since the {ident} rule precedes the {nth} rule, some of those |
| 10525 // tokens are identified as string literal. Furthermore we need to accept | 10594 // tokens are identified as string literal. Furthermore we need to accept |
| 10526 // "odd" and "even" which does not match to an+b. | 10595 // "odd" and "even" which does not match to an+b. |
| 10527 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") | 10596 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") |
| 10528 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); | 10597 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); |
| 10529 } | 10598 } |
| 10530 | 10599 |
| 10531 } | 10600 } |
| OLD | NEW |