Skip to content

Commit

Permalink
style: Add an 'auto' value for the CSS 'quotes' property, and make it…
Browse files Browse the repository at this point in the history
… use language-dependent quote marks.

Differential Revision: https://phabricator.services.mozilla.com/D36429
  • Loading branch information
jfkthame authored and emilio committed Jul 23, 2019
1 parent c00045b commit 6cf87d2
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 25 deletions.
20 changes: 2 additions & 18 deletions components/style/values/computed/list.rs
Expand Up @@ -7,28 +7,12 @@
#[cfg(feature = "gecko")]
pub use crate::values::specified::list::ListStyleType;
pub use crate::values::specified::list::MozListReversed;
pub use crate::values::specified::list::{QuotePair, Quotes};

lazy_static! {
static ref INITIAL_QUOTES: crate::ArcSlice<QuotePair> = crate::ArcSlice::from_iter_leaked(
vec![
QuotePair {
opening: "\u{201c}".to_owned().into(),
closing: "\u{201d}".to_owned().into(),
},
QuotePair {
opening: "\u{2018}".to_owned().into(),
closing: "\u{2019}".to_owned().into(),
},
]
.into_iter()
);
}
pub use crate::values::specified::list::Quotes;

impl Quotes {
/// Initial value for `quotes`.
#[inline]
pub fn get_initial_value() -> Quotes {
Quotes(INITIAL_QUOTES.clone())
Quotes::Auto
}
}
2 changes: 1 addition & 1 deletion components/style/values/computed/mod.rs
Expand Up @@ -64,7 +64,7 @@ pub use self::length::{NonNegativeLengthPercentage, NonNegativeLengthPercentageO
#[cfg(feature = "gecko")]
pub use self::list::ListStyleType;
pub use self::list::MozListReversed;
pub use self::list::{QuotePair, Quotes};
pub use self::list::Quotes;
pub use self::motion::{OffsetPath, OffsetRotate};
pub use self::outline::OutlineStyle;
pub use self::percentage::{NonNegativePercentage, Percentage};
Expand Down
40 changes: 35 additions & 5 deletions components/style/values/specified/list.rs
Expand Up @@ -104,7 +104,7 @@ pub struct QuotePair {
pub closing: crate::OwnedStr,
}

/// Specified and computed `quotes` property.
/// List of quote pairs for the specified/computed value of `quotes` property.
#[derive(
Clone,
Debug,
Expand All @@ -117,23 +117,53 @@ pub struct QuotePair {
ToResolvedValue,
ToShmem,
)]
#[repr(C)]
pub struct Quotes(
#[repr(transparent)]
pub struct QuoteList(
#[css(iterable, if_empty = "none")]
#[ignore_malloc_size_of = "Arc"]
pub crate::ArcSlice<QuotePair>,
);

/// Specified and computed `quotes` property: `auto`, `none`, or a list
/// of characters.
///
/// cbindgen:derive-tagged-enum-copy-constructor=true
#[derive(
Clone,
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToComputedValue,
ToCss,
ToResolvedValue,
ToShmem,
)]
#[repr(C)]
pub enum Quotes {
/// list of quote pairs
QuoteList(QuoteList),
/// auto (use lang-dependent quote marks)
Auto,
}

impl Parse for Quotes {
fn parse<'i, 't>(
_: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<Quotes, ParseError<'i>> {
if input
.try(|input| input.expect_ident_matching("auto"))
.is_ok()
{
return Ok(Quotes::Auto);
}

if input
.try(|input| input.expect_ident_matching("none"))
.is_ok()
{
return Ok(Self::default());
return Ok(Quotes::QuoteList(QuoteList::default()))
}

let mut quotes = Vec::new();
Expand All @@ -150,7 +180,7 @@ impl Parse for Quotes {
}

if !quotes.is_empty() {
Ok(Quotes(crate::ArcSlice::from_iter(quotes.into_iter())))
Ok(Quotes::QuoteList(QuoteList(crate::ArcSlice::from_iter(quotes.into_iter()))))
} else {
Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError))
}
Expand Down
2 changes: 1 addition & 1 deletion components/style/values/specified/mod.rs
Expand Up @@ -65,7 +65,7 @@ pub use self::length::{NonNegativeLengthPercentage, NonNegativeLengthPercentageO
#[cfg(feature = "gecko")]
pub use self::list::ListStyleType;
pub use self::list::MozListReversed;
pub use self::list::{QuotePair, Quotes};
pub use self::list::Quotes;
pub use self::motion::{OffsetPath, OffsetRotate};
pub use self::outline::OutlineStyle;
pub use self::percentage::Percentage;
Expand Down

0 comments on commit 6cf87d2

Please sign in to comment.