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 {
public:
FontVariantEastAsianParser()
: saw_east_asian_form_value_(false),
saw_east_asian_width_value_(false),
saw_ruby_value_(false),
result_(CSSValueList::CreateSpaceSeparated()) {}
: east_asian_form_value_(nullptr),
east_asian_width_value_(nullptr),
ruby_value_(nullptr) {}
enum class ParseResult { kConsumedValue, kDisallowedValue, kUnknownValue };
......@@ -32,39 +31,44 @@ class FontVariantEastAsianParser {
case CSSValueJis04:
case CSSValueSimplified:
case CSSValueTraditional:
if (saw_east_asian_form_value_)
if (east_asian_form_value_)
return ParseResult::kDisallowedValue;
saw_east_asian_form_value_ = true;
break;
east_asian_form_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
return ParseResult::kConsumedValue;
case CSSValueFullWidth:
case CSSValueProportionalWidth:
if (saw_east_asian_width_value_)
if (east_asian_width_value_)
return ParseResult::kDisallowedValue;
saw_east_asian_width_value_ = true;
break;
east_asian_width_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
return ParseResult::kConsumedValue;
case CSSValueRuby:
if (saw_ruby_value_)
if (ruby_value_)
return ParseResult::kDisallowedValue;
saw_ruby_value_ = true;
break;
ruby_value_ = CSSPropertyParserHelpers::ConsumeIdent(range);
return ParseResult::kConsumedValue;
default:
return ParseResult::kUnknownValue;
}
result_->Append(*CSSPropertyParserHelpers::ConsumeIdent(range));
return ParseResult::kConsumedValue;
}
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 result_.Release();
return result;
}
private:
bool saw_east_asian_form_value_;
bool saw_east_asian_width_value_;
bool saw_ruby_value_;
Member<CSSValueList> result_;
Member<CSSIdentifierValue> east_asian_form_value_;
Member<CSSIdentifierValue> east_asian_width_value_;
Member<CSSIdentifierValue> ruby_value_;
};
} // 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