mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Add the 'symbols' descriptor for @counter-style
This commit is contained in:
parent
0ba5cae707
commit
fe15663423
2 changed files with 46 additions and 1 deletions
|
@ -16,7 +16,7 @@ use shared_lock::{SharedRwLockReadGuard, ToCssWithGuard};
|
||||||
use std::ascii::AsciiExt;
|
use std::ascii::AsciiExt;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
use style_traits::ToCss;
|
use style_traits::{ToCss, OneOrMoreCommaSeparated};
|
||||||
use values::CustomIdent;
|
use values::CustomIdent;
|
||||||
|
|
||||||
/// Parse the prelude of an @counter-style rule
|
/// Parse the prelude of an @counter-style rule
|
||||||
|
@ -153,6 +153,9 @@ counter_style_descriptors! {
|
||||||
/// https://drafts.csswg.org/css-counter-styles/#counter-style-fallback
|
/// https://drafts.csswg.org/css-counter-styles/#counter-style-fallback
|
||||||
"fallback" fallback / eCSSCounterDesc_Fallback: Fallback =
|
"fallback" fallback / eCSSCounterDesc_Fallback: Fallback =
|
||||||
Fallback(CustomIdent(Atom::from("decimal")));
|
Fallback(CustomIdent(Atom::from("decimal")));
|
||||||
|
|
||||||
|
/// https://drafts.csswg.org/css-counter-styles/#counter-style-symbols
|
||||||
|
"symbols" symbols / eCSSCounterDesc_Symbols: Symbols = Symbols(Vec::new());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// https://drafts.csswg.org/css-counter-styles/#counter-style-system
|
/// https://drafts.csswg.org/css-counter-styles/#counter-style-system
|
||||||
|
@ -379,3 +382,37 @@ impl ToCss for Fallback {
|
||||||
self.0.to_css(dest)
|
self.0.to_css(dest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// https://drafts.csswg.org/css-counter-styles/#counter-style-symbols
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Symbols(pub Vec<Symbol>);
|
||||||
|
|
||||||
|
impl Parse for Symbols {
|
||||||
|
fn parse(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
|
||||||
|
let mut symbols = Vec::new();
|
||||||
|
loop {
|
||||||
|
if let Ok(s) = input.try(|input| Symbol::parse(context, input)) {
|
||||||
|
symbols.push(s)
|
||||||
|
} else {
|
||||||
|
if symbols.is_empty() {
|
||||||
|
return Err(())
|
||||||
|
} else {
|
||||||
|
return Ok(Symbols(symbols))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ToCss for Symbols {
|
||||||
|
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||||
|
let mut iter = self.0.iter();
|
||||||
|
let first = iter.next().expect("expected at least one symbol");
|
||||||
|
first.to_css(dest)?;
|
||||||
|
for item in iter {
|
||||||
|
dest.write_char(' ')?;
|
||||||
|
item.to_css(dest)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -227,3 +227,11 @@ impl ToNsCssValue for counter_style::Fallback {
|
||||||
nscssvalue.set_ident_from_atom(&self.0 .0)
|
nscssvalue.set_ident_from_atom(&self.0 .0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToNsCssValue for counter_style::Symbols {
|
||||||
|
fn convert(&self, _nscssvalue: &mut nsCSSValue) {
|
||||||
|
if !self.0.is_empty() {
|
||||||
|
// FIXME: add bindings for nsCSSValueList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue