Title: [208892] trunk/Source/WebCore
Revision
208892
Author
[email protected]
Date
2016-11-18 13:41:40 -0800 (Fri, 18 Nov 2016)

Log Message

[CSS Parser] Support font-variation-settings
https://bugs.webkit.org/show_bug.cgi?id=164947

Reviewed by Myles Maxfield.

* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeFontVariationTag):
(WebCore::consumeFontVariationSettings):
(WebCore::CSSPropertyParser::parseSingleValue):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (208891 => 208892)


--- trunk/Source/WebCore/ChangeLog	2016-11-18 21:31:42 UTC (rev 208891)
+++ trunk/Source/WebCore/ChangeLog	2016-11-18 21:41:40 UTC (rev 208892)
@@ -1,3 +1,15 @@
+2016-11-18  Dave Hyatt  <[email protected]>
+
+        [CSS Parser] Support font-variation-settings
+        https://bugs.webkit.org/show_bug.cgi?id=164947
+
+        Reviewed by Myles Maxfield.
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeFontVariationTag):
+        (WebCore::consumeFontVariationSettings):
+        (WebCore::CSSPropertyParser::parseSingleValue):
+
 2016-11-17  Jiewen Tan  <[email protected]>
 
         Update SubtleCrypto::encrypt to match the latest spec

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (208891 => 208892)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-11-18 21:31:42 UTC (rev 208891)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-11-18 21:41:40 UTC (rev 208892)
@@ -39,6 +39,9 @@
 #include "CSSCustomIdentValue.h"
 #include "CSSFontFaceSrcValue.h"
 #include "CSSFontFeatureValue.h"
+#if ENABLE(VARIATION_FONTS)
+#include "CSSFontVariationValue.h"
+#endif
 #include "CSSFunctionValue.h"
 #include "CSSGridAutoRepeatValue.h"
 #include "CSSGridLineNamesValue.h"
@@ -490,6 +493,53 @@
     return settings;
 }
 
+#if ENABLE(VARIATION_FONTS)
+static RefPtr<CSSValue> consumeFontVariationTag(CSSParserTokenRange& range)
+{
+    if (range.peek().type() != StringToken)
+        return nullptr;
+    
+    auto string = range.consumeIncludingWhitespace().value().toString();
+    
+    FontTag tag;
+    if (string.length() != tag.size())
+        return nullptr;
+    for (unsigned i = 0; i < tag.size(); ++i) {
+        // Limits the range of characters to 0x20-0x7E, following the tag name rules defiend in the OpenType specification.
+        UChar character = string[i];
+        if (character < 0x20 || character > 0x7E)
+            return nullptr;
+        tag[i] = character;
+    }
+    
+    if (range.atEnd() || range.peek().type() != NumberToken)
+        return nullptr;
+
+    float tagValue = range.consumeIncludingWhitespace().numericValue();
+    
+    return CSSFontVariationValue::create(tag, tagValue);
+}
+    
+static RefPtr<CSSValue> consumeFontVariationSettings(CSSParserTokenRange& range)
+{
+    if (range.peek().id() == CSSValueNormal)
+        return consumeIdent(range);
+    
+    auto settings = CSSValueList::createCommaSeparated();
+    do {
+        RefPtr<CSSValue> variationValue = consumeFontVariationTag(range);
+        if (!variationValue)
+            return nullptr;
+        settings->append(variationValue.releaseNonNull());
+    } while (consumeCommaIncludingWhitespace(range));
+    
+    if (!settings->length())
+        return nullptr;
+
+    return WTFMove(settings);
+}
+#endif // ENABLE(VARIATION_FONTS)
+
 static RefPtr<CSSValue> consumePage(CSSParserTokenRange& range)
 {
     if (range.peek().id() == CSSValueAuto)
@@ -3393,6 +3443,12 @@
         return consumeFontWeight(m_range);
     case CSSPropertyFontSynthesis:
         return consumeFontSynthesis(m_range);
+#if ENABLE(VARIATION_FONTS)
+    case CSSPropertyFontVariationSettings:
+        if (m_context.variationFontsEnabled)
+            return consumeFontVariationSettings(m_range);
+        return nullptr;
+#endif
     case CSSPropertyLetterSpacing:
         return consumeLetterSpacing(m_range, m_context.mode);
     case CSSPropertyWordSpacing:
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to