From 7f0461a2320b95c2890ea8f6096952dcddd77f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 5 Nov 2018 10:38:31 +0100 Subject: [PATCH] tokenizer: Look for both env() and var() functions. Differential Revision: https://phabricator.services.mozilla.com/D9609 --- Cargo.toml | 2 +- src/parser.rs | 16 +++++++++------- src/tests.rs | 6 +++--- src/tokenizer.rs | 22 ++++++++++++---------- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d7a96a78..b12a1158 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cssparser" -version = "0.24.1" +version = "0.25.0" authors = [ "Simon Sapin " ] description = "Rust implementation of CSS Syntax Level 3" diff --git a/src/parser.rs b/src/parser.rs index 76736a85..ac4bb335 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -470,17 +470,19 @@ impl<'i: 't, 't> Parser<'i, 't> { self.at_start_of = state.at_start_of; } - /// Start looking for `var()` functions. (See the `.seen_var_functions()` method.) + /// Start looking for `var()` / `env()` functions. (See the + /// `.seen_var_or_env_functions()` method.) #[inline] - pub fn look_for_var_functions(&mut self) { - self.input.tokenizer.look_for_var_functions() + pub fn look_for_var_or_env_functions(&mut self) { + self.input.tokenizer.look_for_var_or_env_functions() } - /// Return whether a `var()` function has been seen by the tokenizer since - /// either `look_for_var_functions` was called, and stop looking. + /// Return whether a `var()` or `env()` function has been seen by the + /// tokenizer since either `look_for_var_or_env_functions` was called, and + /// stop looking. #[inline] - pub fn seen_var_functions(&mut self) -> bool { - self.input.tokenizer.seen_var_functions() + pub fn seen_var_or_env_functions(&mut self) -> bool { + self.input.tokenizer.seen_var_or_env_functions() } /// Execute the given closure, passing it the parser. diff --git a/src/tests.rs b/src/tests.rs index 48a7e560..926713e8 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -685,14 +685,14 @@ fn unquoted_url(b: &mut Bencher) { b.iter(|| { let mut input = ParserInput::new(BACKGROUND_IMAGE); let mut input = Parser::new(&mut input); - input.look_for_var_functions(); + input.look_for_var_or_env_functions(); let result = input.try(|input| input.expect_url()); assert!(result.is_ok()); - input.seen_var_functions(); - (result.is_ok(), input.seen_var_functions()) + input.seen_var_or_env_functions(); + (result.is_ok(), input.seen_var_or_env_functions()) }) } diff --git a/src/tokenizer.rs b/src/tokenizer.rs index a74d7c2f..61c4fd80 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -208,7 +208,7 @@ pub struct Tokenizer<'a> { /// of UTF-16 characters. current_line_start_position: usize, current_line_number: u32, - var_functions: SeenStatus, + var_or_env_functions: SeenStatus, source_map_url: Option<&'a str>, source_url: Option<&'a str>, } @@ -234,29 +234,31 @@ impl<'a> Tokenizer<'a> { position: 0, current_line_start_position: 0, current_line_number: first_line_number, - var_functions: SeenStatus::DontCare, + var_or_env_functions: SeenStatus::DontCare, source_map_url: None, source_url: None, } } #[inline] - pub fn look_for_var_functions(&mut self) { - self.var_functions = SeenStatus::LookingForThem; + pub fn look_for_var_or_env_functions(&mut self) { + self.var_or_env_functions = SeenStatus::LookingForThem; } #[inline] - pub fn seen_var_functions(&mut self) -> bool { - let seen = self.var_functions == SeenStatus::SeenAtLeastOne; - self.var_functions = SeenStatus::DontCare; + pub fn seen_var_or_env_functions(&mut self) -> bool { + let seen = self.var_or_env_functions == SeenStatus::SeenAtLeastOne; + self.var_or_env_functions = SeenStatus::DontCare; seen } #[inline] pub fn see_function(&mut self, name: &str) { - if self.var_functions == SeenStatus::LookingForThem { - if name.eq_ignore_ascii_case("var") { - self.var_functions = SeenStatus::SeenAtLeastOne; + if self.var_or_env_functions == SeenStatus::LookingForThem { + if name.eq_ignore_ascii_case("var") || + name.eq_ignore_ascii_case("env") + { + self.var_or_env_functions = SeenStatus::SeenAtLeastOne; } } }