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

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

Issue 2558053002: Add CSS support for font-variation-settings (Closed)
Patch Set: Remove empty if statement Created 4 years 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
Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index cd0ae887f2f9118acce26762d7799ef670491ea0..246b2ac381c4f241e27bd2530440148d612c8f55 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -14,6 +14,7 @@
#include "core/css/CSSFontFaceSrcValue.h"
#include "core/css/CSSFontFamilyValue.h"
#include "core/css/CSSFontFeatureValue.h"
+#include "core/css/CSSFontVariationValue.h"
#include "core/css/CSSFunctionValue.h"
#include "core/css/CSSGridAutoRepeatValue.h"
#include "core/css/CSSGridLineNamesValue.h"
@@ -364,7 +365,7 @@ static CSSFontFeatureValue* consumeFontFeatureTag(CSSParserTokenRange& range) {
AtomicString tag = token.value().toAtomicString();
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.
+ // defined in the OpenType specification.
UChar character = tag[i];
if (character < 0x20 || character > 0x7E)
return nullptr;
@@ -398,6 +399,48 @@ static CSSValue* consumeFontFeatureSettings(CSSParserTokenRange& range) {
return settings;
}
+static CSSFontVariationValue* consumeFontVariationTag(
+ CSSParserTokenRange& range) {
+ // Feature tag name consists of 4-letter characters.
+ static const unsigned tagNameLength = 4;
+
+ const CSSParserToken& token = range.consumeIncludingWhitespace();
+ // Feature tag name comes first
+ if (token.type() != StringToken)
+ return nullptr;
+ if (token.value().length() != tagNameLength)
+ return nullptr;
+ AtomicString tag = token.value().toAtomicString();
+ for (unsigned i = 0; i < tagNameLength; ++i) {
+ // Limits the range of characters to 0x20-0x7E, following the tag name rules
+ // defined in the OpenType specification.
+ UChar character = tag[i];
+ if (character < 0x20 || character > 0x7E)
+ return nullptr;
+ }
+
+ float tagValue = 1;
+ if (range.peek().type() == NumberToken) {
Timothy Loh 2016/12/08 03:36:05 You probably want to use consumeNumberRaw to be ab
drott 2016/12/09 10:25:50 Changed to use consumeNumberRaw.
+ tagValue =
+ clampTo<float>(range.consumeIncludingWhitespace().numericValue());
+ return CSSFontVariationValue::create(tag, tagValue);
+ }
+ return nullptr;
+}
+
+static CSSValue* consumeFontVariationSettings(CSSParserTokenRange& range) {
+ if (range.peek().id() == CSSValueNormal)
+ return consumeIdent(range);
+ CSSValueList* variationSettings = CSSValueList::createCommaSeparated();
+ do {
+ CSSFontVariationValue* fontVariationValue = consumeFontVariationTag(range);
+ if (!fontVariationValue)
+ return nullptr;
+ variationSettings->append(*fontVariationValue);
+ } while (consumeCommaIncludingWhitespace(range));
+ return variationSettings;
+}
+
static CSSValue* consumePage(CSSParserTokenRange& range) {
if (range.peek().id() == CSSValueAuto)
return consumeIdent(range);
@@ -3444,6 +3487,9 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
return consumeFontFeatureSettings(m_range);
case CSSPropertyFontFamily:
return consumeFontFamily(m_range);
+ case CSSPropertyFontVariationSettings:
+ DCHECK(RuntimeEnabledFeatures::cssVariableFontsEnabled());
+ return consumeFontVariationSettings(m_range);
case CSSPropertyFontWeight:
return consumeFontWeight(m_range);
case CSSPropertyLetterSpacing:

Powered by Google App Engine
This is Rietveld 408576698