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

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

Issue 203523002: Reland "Add plumbing for font-stretch" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: w/fix for ASSERT Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
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 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 if ((id >= CSSValueWebkitAuto && id <= CSSValueWebkitMatchParent) || id == CSSValueStart || id == CSSValueEnd 523 if ((id >= CSSValueWebkitAuto && id <= CSSValueWebkitMatchParent) || id == CSSValueStart || id == CSSValueEnd
524 || value->unit == CSSPrimitiveValue::CSS_STRING) 524 || value->unit == CSSPrimitiveValue::CSS_STRING)
525 validPrimitive = true; 525 validPrimitive = true;
526 break; 526 break;
527 527
528 case CSSPropertyFontWeight: { // normal | bold | bolder | lighter | 100 | 2 00 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit 528 case CSSPropertyFontWeight: { // normal | bold | bolder | lighter | 100 | 2 00 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
529 if (m_valueList->size() != 1) 529 if (m_valueList->size() != 1)
530 return false; 530 return false;
531 return parseFontWeight(important); 531 return parseFontWeight(important);
532 } 532 }
533
534 case CSSPropertyFontStretch: { // normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultr a-expanded
535 if (m_valueList->size() != 1)
536 return false;
537 return parseFontStretch(important);
538 }
539
533 case CSSPropertyBorderSpacing: { 540 case CSSPropertyBorderSpacing: {
534 if (num == 1) { 541 if (num == 1) {
535 ShorthandScope scope(this, CSSPropertyBorderSpacing); 542 ShorthandScope scope(this, CSSPropertyBorderSpacing);
536 if (!parseValue(CSSPropertyWebkitBorderHorizontalSpacing, important) ) 543 if (!parseValue(CSSPropertyWebkitBorderHorizontalSpacing, important) )
537 return false; 544 return false;
538 CSSValue* value = m_parsedProperties.last().value(); 545 CSSValue* value = m_parsedProperties.last().value();
539 addProperty(CSSPropertyWebkitBorderVerticalSpacing, value, important ); 546 addProperty(CSSPropertyWebkitBorderVerticalSpacing, value, important );
540 return true; 547 return true;
541 } 548 }
542 else if (num == 2) { 549 else if (num == 2) {
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 break; 1444 break;
1438 case CSSPropertyWebkitAnimation: 1445 case CSSPropertyWebkitAnimation:
1439 return parseAnimationShorthand(propId, important); 1446 return parseAnimationShorthand(propId, important);
1440 case CSSPropertyTransition: 1447 case CSSPropertyTransition:
1441 case CSSPropertyWebkitTransition: 1448 case CSSPropertyWebkitTransition:
1442 return parseTransitionShorthand(propId, important); 1449 return parseTransitionShorthand(propId, important);
1443 case CSSPropertyInvalid: 1450 case CSSPropertyInvalid:
1444 return false; 1451 return false;
1445 case CSSPropertyPage: 1452 case CSSPropertyPage:
1446 return parsePage(propId, important); 1453 return parsePage(propId, important);
1447 case CSSPropertyFontStretch:
1448 return false;
1449 // CSS Text Layout Module Level 3: Vertical writing support 1454 // CSS Text Layout Module Level 3: Vertical writing support
1450 case CSSPropertyWebkitTextEmphasis: 1455 case CSSPropertyWebkitTextEmphasis:
1451 return parseShorthand(propId, webkitTextEmphasisShorthand(), important); 1456 return parseShorthand(propId, webkitTextEmphasisShorthand(), important);
1452 1457
1453 case CSSPropertyWebkitTextEmphasisStyle: 1458 case CSSPropertyWebkitTextEmphasisStyle:
1454 return parseTextEmphasisStyle(important); 1459 return parseTextEmphasisStyle(important);
1455 1460
1456 case CSSPropertyWebkitTextOrientation: 1461 case CSSPropertyWebkitTextOrientation:
1457 // FIXME: For now just support sideways, sideways-right, upright and ver tical-right. 1462 // FIXME: For now just support sideways, sideways-right, upright and ver tical-right.
1458 if (id == CSSValueSideways || id == CSSValueSidewaysRight || id == CSSVa lueVerticalRight || id == CSSValueUpright) 1463 if (id == CSSValueSideways || id == CSSValueSidewaysRight || id == CSSVa lueVerticalRight || id == CSSValueUpright)
(...skipping 3071 matching lines...) Expand 10 before | Expand all | Expand 10 after
4530 for (unsigned i = 0; i < m_valueList->size(); ++i) { 4535 for (unsigned i = 0; i < m_valueList->size(); ++i) {
4531 if (m_valueList->valueAt(i)->id == CSSValueInherit || m_valueList->value At(i)->id == CSSValueInitial) 4536 if (m_valueList->valueAt(i)->id == CSSValueInherit || m_valueList->value At(i)->id == CSSValueInitial)
4532 return false; 4537 return false;
4533 } 4538 }
4534 4539
4535 ShorthandScope scope(this, CSSPropertyFont); 4540 ShorthandScope scope(this, CSSPropertyFont);
4536 // Optional font-style, font-variant and font-weight. 4541 // Optional font-style, font-variant and font-weight.
4537 bool fontStyleParsed = false; 4542 bool fontStyleParsed = false;
4538 bool fontVariantParsed = false; 4543 bool fontVariantParsed = false;
4539 bool fontWeightParsed = false; 4544 bool fontWeightParsed = false;
4545 bool fontStretchParsed = false;
4540 CSSParserValue* value = m_valueList->current(); 4546 CSSParserValue* value = m_valueList->current();
4541 for (; value; value = m_valueList->next()) { 4547 for (; value; value = m_valueList->next()) {
4542 if (!fontStyleParsed && isValidKeywordPropertyAndValue(CSSPropertyFontSt yle, value->id, m_context)) { 4548 if (!fontStyleParsed && isValidKeywordPropertyAndValue(CSSPropertyFontSt yle, value->id, m_context)) {
4543 addProperty(CSSPropertyFontStyle, cssValuePool().createIdentifierVal ue(value->id), important); 4549 addProperty(CSSPropertyFontStyle, cssValuePool().createIdentifierVal ue(value->id), important);
4544 fontStyleParsed = true; 4550 fontStyleParsed = true;
4545 } else if (!fontVariantParsed && (value->id == CSSValueNormal || value-> id == CSSValueSmallCaps)) { 4551 } else if (!fontVariantParsed && (value->id == CSSValueNormal || value-> id == CSSValueSmallCaps)) {
4546 // Font variant in the shorthand is particular, it only accepts norm al or small-caps. 4552 // Font variant in the shorthand is particular, it only accepts norm al or small-caps.
4547 addProperty(CSSPropertyFontVariant, cssValuePool().createIdentifierV alue(value->id), important); 4553 addProperty(CSSPropertyFontVariant, cssValuePool().createIdentifierV alue(value->id), important);
4548 fontVariantParsed = true; 4554 fontVariantParsed = true;
4549 } else if (!fontWeightParsed && parseFontWeight(important)) 4555 } else if (!fontWeightParsed && parseFontWeight(important)) {
4550 fontWeightParsed = true; 4556 fontWeightParsed = true;
4551 else 4557 } else if (!fontStretchParsed && parseFontStretch(important)) {
4558 fontStretchParsed = true;
4559 } else {
4552 break; 4560 break;
4561 }
4553 } 4562 }
4554 4563
4555 if (!value) 4564 if (!value)
4556 return false; 4565 return false;
4557 4566
4558 if (!fontStyleParsed) 4567 if (!fontStyleParsed)
4559 addProperty(CSSPropertyFontStyle, cssValuePool().createIdentifierValue(C SSValueNormal), important, true); 4568 addProperty(CSSPropertyFontStyle, cssValuePool().createIdentifierValue(C SSValueNormal), important, true);
4560 if (!fontVariantParsed) 4569 if (!fontVariantParsed)
4561 addProperty(CSSPropertyFontVariant, cssValuePool().createIdentifierValue (CSSValueNormal), important, true); 4570 addProperty(CSSPropertyFontVariant, cssValuePool().createIdentifierValue (CSSValueNormal), important, true);
4562 if (!fontWeightParsed) 4571 if (!fontWeightParsed)
4563 addProperty(CSSPropertyFontWeight, cssValuePool().createIdentifierValue( CSSValueNormal), important, true); 4572 addProperty(CSSPropertyFontWeight, cssValuePool().createIdentifierValue( CSSValueNormal), important, true);
4573 if (!fontStretchParsed)
4574 addProperty(CSSPropertyFontStretch, cssValuePool().createIdentifierValue (CSSValueNormal), important, true);
4564 4575
4565 // Now a font size _must_ come. 4576 // Now a font size _must_ come.
4566 // <absolute-size> | <relative-size> | <length> | <percentage> | inherit 4577 // <absolute-size> | <relative-size> | <length> | <percentage> | inherit
4567 if (!parseFontSize(important)) 4578 if (!parseFontSize(important))
4568 return false; 4579 return false;
4569 4580
4570 value = m_valueList->current(); 4581 value = m_valueList->current();
4571 if (!value) 4582 if (!value)
4572 return false; 4583 return false;
4573 4584
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
4794 if (validUnit(value, FInteger | FNonNeg, HTMLQuirksMode)) { 4805 if (validUnit(value, FInteger | FNonNeg, HTMLQuirksMode)) {
4795 int weight = static_cast<int>(value->fValue); 4806 int weight = static_cast<int>(value->fValue);
4796 if (!(weight % 100) && weight >= 100 && weight <= 900) { 4807 if (!(weight % 100) && weight >= 100 && weight <= 900) {
4797 addProperty(CSSPropertyFontWeight, cssValuePool().createIdentifierVa lue(static_cast<CSSValueID>(CSSValue100 + weight / 100 - 1)), important); 4808 addProperty(CSSPropertyFontWeight, cssValuePool().createIdentifierVa lue(static_cast<CSSValueID>(CSSValue100 + weight / 100 - 1)), important);
4798 return true; 4809 return true;
4799 } 4810 }
4800 } 4811 }
4801 return false; 4812 return false;
4802 } 4813 }
4803 4814
4815 bool CSSPropertyParser::parseFontStretch(bool important)
4816 {
4817 CSSParserValue* value = m_valueList->current();
4818 if (value->id == CSSValueNormal || (value->id >= CSSValueUltraCondensed && v alue->id <= CSSValueUltraExpanded)) {
4819 addProperty(CSSPropertyFontStretch, cssValuePool().createIdentifierValue (value->id), important);
4820 return true;
4821 }
4822 return false;
4823 }
4824
4804 bool CSSPropertyParser::parseFontFaceSrcURI(CSSValueList* valueList) 4825 bool CSSPropertyParser::parseFontFaceSrcURI(CSSValueList* valueList)
4805 { 4826 {
4806 RefPtrWillBeRawPtr<CSSFontFaceSrcValue> uriValue(CSSFontFaceSrcValue::create (completeURL(m_valueList->current()->string))); 4827 RefPtrWillBeRawPtr<CSSFontFaceSrcValue> uriValue(CSSFontFaceSrcValue::create (completeURL(m_valueList->current()->string)));
4807 uriValue->setReferrer(m_context.referrer()); 4828 uriValue->setReferrer(m_context.referrer());
4808 4829
4809 CSSParserValue* value = m_valueList->next(); 4830 CSSParserValue* value = m_valueList->next();
4810 if (!value) { 4831 if (!value) {
4811 valueList->append(uriValue.release()); 4832 valueList->append(uriValue.release());
4812 return true; 4833 return true;
4813 } 4834 }
(...skipping 3670 matching lines...) Expand 10 before | Expand all | Expand 10 after
8484 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill)); 8505 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill));
8485 if (!seenStroke) 8506 if (!seenStroke)
8486 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) ); 8507 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) );
8487 if (!seenMarkers) 8508 if (!seenMarkers)
8488 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers )); 8509 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers ));
8489 8510
8490 return parsedValues.release(); 8511 return parsedValues.release();
8491 } 8512 }
8492 8513
8493 } // namespace blink 8514 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | Source/core/css/resolver/AnimatedStyleBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698