Title: [208073] trunk/Source/WebCore
Revision
208073
Author
hy...@apple.com
Date
2016-10-28 14:52:22 -0700 (Fri, 28 Oct 2016)

Log Message

[CSS Parser] Support hanging-punctuation
https://bugs.webkit.org/show_bug.cgi?id=164153

Reviewed by Simon Fraser.

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

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (208072 => 208073)


--- trunk/Source/WebCore/ChangeLog	2016-10-28 21:37:17 UTC (rev 208072)
+++ trunk/Source/WebCore/ChangeLog	2016-10-28 21:52:22 UTC (rev 208073)
@@ -1,3 +1,14 @@
+2016-10-28  Dave Hyatt  <hy...@apple.com>
+
+        [CSS Parser] Support hanging-punctuation
+        https://bugs.webkit.org/show_bug.cgi?id=164153
+
+        Reviewed by Simon Fraser.
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeHangingPunctuation):
+        (WebCore::CSSPropertyParser::parseSingleValue):
+
 2016-10-28  Yusuke Suzuki  <utatane....@gmail.com>
 
         [DOMJIT] Implement Document::documentElement

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (208072 => 208073)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-10-28 21:37:17 UTC (rev 208072)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-10-28 21:52:22 UTC (rev 208073)
@@ -70,6 +70,7 @@
 #include "StylePropertyShorthand.h"
 #include "StylePropertyShorthandFunctions.h"
 #include "WebKitCSSTransformValue.h"
+#include <bitset>
 #include <memory>
 #include <wtf/text/StringBuilder.h>
 
@@ -3146,6 +3147,51 @@
     return createPrimitiveValuePair(position.releaseNonNull(), WTFMove(height));
 }
 
+static RefPtr<CSSValue> consumeHangingPunctuation(CSSParserTokenRange& range)
+{
+    if (range.peek().id() == CSSValueNone)
+        return consumeIdent(range);
+    
+    RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
+    std::bitset<numCSSValueKeywords> seenValues;
+
+    bool seenForceEnd = false;
+    bool seenAllowEnd = false;
+    bool seenFirst = false;
+    bool seenLast = false;
+
+    while (!range.atEnd()) {
+        CSSValueID valueID = range.peek().id();
+        if ((valueID == CSSValueFirst && seenFirst)
+            || (valueID == CSSValueLast && seenLast)
+            || (valueID == CSSValueAllowEnd && (seenAllowEnd || seenForceEnd))
+            || (valueID == CSSValueForceEnd && (seenAllowEnd || seenForceEnd)))
+            return nullptr;
+        RefPtr<CSSValue> ident = consumeIdent<CSSValueAllowEnd, CSSValueForceEnd, CSSValueFirst, CSSValueLast>(range);
+        if (!ident)
+            return nullptr;
+        switch (valueID) {
+        case CSSValueAllowEnd:
+            seenAllowEnd = true;
+            break;
+        case CSSValueForceEnd:
+            seenForceEnd = true;
+            break;
+        case CSSValueFirst:
+            seenFirst = true;
+            break;
+        case CSSValueLast:
+            seenLast = true;
+            break;
+        default:
+            break;
+        }
+        list->append(ident.releaseNonNull());
+    }
+    
+    return list->length() ? list : nullptr;
+}
+
 static RefPtr<CSSValue> consumeWebkitMarqueeIncrement(CSSParserTokenRange& range, CSSParserMode cssParserMode)
 {
     if (range.peek().type() == IdentToken)
@@ -3539,6 +3585,8 @@
         return consumeLineGrid(m_range);
     case CSSPropertyWebkitInitialLetter:
         return consumeInitialLetter(m_range);
+    case CSSPropertyHangingPunctuation:
+        return consumeHangingPunctuation(m_range);
     case CSSPropertyWebkitMarqueeIncrement:
         return consumeWebkitMarqueeIncrement(m_range, m_context.mode);
     case CSSPropertyWebkitMarqueeRepetition:
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to