Skip to content

Commit

Permalink
Parse @font-feature-values at-rule
Browse files Browse the repository at this point in the history
Part 2 of supporting font-variant-alternates. Parse @font-feature-values
at-rule. Exercise code in basic CSSParserImplTest test. This change does
not yet store rules in the style engine.

In this change, the CSSOM wrapper retrieval for
StyleRuleFontFeatureValues intentionally returns nullptr in the interest
of keeping this CL small, which changes the WPT test result for
now. CSSOM Implementation follows in the next part of the series.

Bug: 716567
Change-Id: Ie67ddf0ad068831c273ab6f5e1befeaf3d7c9988
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4055526
Commit-Queue: Dominik Röttsches <drott@chromium.org>
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1076713}
  • Loading branch information
drott authored and Chromium LUCI CQ committed Nov 29, 2022
1 parent 6a98641 commit 47b57e1
Show file tree
Hide file tree
Showing 18 changed files with 613 additions and 155 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3742,6 +3742,12 @@ enum WebFeature {
kSoftNavigationHeuristics = 4401,
kMathMLMathElement = 4402,
kMathMLMathElementInDocument = 4403,
kCSSAtRuleStylistic = 4404,
kCSSAtRuleStyleset = 4405,
kCSSAtRuleCharacterVariant = 4406,
kCSSAtRuleSwash = 4407 ,
kCSSAtRuleOrnaments = 4408,
kCSSAtRuleAnnotation = 4409,

// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
Expand Down
2 changes: 2 additions & 0 deletions third_party/blink/renderer/core/css/build.gni
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,8 @@ blink_core_sources_css = [
"style_rule_css_style_declaration.h",
"style_rule_font_palette_values.cc",
"style_rule_font_palette_values.h",
"style_rule_font_feature_values.cc",
"style_rule_font_feature_values.h",
"style_rule_import.cc",
"style_rule_import.h",
"style_rule_keyframe.cc",
Expand Down
2 changes: 2 additions & 0 deletions third_party/blink/renderer/core/css/css_rule.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class CORE_EXPORT CSSRule : public ScriptWrappable {
kNamespaceRule = 10,
kCounterStyleRule = 11,
kSupportsRule = 12,
kFontFeatureValuesRule = 14,
kViewportRule = 15,
// CSSOM constants are deprecated [1], and there will be no new
// web-exposed values.
Expand All @@ -77,6 +78,7 @@ class CORE_EXPORT CSSRule : public ScriptWrappable {
kScopeRule = 21,
kPositionFallbackRule = 22,
kTryRule = 23,
kFontFeatureRule = 24,
};

virtual Type GetType() const = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ CSSValue* ConsumeDescriptor(StyleRule::RuleType rule_type,
case StyleRule::kPage:
case StyleRule::kKeyframes:
case StyleRule::kKeyframe:
case StyleRule::kFontFeatureValues:
case StyleRule::kFontFeature:
case StyleRule::kLayerBlock:
case StyleRule::kLayerStatement:
case StyleRule::kNamespace:
Expand Down
49 changes: 49 additions & 0 deletions third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,41 @@ CSSAtRuleID CssAtRuleID(StringView name) {
return CSSAtRuleID::kCSSAtRuleFontPaletteValues;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "font-feature-values")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleFontFeatureValues;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "stylistic")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleStylistic;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "styleset")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleStyleset;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "character-variant")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleCharacterVariant;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "swash")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleSwash;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "ornaments")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleOrnaments;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "annotation")) {
if (RuntimeEnabledFeatures::FontVariantAlternatesEnabled())
return CSSAtRuleID::kCSSAtRuleAnnotation;
return CSSAtRuleID::kCSSAtRuleInvalid;
}
if (EqualIgnoringASCIICase(name, "import"))
return CSSAtRuleID::kCSSAtRuleImport;
if (EqualIgnoringASCIICase(name, "keyframes"))
Expand Down Expand Up @@ -72,12 +107,18 @@ namespace {

absl::optional<WebFeature> AtRuleFeature(CSSAtRuleID rule_id) {
switch (rule_id) {
case CSSAtRuleID::kCSSAtRuleAnnotation:
return WebFeature::kCSSAtRuleAnnotation;
case CSSAtRuleID::kCSSAtRuleCharset:
return WebFeature::kCSSAtRuleCharset;
case CSSAtRuleID::kCSSAtRuleCharacterVariant:
return WebFeature::kCSSAtRuleCharacterVariant;
case CSSAtRuleID::kCSSAtRuleFontFace:
return WebFeature::kCSSAtRuleFontFace;
case CSSAtRuleID::kCSSAtRuleFontPaletteValues:
return WebFeature::kCSSAtRuleFontPaletteValues;
case CSSAtRuleID::kCSSAtRuleFontFeatureValues:
return WebFeature::kCSSAtRuleFontFeatureValues;
case CSSAtRuleID::kCSSAtRuleImport:
return WebFeature::kCSSAtRuleImport;
case CSSAtRuleID::kCSSAtRuleKeyframes:
Expand All @@ -96,8 +137,16 @@ absl::optional<WebFeature> AtRuleFeature(CSSAtRuleID rule_id) {
return WebFeature::kCSSAtRuleContainer;
case CSSAtRuleID::kCSSAtRuleCounterStyle:
return WebFeature::kCSSAtRuleCounterStyle;
case CSSAtRuleID::kCSSAtRuleOrnaments:
return WebFeature::kCSSAtRuleOrnaments;
case CSSAtRuleID::kCSSAtRuleScope:
return WebFeature::kCSSAtRuleScope;
case CSSAtRuleID::kCSSAtRuleStyleset:
return WebFeature::kCSSAtRuleStylistic;
case CSSAtRuleID::kCSSAtRuleStylistic:
return WebFeature::kCSSAtRuleStylistic;
case CSSAtRuleID::kCSSAtRuleSwash:
return WebFeature::kCSSAtRuleSwash;
case CSSAtRuleID::kCSSAtRuleScrollTimeline:
return WebFeature::kCSSAtRuleScrollTimeline;
case CSSAtRuleID::kCSSAtRuleSupports:
Expand Down
8 changes: 8 additions & 0 deletions third_party/blink/renderer/core/css/parser/css_at_rule_id.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ enum class CSSAtRuleID {
kCSSAtRuleSupports,
kCSSAtRuleTry,
kCSSAtRuleWebkitKeyframes,
// Font-feature-values related at-rule ids below:
kCSSAtRuleAnnotation,
kCSSAtRuleCharacterVariant,
kCSSAtRuleFontFeatureValues,
kCSSAtRuleOrnaments,
kCSSAtRuleStylistic,
kCSSAtRuleStyleset,
kCSSAtRuleSwash
};

CSSAtRuleID CssAtRuleID(StringView name);
Expand Down

0 comments on commit 47b57e1

Please sign in to comment.