diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2014-08-12 23:01:29 +0100 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2014-08-16 08:31:23 +0100 |
commit | 7e78e54c3f4e3d5e89c35d2ee36f81aed2278566 (patch) | |
tree | 51d399e3d6757ca4db13c81d407979e0294d23a2 /src/components/style/parsing_utils.rs | |
parent | 6a5fed0471566812f417789070db31f58739c077 (diff) | |
download | servo-7e78e54c3f4e3d5e89c35d2ee36f81aed2278566.tar.gz servo-7e78e54c3f4e3d5e89c35d2ee36f81aed2278566.zip |
Refactor and fix src parsing in @font-face
Diffstat (limited to 'src/components/style/parsing_utils.rs')
-rw-r--r-- | src/components/style/parsing_utils.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/components/style/parsing_utils.rs b/src/components/style/parsing_utils.rs index 413cad78601..3afd7ba0353 100644 --- a/src/components/style/parsing_utils.rs +++ b/src/components/style/parsing_utils.rs @@ -4,7 +4,7 @@ use std::ascii::StrAsciiExt; -use cssparser::ast::{ComponentValue, Ident, SkipWhitespaceIterable, SkipWhitespaceIterator}; +use cssparser::ast::{ComponentValue, Ident, Comma, SkipWhitespaceIterable, SkipWhitespaceIterator}; pub fn one_component_value<'a>(input: &'a [ComponentValue]) -> Result<&'a ComponentValue, ()> { @@ -56,5 +56,26 @@ impl<E, I: Iterator<E>> Iterator<E> for BufferedIter<E, I> { } } +pub type ParserIter<'a, 'b> = &'a mut BufferedIter<&'b ComponentValue, SkipWhitespaceIterator<'b>>; -pub type ParserIter<'a> = BufferedIter<&'a ComponentValue, SkipWhitespaceIterator<'a>>; + +#[inline] +pub fn parse_slice_comma_separated<T>(input: &[ComponentValue], + parse_one: |ParserIter| -> Result<T, ()>) + -> Result<Vec<T>, ()> { + parse_comma_separated(&mut BufferedIter::new(input.skip_whitespace()), parse_one) +} + +#[inline] +pub fn parse_comma_separated<T>(iter: ParserIter, + parse_one: |ParserIter| -> Result<T, ()>) + -> Result<Vec<T>, ()> { + let mut values = vec![try!(parse_one(iter))]; + for component_value in iter { + match component_value { + &Comma => values.push(try!(parse_one(iter))), + _ => return Err(()) + } + } + Ok(values) +} |