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

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

Issue 1377203002: Move line-height property handling into CSSPropertyParser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test failures Created 5 years, 2 months 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/CSSFontFaceSrcValue.h" 10 #include "core/css/CSSFontFaceSrcValue.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 if (calculation->category() != CalcNumber || !calculation->isInt()) 176 if (calculation->category() != CalcNumber || !calculation->isInt())
177 return nullptr; 177 return nullptr;
178 double value = calculation->doubleValue(); 178 double value = calculation->doubleValue();
179 if (value < minimumValue) 179 if (value < minimumValue)
180 return nullptr; 180 return nullptr;
181 return calcParser.consumeNumber(); 181 return calcParser.consumeNumber();
182 } 182 }
183 return nullptr; 183 return nullptr;
184 } 184 }
185 185
186 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRan ge& range, ValueRange valueRange)
187 {
188 const CSSParserToken& token = range.peek();
189 if (token.type() == NumberToken) {
190 if (valueRange == ValueRangeNonNegative && token.numericValue() < 0)
191 return nullptr;
192 return cssValuePool().createValue(range.consumeIncludingWhitespace().num ericValue(), token.unitType());
193 }
194 CalcParser calcParser(range, ValueRangeAll);
195 if (const CSSCalcValue* calculation = calcParser.value()) {
196 if (calculation->category() != CalcNumber || (valueRange == ValueRangeNo nNegative && calculation->isNegative()))
alancutter (OOO until 2018) 2015/10/02 01:54:10 I don't think calcs should be subject to parse tim
197 return nullptr;
198 return calcParser.consumeValue();
199 }
200 return nullptr;
201 }
202
186 inline bool shouldAcceptUnitlessValues(double fValue, CSSParserMode cssParserMod e, UnitlessQuirk unitless) 203 inline bool shouldAcceptUnitlessValues(double fValue, CSSParserMode cssParserMod e, UnitlessQuirk unitless)
187 { 204 {
188 // Quirks mode for certain properties and presentation attributes accept uni t-less values for certain units. 205 // Quirks mode for certain properties and presentation attributes accept uni t-less values for certain units.
189 return !fValue // 0 can always be unitless. 206 return !fValue // 0 can always be unitless.
190 || isUnitLessLengthParsingEnabledForMode(cssParserMode) // HTML and SVG attribute values can always be unitless. 207 || isUnitLessLengthParsingEnabledForMode(cssParserMode) // HTML and SVG attribute values can always be unitless.
191 || (cssParserMode == HTMLQuirksMode && (unitless == UnitlessQuirk::Allow )); 208 || (cssParserMode == HTMLQuirksMode && (unitless == UnitlessQuirk::Allow ));
192 } 209 }
193 210
194 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLength(CSSParserTokenRan ge& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk uni tless = UnitlessQuirk::Forbid) 211 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLength(CSSParserTokenRan ge& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk uni tless = UnitlessQuirk::Forbid)
195 { 212 {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 return cssValuePool().createValue(range.consumeIncludingWhitespace().num ericValue(), CSSPrimitiveValue::UnitType::Percentage); 262 return cssValuePool().createValue(range.consumeIncludingWhitespace().num ericValue(), CSSPrimitiveValue::UnitType::Percentage);
246 } 263 }
247 CalcParser calcParser(range, valueRange); 264 CalcParser calcParser(range, valueRange);
248 if (const CSSCalcValue* calculation = calcParser.value()) { 265 if (const CSSCalcValue* calculation = calcParser.value()) {
249 if (calculation->category() == CalcLength || calculation->category() == CalcPercent || calculation->category() == CalcPercentLength) 266 if (calculation->category() == CalcLength || calculation->category() == CalcPercent || calculation->category() == CalcPercentLength)
250 return calcParser.consumeValue(); 267 return calcParser.consumeValue();
251 } 268 }
252 return nullptr; 269 return nullptr;
253 } 270 }
254 271
272 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeNumberOrPercent(CSSParse rTokenRange& range, ValueRange valueRange)
273 {
274 const CSSParserToken& token = range.peek();
275 if (token.type() == NumberToken)
276 return consumeNumber(range, valueRange);
277 if (token.type() == PercentageToken) {
278 if (valueRange == ValueRangeNonNegative && token.numericValue() < 0)
279 return nullptr;
280 return cssValuePool().createValue(range.consumeIncludingWhitespace().num ericValue(), CSSPrimitiveValue::UnitType::Percentage);
281 }
282 CalcParser calcParser(range, valueRange);
283 if (const CSSCalcValue* calculation = calcParser.value()) {
284 if (!(calculation->category() == CalcNumber || calculation->category() = = CalcPercent || calculation->category() == CalcPercentNumber))
285 return nullptr;
286 if (valueRange == ValueRangeNonNegative && calculation->isNegative())
287 return nullptr;
288 return calcParser.consumeValue();
289 }
290 return nullptr;
291 }
292
255 static inline bool isCSSWideKeyword(const CSSValueID& id) 293 static inline bool isCSSWideKeyword(const CSSValueID& id)
256 { 294 {
257 return id == CSSValueInitial || id == CSSValueInherit || id == CSSValueUnset || id == CSSValueDefault; 295 return id == CSSValueInitial || id == CSSValueInherit || id == CSSValueUnset || id == CSSValueDefault;
258 } 296 }
259 297
260 // Methods for consuming non-shorthand properties starts here. 298 // Methods for consuming non-shorthand properties starts here.
261 static PassRefPtrWillBeRawPtr<CSSValue> consumeWillChange(CSSParserTokenRange& r ange) 299 static PassRefPtrWillBeRawPtr<CSSValue> consumeWillChange(CSSParserTokenRange& r ange)
262 { 300 {
263 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated (); 301 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated ();
264 if (range.peek().id() == CSSValueAuto) { 302 if (range.peek().id() == CSSValueAuto) {
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 return consumeLength(range, cssParserMode, ValueRangeNonNegative); 576 return consumeLength(range, cssParserMode, ValueRangeNonNegative);
539 } 577 }
540 578
541 static PassRefPtrWillBeRawPtr<CSSValue> consumeFontSize(CSSParserTokenRange& ran ge, CSSParserMode cssParserMode) 579 static PassRefPtrWillBeRawPtr<CSSValue> consumeFontSize(CSSParserTokenRange& ran ge, CSSParserMode cssParserMode)
542 { 580 {
543 if (range.peek().id() >= CSSValueXxSmall && range.peek().id() <= CSSValueLar ger) 581 if (range.peek().id() >= CSSValueXxSmall && range.peek().id() <= CSSValueLar ger)
544 return consumeIdent(range); 582 return consumeIdent(range);
545 return consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative, U nitlessQuirk::Allow); 583 return consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative, U nitlessQuirk::Allow);
546 } 584 }
547 585
586 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLineHeight(CSSParserToke nRange& range, CSSParserMode cssParserMode)
587 {
588 if (range.peek().id() == CSSValueNormal)
589 return consumeIdent(range);
590
591 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue = consumeNumberOrPercent(r ange, ValueRangeNonNegative);
592 if (!parsedValue)
593 parsedValue = consumeLengthOrPercent(range, cssParserMode, ValueRangeNon Negative);
594
595 // The line-height property can accept both percents and numbers but additiv e opertaions are
596 // not permitted on them in calc() expressions.
597 if (parsedValue && parsedValue->isCalculatedPercentageWithNumber())
598 return nullptr;
599
600 return parsedValue.release();
601 }
602
548 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID propId) 603 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID propId)
549 { 604 {
550 m_range.consumeWhitespace(); 605 m_range.consumeWhitespace();
551 switch (propId) { 606 switch (propId) {
552 case CSSPropertyWillChange: 607 case CSSPropertyWillChange:
553 return consumeWillChange(m_range); 608 return consumeWillChange(m_range);
554 case CSSPropertyPage: 609 case CSSPropertyPage:
555 return consumePage(m_range); 610 return consumePage(m_range);
556 case CSSPropertyQuotes: 611 case CSSPropertyQuotes:
557 return consumeQuotes(m_range); 612 return consumeQuotes(m_range);
558 case CSSPropertyWebkitHighlight: 613 case CSSPropertyWebkitHighlight:
559 return consumeWebkitHighlight(m_range); 614 return consumeWebkitHighlight(m_range);
560 case CSSPropertyFontVariantLigatures: 615 case CSSPropertyFontVariantLigatures:
561 return consumeFontVariantLigatures(m_range); 616 return consumeFontVariantLigatures(m_range);
562 case CSSPropertyWebkitFontFeatureSettings: 617 case CSSPropertyWebkitFontFeatureSettings:
563 return consumeFontFeatureSettings(m_range); 618 return consumeFontFeatureSettings(m_range);
564 case CSSPropertyFontVariant: 619 case CSSPropertyFontVariant:
565 return consumeFontVariant(); 620 return consumeFontVariant();
566 case CSSPropertyFontFamily: 621 case CSSPropertyFontFamily:
567 return consumeFontFamily(m_range); 622 return consumeFontFamily(m_range);
568 case CSSPropertyFontWeight: 623 case CSSPropertyFontWeight:
569 return consumeFontWeight(m_range); 624 return consumeFontWeight(m_range);
570 case CSSPropertyLetterSpacing: 625 case CSSPropertyLetterSpacing:
571 case CSSPropertyWordSpacing: 626 case CSSPropertyWordSpacing:
572 return consumeSpacing(m_range, m_context.mode()); 627 return consumeSpacing(m_range, m_context.mode());
573 case CSSPropertyTabSize: 628 case CSSPropertyTabSize:
574 return consumeTabSize(m_range, m_context.mode()); 629 return consumeTabSize(m_range, m_context.mode());
575 case CSSPropertyFontSize: 630 case CSSPropertyFontSize:
576 return consumeFontSize(m_range, m_context.mode()); 631 return consumeFontSize(m_range, m_context.mode());
632 case CSSPropertyLineHeight:
633 return consumeLineHeight(m_range, m_context.mode());
577 default: 634 default:
578 return nullptr; 635 return nullptr;
579 } 636 }
580 } 637 }
581 638
582 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range) 639 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range)
583 { 640 {
584 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated (); 641 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated ();
585 642
586 do { 643 do {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 addProperty(CSSPropertyOverflowX, overflowXValue.release(), important); 796 addProperty(CSSPropertyOverflowX, overflowXValue.release(), important);
740 addProperty(CSSPropertyOverflowY, overflowYValue.release(), important); 797 addProperty(CSSPropertyOverflowY, overflowYValue.release(), important);
741 return true; 798 return true;
742 } 799 }
743 default: 800 default:
744 return false; 801 return false;
745 } 802 }
746 } 803 }
747 804
748 } // namespace blink 805 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698