From 4cee8cf93748df46cb02bb7d4fc2f2130368cbd8 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Tue, 16 May 2023 08:03:48 +0200 Subject: [PATCH] style: Support image-set in the content property Differential Revision: https://phabricator.services.mozilla.com/D107397 --- components/style/values/computed/counters.rs | 6 ++-- components/style/values/generics/counters.rs | 13 ++++----- components/style/values/specified/counters.rs | 29 +++++++++++++++---- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/components/style/values/computed/counters.rs b/components/style/values/computed/counters.rs index 40cfe46efa6..1ae46c772ab 100644 --- a/components/style/values/computed/counters.rs +++ b/components/style/values/computed/counters.rs @@ -4,7 +4,7 @@ //! Computed values for counter properties -use crate::values::computed::url::ComputedImageUrl; +use crate::values::computed::image::Image; use crate::values::generics::counters as generics; use crate::values::generics::counters::CounterIncrement as GenericCounterIncrement; use crate::values::generics::counters::CounterSetOrReset as GenericCounterSetOrReset; @@ -16,7 +16,7 @@ pub type CounterIncrement = GenericCounterIncrement; pub type CounterSetOrReset = GenericCounterSetOrReset; /// A computed value for the `content` property. -pub type Content = generics::GenericContent; +pub type Content = generics::GenericContent; /// A computed content item. -pub type ContentItem = generics::GenericContentItem; +pub type ContentItem = generics::GenericContentItem; diff --git a/components/style/values/generics/counters.rs b/components/style/values/generics/counters.rs index 76ee97ce175..2a8f70c8f44 100644 --- a/components/style/values/generics/counters.rs +++ b/components/style/values/generics/counters.rs @@ -148,18 +148,18 @@ fn is_decimal(counter_type: &CounterStyleType) -> bool { Clone, Debug, Eq, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToComputedValue, ToCss, ToShmem, )] #[repr(u8)] -pub enum GenericContent { +pub enum GenericContent { /// `normal` reserved keyword. Normal, /// `none` reserved keyword. None, /// Content items. - Items(#[css(iterable)] crate::OwnedSlice>), + Items(#[css(iterable)] crate::OwnedSlice>), } pub use self::GenericContent as Content; -impl Content { +impl Content { /// Whether `self` represents list of items. #[inline] pub fn is_items(&self) -> bool { @@ -180,14 +180,13 @@ impl Content { Eq, MallocSizeOf, PartialEq, - SpecifiedValueInfo, ToComputedValue, ToCss, ToResolvedValue, ToShmem, )] #[repr(u8)] -pub enum GenericContentItem { +pub enum GenericContentItem { /// Literal string content. String(crate::OwnedStr), /// `counter(name, style)`. @@ -220,8 +219,8 @@ pub enum GenericContentItem { /// `attr([namespace? `|`]? ident)` #[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] Attr(Attr), - /// `url(url)` - Url(ImageUrl), + /// image-set(url) | url(url) + Image(I), } pub use self::GenericContentItem as ContentItem; diff --git a/components/style/values/specified/counters.rs b/components/style/values/specified/counters.rs index 61014f8d3b4..aa442549fa5 100644 --- a/components/style/values/specified/counters.rs +++ b/components/style/values/specified/counters.rs @@ -11,7 +11,7 @@ use crate::values::generics::counters as generics; use crate::values::generics::counters::CounterPair; #[cfg(feature = "gecko")] use crate::values::generics::CounterStyle; -use crate::values::specified::url::SpecifiedImageUrl; +use crate::values::specified::image::Image; #[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] use crate::values::specified::Attr; use crate::values::specified::Integer; @@ -19,7 +19,7 @@ use crate::values::CustomIdent; use cssparser::{Parser, Token}; #[cfg(any(feature = "gecko", feature = "servo-layout-2013"))] use selectors::parser::SelectorParseErrorKind; -use style_traits::{ParseError, StyleParseErrorKind}; +use style_traits::{KeywordsCollectFn, ParseError, SpecifiedValueInfo, StyleParseErrorKind}; /// A specified value for the `counter-increment` property. pub type CounterIncrement = generics::GenericCounterIncrement; @@ -83,10 +83,10 @@ fn parse_counters<'i, 't>( } /// The specified value for the `content` property. -pub type Content = generics::GenericContent; +pub type Content = generics::GenericContent; /// The specified value for a content item in the `content` property. -pub type ContentItem = generics::GenericContentItem; +pub type ContentItem = generics::GenericContentItem; impl Content { #[cfg(feature = "servo-layout-2013")] @@ -137,8 +137,8 @@ impl Parse for Content { loop { #[cfg(any(feature = "gecko", feature = "servo-layout-2020"))] { - if let Ok(url) = input.try_parse(|i| SpecifiedImageUrl::parse(context, i)) { - content.push(generics::ContentItem::Url(url)); + if let Ok(image) = input.try_parse(|i| Image::parse_only_url(context, i)) { + content.push(generics::ContentItem::Image(image)); continue; } } @@ -214,3 +214,20 @@ impl Parse for Content { Ok(generics::Content::Items(content.into())) } } + +impl SpecifiedValueInfo for generics::GenericContentItem { + fn collect_completion_keywords(f: KeywordsCollectFn) { + f(&[ + "url", + "image-set", + "counter", + "counters", + "attr", + "open-quote", + "close-quote", + "no-open-quote", + "no-close-quote", + "-moz-alt-content", + ]); + } +}