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

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

Issue 1397553003: Move size property into CSSPropertyParser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch for review Created 5 years, 2 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
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 aaec7b836d0bf41a224eb9fc49b96912aba03c01..12667b09ba29cc4f6261ec25e255f8ac1b396b80 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -641,6 +641,76 @@ static PassRefPtrWillBeRawPtr<CSSValueList> consumeRotation(CSSParserTokenRange&
return list.release();
}
+enum class SizeParameter {
+ None,
+ Auto,
+ Length,
+ PageSize,
+ Orientation,
+};
+
+static SizeParameter parseSizeParameter(CSSParserTokenRange& range, CSSParserMode cssParserMode, CSSValueList* parsedValues, SizeParameter prevParamType)
+{
+ switch (range.peek().id()) {
+ case CSSValueAuto:
+ if (prevParamType == SizeParameter::None) {
+ parsedValues->append(consumeIdent(range));
+ return SizeParameter::Auto;
+ }
+ return SizeParameter::None;
+ case CSSValueLandscape:
+ case CSSValuePortrait:
+ if (prevParamType == SizeParameter::None || prevParamType == SizeParameter::PageSize) {
+ parsedValues->append(consumeIdent(range));
+ return SizeParameter::Orientation;
+ }
+ return SizeParameter::None;
+ case CSSValueA3:
+ case CSSValueA4:
+ case CSSValueA5:
+ case CSSValueB4:
+ case CSSValueB5:
+ case CSSValueLedger:
+ case CSSValueLegal:
+ case CSSValueLetter:
+ if (prevParamType == SizeParameter::None || prevParamType == SizeParameter::Orientation) {
+ // Normalize to Page Size then Orientation order by prepending for simpler StyleBuilder handling
+ parsedValues->prepend(consumeIdent(range));
+ return SizeParameter::PageSize;
+ }
+ return SizeParameter::None;
+ case 0: {
+ RefPtrWillBeRawPtr<CSSValue> parsedValue = consumeLength(range, cssParserMode, ValueRangeNonNegative);
+ if (parsedValue && (prevParamType == SizeParameter::None || prevParamType == SizeParameter::Length)) {
+ parsedValues->append(parsedValue.release());
+ return SizeParameter::Length;
+ }
+ return SizeParameter::None;
+ }
+ default:
+ return SizeParameter::None;
+ }
+}
+
+static PassRefPtrWillBeRawPtr<CSSValueList> consumeSize(CSSParserTokenRange& range, CSSParserMode cssParserMode)
+{
+ RefPtrWillBeRawPtr<CSSValueList> parsedValues = CSSValueList::createSpaceSeparated();
+
+ // First parameter.
Timothy Loh 2015/10/08 23:36:38 This can be lots simpler I think. Sorry for code d
rwlbuis 2015/10/12 17:13:19 I like it! But the part where height is set to wid
+ SizeParameter paramType = parseSizeParameter(range, cssParserMode, parsedValues.get(), SizeParameter::None);
+ if (paramType == SizeParameter::None)
+ return nullptr;
+
+ // Second parameter, if any.
+ if (!range.atEnd()) {
+ paramType = parseSizeParameter(range, cssParserMode, parsedValues.get(), paramType);
+ if (paramType == SizeParameter::None)
+ return nullptr;
+ }
+
+ return parsedValues.release();
+}
+
PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSPropertyID propId)
{
m_range.consumeWhitespace();
@@ -677,6 +747,8 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty
case CSSPropertyWebkitBorderHorizontalSpacing:
case CSSPropertyWebkitBorderVerticalSpacing:
return consumeLength(m_range, m_context.mode(), ValueRangeNonNegative);
+ case CSSPropertySize:
+ return consumeSize(m_range, m_context.mode());
default:
return nullptr;
}

Powered by Google App Engine
This is Rietveld 408576698