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