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

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp

Issue 1429003004: Parse text-emphasis shorthand in CSSPropertyParser with CSSParserTokens (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/css/parser/CSSPropertyParser.h" 6 #include "core/css/parser/CSSPropertyParser.h"
7 7
8 #include "core/StylePropertyShorthand.h" 8 #include "core/StylePropertyShorthand.h"
9 #include "core/css/CSSCalculationValue.h" 9 #include "core/css/CSSCalculationValue.h"
10 #include "core/css/CSSCustomIdentValue.h" 10 #include "core/css/CSSCustomIdentValue.h"
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1509 if (!list->length()) 1509 if (!list->length())
1510 return nullptr; 1510 return nullptr;
1511 return list.release(); 1511 return list.release();
1512 } 1512 }
1513 1513
1514 static PassRefPtrWillBeRawPtr<CSSValue> consumeMotionPath(CSSParserTokenRange& r ange) 1514 static PassRefPtrWillBeRawPtr<CSSValue> consumeMotionPath(CSSParserTokenRange& r ange)
1515 { 1515 {
1516 CSSValueID id = range.peek().id(); 1516 CSSValueID id = range.peek().id();
1517 if (id == CSSValueNone) 1517 if (id == CSSValueNone)
1518 return consumeIdent(range); 1518 return consumeIdent(range);
1519
1520 // FIXME: Add support for <url>, <basic-shape>, <geometry-box>. 1519 // FIXME: Add support for <url>, <basic-shape>, <geometry-box>.
1521 if (range.peek().functionId() != CSSValuePath) 1520 if (range.peek().functionId() != CSSValuePath)
1522 return nullptr; 1521 return nullptr;
1523 1522
1524 // FIXME: Add support for <fill-rule>. 1523 // FIXME: Add support for <fill-rule>.
1525 CSSParserTokenRange functionRange = range; 1524 CSSParserTokenRange functionRange = range;
1526 CSSParserTokenRange functionArgs = consumeFunction(functionRange); 1525 CSSParserTokenRange functionArgs = consumeFunction(functionRange);
1527 1526
1528 if (functionArgs.peek().type() != StringToken) 1527 if (functionArgs.peek().type() != StringToken)
1529 return nullptr; 1528 return nullptr;
(...skipping 17 matching lines...) Expand all
1547 angle = consumeAngle(range, cssParserMode); 1546 angle = consumeAngle(range, cssParserMode);
1548 1547
1549 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 1548 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
1550 if (keyword) 1549 if (keyword)
1551 list->append(keyword.release()); 1550 list->append(keyword.release());
1552 if (angle) 1551 if (angle)
1553 list->append(angle.release()); 1552 list->append(angle.release());
1554 return list.release(); 1553 return list.release();
1555 } 1554 }
1556 1555
1556 static PassRefPtrWillBeRawPtr<CSSValue> consumeTextEmphasisStyle(CSSParserTokenR ange& range)
1557 {
1558 CSSValueID id = range.peek().id();
1559 if (id == CSSValueNone)
1560 return consumeIdent(range);
1561
1562 if (RefPtrWillBeRawPtr<CSSValue> textEmphasisStyle = consumeString(range))
1563 return textEmphasisStyle.release();
1564
1565 RefPtrWillBeRawPtr<CSSPrimitiveValue> fill = consumeIdent<CSSValueFilled, CS SValueOpen>(range);
1566 RefPtrWillBeRawPtr<CSSPrimitiveValue> shape = consumeIdent<CSSValueDot, CSSV alueCircle, CSSValueDoubleCircle, CSSValueTriangle, CSSValueSesame>(range);
1567 if (!fill)
1568 fill = consumeIdent<CSSValueFilled, CSSValueOpen>(range);
1569 if (fill && shape) {
1570 RefPtrWillBeRawPtr<CSSValueList> parsedValues = CSSValueList::createSpac eSeparated();
1571 parsedValues->append(fill.release());
1572 parsedValues->append(shape.release());
1573 return parsedValues.release();
1574 }
1575 if (fill)
1576 return fill.release();
1577 if (shape)
1578 return shape.release();
1579 return nullptr;
1580 }
1581
1557 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID unresolvedProperty) 1582 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID unresolvedProperty)
1558 { 1583 {
1559 CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); 1584 CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty);
1560 m_range.consumeWhitespace(); 1585 m_range.consumeWhitespace();
1561 switch (property) { 1586 switch (property) {
1562 case CSSPropertyWillChange: 1587 case CSSPropertyWillChange:
1563 return consumeWillChange(m_range); 1588 return consumeWillChange(m_range);
1564 case CSSPropertyPage: 1589 case CSSPropertyPage:
1565 return consumePage(m_range); 1590 return consumePage(m_range);
1566 case CSSPropertyQuotes: 1591 case CSSPropertyQuotes:
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 case CSSPropertyTransitionTimingFunction: 1674 case CSSPropertyTransitionTimingFunction:
1650 return consumeAnimationPropertyList(property, m_range, m_context, unreso lvedProperty == CSSPropertyAliasWebkitAnimationName); 1675 return consumeAnimationPropertyList(property, m_range, m_context, unreso lvedProperty == CSSPropertyAliasWebkitAnimationName);
1651 case CSSPropertyOrphans: 1676 case CSSPropertyOrphans:
1652 case CSSPropertyWidows: 1677 case CSSPropertyWidows:
1653 return consumeWidowsOrOrphans(m_range); 1678 return consumeWidowsOrOrphans(m_range);
1654 case CSSPropertyTextDecorationColor: 1679 case CSSPropertyTextDecorationColor:
1655 ASSERT(RuntimeEnabledFeatures::css3TextDecorationsEnabled()); 1680 ASSERT(RuntimeEnabledFeatures::css3TextDecorationsEnabled());
1656 return consumeColor(m_range, m_context); 1681 return consumeColor(m_range, m_context);
1657 case CSSPropertyWebkitTextFillColor: 1682 case CSSPropertyWebkitTextFillColor:
1658 case CSSPropertyWebkitTapHighlightColor: 1683 case CSSPropertyWebkitTapHighlightColor:
1684 case CSSPropertyWebkitTextEmphasisColor:
1659 return consumeColor(m_range, m_context); 1685 return consumeColor(m_range, m_context);
1660 case CSSPropertyColor: 1686 case CSSPropertyColor:
1661 return consumeColor(m_range, m_context, inQuirksMode()); 1687 return consumeColor(m_range, m_context, inQuirksMode());
1662 case CSSPropertyZIndex: 1688 case CSSPropertyZIndex:
1663 return consumeZIndex(m_range); 1689 return consumeZIndex(m_range);
1664 case CSSPropertyTextShadow: // CSS2 property, dropped in CSS2.1, back in CSS 3, so treat as CSS3 1690 case CSSPropertyTextShadow: // CSS2 property, dropped in CSS2.1, back in CSS 3, so treat as CSS3
1665 case CSSPropertyBoxShadow: 1691 case CSSPropertyBoxShadow:
1666 return consumeShadow(m_range, m_context, property == CSSPropertyBoxShado w); 1692 return consumeShadow(m_range, m_context, property == CSSPropertyBoxShado w);
1667 case CSSPropertyWebkitFilter: 1693 case CSSPropertyWebkitFilter:
1668 case CSSPropertyBackdropFilter: 1694 case CSSPropertyBackdropFilter:
1669 return consumeFilter(m_range, m_context); 1695 return consumeFilter(m_range, m_context);
1670 case CSSPropertyWebkitTextDecorationsInEffect: 1696 case CSSPropertyWebkitTextDecorationsInEffect:
1671 case CSSPropertyTextDecorationLine: 1697 case CSSPropertyTextDecorationLine:
1672 return consumeTextDecorationLine(m_range); 1698 return consumeTextDecorationLine(m_range);
1673 case CSSPropertyMotionPath: 1699 case CSSPropertyMotionPath:
1674 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled()); 1700 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
1675 return consumeMotionPath(m_range); 1701 return consumeMotionPath(m_range);
1676 case CSSPropertyMotionOffset: 1702 case CSSPropertyMotionOffset:
1677 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled()); 1703 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
1678 return consumeLengthOrPercent(m_range, m_context.mode(), ValueRangeAll); 1704 return consumeLengthOrPercent(m_range, m_context.mode(), ValueRangeAll);
1679 case CSSPropertyMotionRotation: 1705 case CSSPropertyMotionRotation:
1680 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled()); 1706 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
1681 return consumeMotionRotation(m_range, m_context.mode()); 1707 return consumeMotionRotation(m_range, m_context.mode());
1708 case CSSPropertyWebkitTextEmphasisStyle:
1709 return consumeTextEmphasisStyle(m_range);
1682 default: 1710 default:
1683 return nullptr; 1711 return nullptr;
1684 } 1712 }
1685 } 1713 }
1686 1714
1687 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range) 1715 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range)
1688 { 1716 {
1689 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated (); 1717 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated ();
1690 1718
1691 do { 1719 do {
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 m_currentShorthand = oldShorthand; 2176 m_currentShorthand = oldShorthand;
2149 RefPtrWillBeRawPtr<CSSValue> textDecoration = consumeTextDecorationLine( m_range); 2177 RefPtrWillBeRawPtr<CSSValue> textDecoration = consumeTextDecorationLine( m_range);
2150 if (!textDecoration || !m_range.atEnd()) 2178 if (!textDecoration || !m_range.atEnd())
2151 return false; 2179 return false;
2152 addProperty(CSSPropertyTextDecoration, textDecoration.release(), importa nt); 2180 addProperty(CSSPropertyTextDecoration, textDecoration.release(), importa nt);
2153 return true; 2181 return true;
2154 } 2182 }
2155 case CSSPropertyMotion: 2183 case CSSPropertyMotion:
2156 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled()); 2184 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
2157 return consumeShorthandGreedily(motionShorthand(), important); 2185 return consumeShorthandGreedily(motionShorthand(), important);
2186 case CSSPropertyWebkitTextEmphasis:
2187 return consumeShorthandGreedily(webkitTextEmphasisShorthand(), important );
2158 default: 2188 default:
2159 m_currentShorthand = oldShorthand; 2189 m_currentShorthand = oldShorthand;
2160 return false; 2190 return false;
2161 } 2191 }
2162 } 2192 }
2163 2193
2164 } // namespace blink 2194 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698