mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Use CustomIdent in counter-increment
This commit is contained in:
parent
d9c2d1a9fb
commit
627c823d0a
3 changed files with 26 additions and 29 deletions
|
@ -273,6 +273,7 @@ impl<'a,'b> ResolveGeneratedContentFragmentMutator<'a,'b> {
|
|||
self.traversal.list_item.truncate_to_level(self.level);
|
||||
|
||||
for &(ref counter_name, value) in &fragment.style().get_counters().counter_reset.0 {
|
||||
let counter_name = &*counter_name.0;
|
||||
if let Some(ref mut counter) = self.traversal.counters.get_mut(counter_name) {
|
||||
counter.reset(self.level, value);
|
||||
continue
|
||||
|
@ -280,10 +281,11 @@ impl<'a,'b> ResolveGeneratedContentFragmentMutator<'a,'b> {
|
|||
|
||||
let mut counter = Counter::new();
|
||||
counter.reset(self.level, value);
|
||||
self.traversal.counters.insert((*counter_name).clone(), counter);
|
||||
self.traversal.counters.insert(counter_name.to_owned(), counter);
|
||||
}
|
||||
|
||||
for &(ref counter_name, value) in &fragment.style().get_counters().counter_increment.0 {
|
||||
let counter_name = &*counter_name.0;
|
||||
if let Some(ref mut counter) = self.traversal.counters.get_mut(counter_name) {
|
||||
counter.increment(self.level, value);
|
||||
continue
|
||||
|
@ -291,7 +293,7 @@ impl<'a,'b> ResolveGeneratedContentFragmentMutator<'a,'b> {
|
|||
|
||||
let mut counter = Counter::new();
|
||||
counter.increment(self.level, value);
|
||||
self.traversal.counters.insert((*counter_name).clone(), counter);
|
||||
self.traversal.counters.insert(counter_name.to_owned(), counter);
|
||||
}
|
||||
|
||||
self.incremented = true
|
||||
|
|
|
@ -4012,9 +4012,9 @@ clip-path
|
|||
unsafe {
|
||||
bindings::Gecko_ClearAndResizeCounter${counter_property}s(&mut self.gecko,
|
||||
v.0.len() as u32);
|
||||
for (i, item) in v.0.into_iter().enumerate() {
|
||||
self.gecko.m${counter_property}s[i].mCounter.assign_utf8(&item.0);
|
||||
self.gecko.m${counter_property}s[i].mValue = item.1;
|
||||
for (i, (name, value)) in v.0.into_iter().enumerate() {
|
||||
self.gecko.m${counter_property}s[i].mCounter.assign(name.0.as_slice());
|
||||
self.gecko.m${counter_property}s[i].mValue = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,21 +240,22 @@
|
|||
use std::fmt;
|
||||
use style_traits::ToCss;
|
||||
use super::content;
|
||||
use values::HasViewportPercentage;
|
||||
use values::{HasViewportPercentage, CustomIdent};
|
||||
|
||||
use cssparser::{Token, serialize_identifier};
|
||||
use std::borrow::{Cow, ToOwned};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct SpecifiedValue(pub Vec<(String, specified::Integer)>);
|
||||
pub struct SpecifiedValue(pub Vec<(CustomIdent, specified::Integer)>);
|
||||
|
||||
pub mod computed_value {
|
||||
use std::fmt;
|
||||
use style_traits::ToCss;
|
||||
use values::CustomIdent;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
pub struct T(pub Vec<(String, i32)>);
|
||||
pub struct T(pub Vec<(CustomIdent, i32)>);
|
||||
|
||||
impl ToCss for T {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
||||
|
@ -266,14 +267,14 @@
|
|||
}
|
||||
|
||||
let mut first = true;
|
||||
for pair in &self.0 {
|
||||
for &(ref name, value) in &self.0 {
|
||||
if !first {
|
||||
try!(dest.write_str(" "));
|
||||
dest.write_str(" ")?;
|
||||
}
|
||||
first = false;
|
||||
try!(serialize_identifier(&pair.0, dest));
|
||||
try!(dest.write_str(" "));
|
||||
try!(pair.1.to_css(dest));
|
||||
name.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
value.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
@ -284,14 +285,14 @@
|
|||
type ComputedValue = computed_value::T;
|
||||
|
||||
fn to_computed_value(&self, context: &Context) -> Self::ComputedValue {
|
||||
computed_value::T(self.0.iter().map(|entry| {
|
||||
(entry.0.clone(), entry.1.to_computed_value(context))
|
||||
computed_value::T(self.0.iter().map(|&(ref name, ref value)| {
|
||||
(name.clone(), value.to_computed_value(context))
|
||||
}).collect::<Vec<_>>())
|
||||
}
|
||||
|
||||
fn from_computed_value(computed: &Self::ComputedValue) -> Self {
|
||||
SpecifiedValue(computed.0.iter().map(|entry| {
|
||||
(entry.0.clone(), specified::Integer::from_computed_value(&entry.1))
|
||||
SpecifiedValue(computed.0.iter().map(|&(ref name, ref value)| {
|
||||
(name.clone(), specified::Integer::from_computed_value(&value))
|
||||
}).collect::<Vec<_>>())
|
||||
}
|
||||
}
|
||||
|
@ -311,14 +312,14 @@
|
|||
return dest.write_str("none");
|
||||
}
|
||||
let mut first = true;
|
||||
for pair in &self.0 {
|
||||
for &(ref name, ref value) in &self.0 {
|
||||
if !first {
|
||||
try!(dest.write_str(" "));
|
||||
dest.write_str(" ")?;
|
||||
}
|
||||
first = false;
|
||||
try!(serialize_identifier(&pair.0, dest));
|
||||
try!(dest.write_str(" "));
|
||||
try!(pair.1.to_css(dest));
|
||||
name.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
value.to_css(dest)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -339,13 +340,7 @@
|
|||
let mut counters = Vec::new();
|
||||
loop {
|
||||
let counter_name = match input.next() {
|
||||
Ok(Token::Ident(ident)) => {
|
||||
if CSSWideKeyword::from_ident(&ident).is_some() || ident.eq_ignore_ascii_case("none") {
|
||||
// Don't accept CSS-wide keywords or none as the counter name.
|
||||
return Err(());
|
||||
}
|
||||
(*ident).to_owned()
|
||||
}
|
||||
Ok(Token::Ident(ident)) => CustomIdent::from_ident(ident, &["none"])?,
|
||||
Ok(_) => return Err(()),
|
||||
Err(_) => break,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue