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 1376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1387 } | 1387 } |
1388 | 1388 |
1389 void CSSParser::addPropertyWithPrefixingVariant(CSSPropertyID propId, PassRefPtr
<CSSValue> value, bool important, bool implicit) | 1389 void CSSParser::addPropertyWithPrefixingVariant(CSSPropertyID propId, PassRefPtr
<CSSValue> value, bool important, bool implicit) |
1390 { | 1390 { |
1391 RefPtr<CSSValue> val = value.get(); | 1391 RefPtr<CSSValue> val = value.get(); |
1392 addProperty(propId, value, important, implicit); | 1392 addProperty(propId, value, important, implicit); |
1393 | 1393 |
1394 CSSPropertyID prefixingVariant = prefixingVariantForPropertyId(propId); | 1394 CSSPropertyID prefixingVariant = prefixingVariantForPropertyId(propId); |
1395 if (prefixingVariant == propId) | 1395 if (prefixingVariant == propId) |
1396 return; | 1396 return; |
1397 addProperty(prefixingVariant, val.release(), important, implicit); | 1397 |
| 1398 if (m_currentShorthand) { |
| 1399 // We can't use ShorthandScope here as we can already be inside one (e.g
we are parsing CSSTransition). |
| 1400 m_currentShorthand = prefixingVariantForPropertyId(m_currentShorthand); |
| 1401 addProperty(prefixingVariant, val.release(), important, implicit); |
| 1402 m_currentShorthand = prefixingVariantForPropertyId(m_currentShorthand); |
| 1403 } else { |
| 1404 addProperty(prefixingVariant, val.release(), important, implicit); |
| 1405 } |
1398 } | 1406 } |
1399 | 1407 |
1400 void CSSParser::addProperty(CSSPropertyID propId, PassRefPtr<CSSValue> value, bo
ol important, bool implicit) | 1408 void CSSParser::addProperty(CSSPropertyID propId, PassRefPtr<CSSValue> value, bo
ol important, bool implicit) |
1401 { | 1409 { |
1402 m_parsedProperties.append(CSSProperty(propId, value, important, m_currentSho
rthand, m_implicitShorthand || implicit)); | 1410 CSSPrimitiveValue* primitiveValue = value->isPrimitiveValue() ? toCSSPrimiti
veValue(value.get()) : 0; |
| 1411 // This property doesn't belong to a shorthand or is a CSS variable (which w
ill be resolved later). |
| 1412 if (!m_currentShorthand || (primitiveValue && primitiveValue->isVariableName
())) { |
| 1413 m_parsedProperties.append(CSSProperty(propId, value, important, false, C
SSPropertyInvalid, m_implicitShorthand || implicit)); |
| 1414 return; |
| 1415 } |
| 1416 |
| 1417 const Vector<StylePropertyShorthand> shorthands = matchingShorthandsForLongh
and(propId); |
| 1418 // The longhand does not belong to multiple shorthands. |
| 1419 if (shorthands.size() == 1) |
| 1420 m_parsedProperties.append(CSSProperty(propId, value, important, true, CS
SPropertyInvalid, m_implicitShorthand || implicit)); |
| 1421 else |
| 1422 m_parsedProperties.append(CSSProperty(propId, value, important, true, in
dexOfShorthandForLonghand(m_currentShorthand, shorthands), m_implicitShorthand |
| implicit)); |
1403 } | 1423 } |
1404 | 1424 |
1405 void CSSParser::rollbackLastProperties(int num) | 1425 void CSSParser::rollbackLastProperties(int num) |
1406 { | 1426 { |
1407 ASSERT(num >= 0); | 1427 ASSERT(num >= 0); |
1408 ASSERT(m_parsedProperties.size() >= static_cast<unsigned>(num)); | 1428 ASSERT(m_parsedProperties.size() >= static_cast<unsigned>(num)); |
1409 m_parsedProperties.shrink(m_parsedProperties.size() - num); | 1429 m_parsedProperties.shrink(m_parsedProperties.size() - num); |
1410 } | 1430 } |
1411 | 1431 |
1412 void CSSParser::clearProperties() | 1432 void CSSParser::clearProperties() |
(...skipping 10355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11768 { | 11788 { |
11769 // The tokenizer checks for the construct of an+b. | 11789 // The tokenizer checks for the construct of an+b. |
11770 // However, since the {ident} rule precedes the {nth} rule, some of those | 11790 // However, since the {ident} rule precedes the {nth} rule, some of those |
11771 // tokens are identified as string literal. Furthermore we need to accept | 11791 // tokens are identified as string literal. Furthermore we need to accept |
11772 // "odd" and "even" which does not match to an+b. | 11792 // "odd" and "even" which does not match to an+b. |
11773 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") | 11793 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") |
11774 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); | 11794 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); |
11775 } | 11795 } |
11776 | 11796 |
11777 } | 11797 } |
OLD | NEW |