Commit 5aca4e55 authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

CSS: font-variant-east-asian serializes in canonical order

We serialize the east-asian-variant-value, then east-asian-width-value,
then 'ruby'.

Spec: https://drafts.csswg.org/css-fonts/#propdef-font-variant-east-asian

BUG=850370

Change-Id: I7c5d68f772cc91aa96cd04aa2f0b89b47be62329
Reviewed-on: https://chromium-review.googlesource.com/1090528Reviewed-by: default avatarDominik Röttsches <drott@chromium.org>
Commit-Queue: Eric Willigers <ericwilligers@chromium.org>
Cr-Commit-Position: refs/heads/master@{#565480}
parent 238e290d
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/property-parsing-test.js"></script>
<script>
// Verifies that font-variant-east-asian property and its value are properly parsed
assert_valid_value("font-variant-east-asian", "ruby full-width jis78", "jis78 full-width ruby");
</script>
...@@ -16,10 +16,9 @@ class FontVariantEastAsianParser { ...@@ -16,10 +16,9 @@ class FontVariantEastAsianParser {
public: public:
FontVariantEastAsianParser() FontVariantEastAsianParser()
: saw_east_asian_form_value_(false), : east_asian_form_value_(nullptr),
saw_east_asian_width_value_(false), east_asian_width_value_(nullptr),
saw_ruby_value_(false), ruby_value_(nullptr) {}
result_(CSSValueList::CreateSpaceSeparated()) {}
enum class ParseResult { kConsumedValue, kDisallowedValue, kUnknownValue }; enum class ParseResult { kConsumedValue, kDisallowedValue, kUnknownValue };
...@@ -32,39 +31,44 @@ class FontVariantEastAsianParser { ...@@ -32,39 +31,44 @@ class FontVariantEastAsianParser {
case CSSValueJis04: case CSSValueJis04:
case CSSValueSimplified: case CSSValueSimplified:
case CSSValueTraditional: case CSSValueTraditional:
if (saw_east_asian_form_value_) if (east_asian_form_value_)
return ParseResult::kDisallowedValue; return ParseResult::kDisallowedValue;
saw_east_asian_form_value_ = true; east_asian_form_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
break; return ParseResult::kConsumedValue;
case CSSValueFullWidth: case CSSValueFullWidth:
case CSSValueProportionalWidth: case CSSValueProportionalWidth:
if (saw_east_asian_width_value_) if (east_asian_width_value_)
return ParseResult::kDisallowedValue; return ParseResult::kDisallowedValue;
saw_east_asian_width_value_ = true; east_asian_width_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
break; return ParseResult::kConsumedValue;
case CSSValueRuby: case CSSValueRuby:
if (saw_ruby_value_) if (ruby_value_)
return ParseResult::kDisallowedValue; return ParseResult::kDisallowedValue;
saw_ruby_value_ = true; ruby_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
break; return ParseResult::kConsumedValue;
default: default:
return ParseResult::kUnknownValue; return ParseResult::kUnknownValue;
} }
result_->Append(*CSSPropertyParserHelpers::ConsumeIdent(range));
return ParseResult::kConsumedValue;
} }
CSSValue* FinalizeValue() { CSSValue* FinalizeValue() {
if (!result_->length()) CSSValueList* result = CSSValueList::CreateSpaceSeparated();
if (east_asian_form_value_)
result->Append(*east_asian_form_value_.Release());
if (east_asian_width_value_)
result->Append(*east_asian_width_value_.Release());
if (ruby_value_)
result->Append(*ruby_value_.Release());
if (!result->length())
return CSSIdentifierValue::Create(CSSValueNormal); return CSSIdentifierValue::Create(CSSValueNormal);
return result_.Release(); return result;
} }
private: private:
bool saw_east_asian_form_value_; Member<CSSIdentifierValue> east_asian_form_value_;
bool saw_east_asian_width_value_; Member<CSSIdentifierValue> east_asian_width_value_;
bool saw_ruby_value_; Member<CSSIdentifierValue> ruby_value_;
Member<CSSValueList> result_;
}; };
} // namespace blink } // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment