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

Unified Diff: Source/core/css/parser/LegacyCSSPropertyParser.cpp

Issue 1331233003: Move parseFontFaceDescriptor to CSSPropertyParser.cpp (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add consumeWS for contents Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/parser/LegacyCSSPropertyParser.cpp
diff --git a/Source/core/css/parser/LegacyCSSPropertyParser.cpp b/Source/core/css/parser/LegacyCSSPropertyParser.cpp
index c1db97307fa86555fd028a7472406937246e552e..bcbfc3bec3a9240da7dbfe4afde97a6ec43df21f 100644
--- a/Source/core/css/parser/LegacyCSSPropertyParser.cpp
+++ b/Source/core/css/parser/LegacyCSSPropertyParser.cpp
@@ -35,8 +35,6 @@
#include "core/css/CSSCounterValue.h"
#include "core/css/CSSCrossfadeValue.h"
#include "core/css/CSSCursorImageValue.h"
-#include "core/css/CSSFontFaceSrcValue.h"
-#include "core/css/CSSFontFeatureValue.h"
#include "core/css/CSSFunctionValue.h"
#include "core/css/CSSGridLineNamesValue.h"
#include "core/css/CSSImageSetValue.h"
@@ -50,7 +48,6 @@
#include "core/css/CSSSVGDocumentValue.h"
#include "core/css/CSSShadowValue.h"
#include "core/css/CSSTimingFunctionValue.h"
-#include "core/css/CSSUnicodeRangeValue.h"
#include "core/css/CSSValuePair.h"
#include "core/css/CSSValuePool.h"
#include "core/css/HashTools.h"
@@ -469,9 +466,6 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
}
break;
- case CSSPropertyFontWeight: // normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
- return parseFontWeight(important) && !m_valueList->next();
-
case CSSPropertyBorderSpacing: {
ShorthandScope scope(this, CSSPropertyBorderSpacing);
if (!parseValue(CSSPropertyWebkitBorderHorizontalSpacing, important))
@@ -747,9 +741,6 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
case CSSPropertyFontSize:
return parseFontSize(important);
- case CSSPropertyFontVariant: // normal | small-caps | inherit
- return parseFontVariant(important);
-
case CSSPropertyVerticalAlign:
// baseline | sub | super | top | text-top | middle | bottom | text-bottom |
// <percentage> | <length> | inherit
@@ -812,12 +803,6 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
else
parsedValue = parseCounter(0);
break;
- case CSSPropertyFontFamily:
- // [[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inherit
- {
- parsedValue = parseFontFamily();
- break;
- }
case CSSPropertyTextDecoration:
// Fall through 'text-decoration-line' parsing if CSS 3 Text Decoration
@@ -1376,13 +1361,6 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
validPrimitive = true;
break;
- case CSSPropertyWebkitFontFeatureSettings:
- if (id == CSSValueNormal)
- validPrimitive = true;
- else
- parsedValue = parseFontFeatureSettings();
- break;
-
case CSSPropertyWebkitClipPath:
if (id == CSSValueNone) {
validPrimitive = true;
@@ -1442,6 +1420,10 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
case CSSPropertyQuotes:
case CSSPropertyWebkitHighlight:
case CSSPropertyFontVariantLigatures:
+ case CSSPropertyWebkitFontFeatureSettings:
+ case CSSPropertyFontVariant:
+ case CSSPropertyFontFamily:
+ case CSSPropertyFontWeight:
validPrimitive = false;
break;
@@ -4672,55 +4654,6 @@ bool CSSPropertyParser::parseFontSize(bool important)
return validPrimitive;
}
-bool CSSPropertyParser::parseFontVariant(bool important)
-{
- RefPtrWillBeRawPtr<CSSValueList> values = nullptr;
- if (m_valueList->size() > 1)
- values = CSSValueList::createCommaSeparated();
- bool expectComma = false;
- for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->current()) {
- RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue = nullptr;
- if (!expectComma) {
- expectComma = true;
- if (val->id == CSSValueNormal || val->id == CSSValueSmallCaps)
- parsedValue = cssValuePool().createIdentifierValue(val->id);
- else if (val->id == CSSValueAll && !values) {
- // FIXME: CSSPropertyParser::parseFontVariant() implements
- // the old css3 draft:
- // http://www.w3.org/TR/2002/WD-css3-webfonts-20020802/#font-variant
- // 'all' is only allowed in @font-face and with no other values. Make a value list to
- // indicate that we are in the @font-face case.
- values = CSSValueList::createCommaSeparated();
- parsedValue = cssValuePool().createIdentifierValue(val->id);
- }
- } else if (consumeComma(m_valueList)) {
- expectComma = false;
- continue;
- }
-
- if (!parsedValue)
- return false;
-
- m_valueList->next();
-
- if (values)
- values->append(parsedValue.release());
- else {
- addProperty(CSSPropertyFontVariant, parsedValue.release(), important);
- return true;
- }
- }
-
- if (values && values->length()) {
- if (m_ruleType != StyleRule::FontFace)
- return false;
- addProperty(CSSPropertyFontVariant, values.release(), important);
- return true;
- }
-
- return false;
-}
-
bool CSSPropertyParser::parseFontWeight(bool important)
{
CSSParserValue* value = m_valueList->current();
@@ -4738,99 +4671,6 @@ bool CSSPropertyParser::parseFontWeight(bool important)
return false;
}
-bool CSSPropertyParser::parseFontFaceSrcURI(CSSValueList* valueList)
-{
- RefPtrWillBeRawPtr<CSSFontFaceSrcValue> uriValue(CSSFontFaceSrcValue::create(completeURL(m_valueList->current()->string), m_context.shouldCheckContentSecurityPolicy()));
- uriValue->setReferrer(m_context.referrer());
-
- CSSParserValue* value = m_valueList->next();
- if (!value || value->m_unit != CSSParserValue::Function || value->function->id != CSSValueFormat) {
- valueList->append(uriValue.release());
- return true;
- }
-
- // FIXME: http://www.w3.org/TR/2011/WD-css3-fonts-20111004/ says that format() contains a comma-separated list of strings,
- // but CSSFontFaceSrcValue stores only one format. Allowing one format for now.
- CSSParserValueList* args = value->function->args.get();
- if (!args || args->size() != 1 || (args->current()->unit() != CSSPrimitiveValue::UnitType::String && args->current()->m_unit != CSSParserValue::Identifier))
- return false;
- uriValue->setFormat(args->current()->string);
- valueList->append(uriValue.release());
- m_valueList->next();
- return true;
-}
-
-bool CSSPropertyParser::parseFontFaceSrcLocal(CSSValueList* valueList)
-{
- CSSParserValueList* args = m_valueList->current()->function->args.get();
- if (!args || !args->size())
- return false;
- m_valueList->next();
-
- ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy = m_context.shouldCheckContentSecurityPolicy();
- if (args->size() == 1 && args->current()->unit() == CSSPrimitiveValue::UnitType::String) {
- valueList->append(CSSFontFaceSrcValue::createLocal(args->current()->string, shouldCheckContentSecurityPolicy));
- } else if (args->current()->m_unit == CSSParserValue::Identifier) {
- StringBuilder builder;
- for (CSSParserValue* localValue = args->current(); localValue; localValue = args->next()) {
- if (localValue->m_unit != CSSParserValue::Identifier)
- return false;
- if (!builder.isEmpty())
- builder.append(' ');
- builder.append(localValue->string);
- }
- valueList->append(CSSFontFaceSrcValue::createLocal(builder.toString(), shouldCheckContentSecurityPolicy));
- } else
- return false;
-
- return true;
-}
-
-PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFontFaceSrc()
-{
- RefPtrWillBeRawPtr<CSSValueList> values(CSSValueList::createCommaSeparated());
-
- while (true) {
- CSSParserValue* value = m_valueList->current();
- if (!value)
- return nullptr;
- if (value->unit() == CSSPrimitiveValue::UnitType::URI) {
- if (!parseFontFaceSrcURI(values.get()))
- return nullptr;
- } else if (value->m_unit == CSSParserValue::Function && value->function->id == CSSValueLocal) {
- if (!parseFontFaceSrcLocal(values.get()))
- return nullptr;
- } else {
- return nullptr;
- }
-
- if (!m_valueList->current())
- return values.release();
- if (!consumeComma(m_valueList))
- return nullptr;
- }
-}
-
-PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFontFaceUnicodeRange()
-{
- RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated();
-
- do {
- CSSParserValue* current = m_valueList->current();
- if (!current || current->m_unit != CSSParserValue::UnicodeRange)
- return nullptr;
-
- UChar32 start = current->m_unicodeRange.start;
- UChar32 end = current->m_unicodeRange.end;
- if (start > end)
- return nullptr;
- values->append(CSSUnicodeRangeValue::create(start, end));
- m_valueList->next();
- } while (consumeComma(m_valueList));
-
- return values.release();
-}
-
inline int CSSPropertyParser::colorIntFromValue(CSSParserValue* v)
{
bool isPercent;
@@ -6967,57 +6807,6 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTextIndent()
return list.release();
}
-bool CSSPropertyParser::parseFontFeatureTag(CSSValueList* settings)
-{
- // Feature tag name consists of 4-letter characters.
- static const unsigned tagNameLength = 4;
-
- CSSParserValue* value = m_valueList->current();
- // Feature tag name comes first
- if (value->unit() != CSSPrimitiveValue::UnitType::String)
- return false;
- if (value->string.length() != tagNameLength)
- return false;
- for (unsigned i = 0; i < tagNameLength; ++i) {
- // Limits the range of characters to 0x20-0x7E, following the tag name rules defiend in the OpenType specification.
- UChar character = value->string[i];
- if (character < 0x20 || character > 0x7E)
- return false;
- }
-
- AtomicString tag = value->string;
- int tagValue = 1;
- // Feature tag values could follow: <integer> | on | off
- value = m_valueList->next();
- if (value) {
- if (value->unit() == CSSPrimitiveValue::UnitType::Number && value->isInt && value->fValue >= 0) {
- tagValue = clampTo<int>(value->fValue);
- if (tagValue < 0)
- return false;
- m_valueList->next();
- } else if (value->id == CSSValueOn || value->id == CSSValueOff) {
- tagValue = value->id == CSSValueOn;
- m_valueList->next();
- }
- }
- settings->append(CSSFontFeatureValue::create(tag, tagValue));
- return true;
-}
-
-PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseFontFeatureSettings()
-{
- RefPtrWillBeRawPtr<CSSValueList> settings = CSSValueList::createCommaSeparated();
- while (true) {
- if (!m_valueList->current() || !parseFontFeatureTag(settings.get()))
- return nullptr;
- if (!m_valueList->current())
- break;
- if (!consumeComma(m_valueList))
- return nullptr;
- }
- return settings.release();
-}
-
bool CSSPropertyParser::parseCalculation(CSSParserValue* value, ValueRange range)
{
ASSERT(isCalculation(value));
@@ -7033,54 +6822,6 @@ bool CSSPropertyParser::parseCalculation(CSSParserValue* value, ValueRange range
return true;
}
-bool CSSPropertyParser::parseFontFaceDescriptor(CSSPropertyID propId)
-{
- CSSParserValue* value = m_valueList->current();
- ASSERT(value);
- CSSValueID id = value->id;
- RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr;
-
- switch (propId) {
- case CSSPropertyFontFamily:
- // <family-name>
- // TODO(rwlbuis): check there is only one family-name
- parsedValue = parseFontFamily();
- break;
- case CSSPropertySrc: // This is a list of urls or local references.
- parsedValue = parseFontFaceSrc();
- break;
- case CSSPropertyUnicodeRange:
- parsedValue = parseFontFaceUnicodeRange();
- break;
- case CSSPropertyFontWeight: // normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
- return parseFontWeight(false) && !m_valueList->next();
- case CSSPropertyFontStretch:
- case CSSPropertyFontStyle:
- if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(propId, id))
- return false;
- addProperty(propId, cssValuePool().createIdentifierValue(id), false);
- return true;
- case CSSPropertyFontVariant: // normal | small-caps | inherit
- return parseFontVariant(false);
- case CSSPropertyWebkitFontFeatureSettings:
- if (id == CSSValueNormal) {
- parsedValue = cssValuePool().createIdentifierValue(CSSValueNormal);
- m_valueList->next();
- } else {
- parsedValue = parseFontFeatureSettings();
- }
- break;
- default:
- break;
- }
-
- if (!parsedValue || m_valueList->current())
- return false;
-
- addProperty(propId, parsedValue.release(), false);
- return true;
-}
-
bool CSSPropertyParser::parseViewportProperty(CSSPropertyID propId, bool important)
{
ASSERT(RuntimeEnabledFeatures::cssViewportEnabled() || isUASheetBehavior(m_context.mode()));
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698