From 627c823d0aaf1fdf9bf28b6cd9c38454e0b6ab2a Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 14 Apr 2017 05:53:37 +0200 Subject: [PATCH] Use CustomIdent in counter-increment --- components/layout/generated_content.rs | 6 ++- components/style/properties/gecko.mako.rs | 6 +-- .../properties/longhand/counters.mako.rs | 43 ++++++++----------- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/components/layout/generated_content.rs b/components/layout/generated_content.rs index 887562e89fb..a23fd165ecf 100644 --- a/components/layout/generated_content.rs +++ b/components/layout/generated_content.rs @@ -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 diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index ee419a9bf77..b8bf35e04c7 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -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; } } } diff --git a/components/style/properties/longhand/counters.mako.rs b/components/style/properties/longhand/counters.mako.rs index c8dc8ebb4ce..d5e68d72970 100644 --- a/components/style/properties/longhand/counters.mako.rs +++ b/components/style/properties/longhand/counters.mako.rs @@ -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(&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::>()) } 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::>()) } } @@ -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, };