diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs index 434e7a3082e..248efcba7de 100644 --- a/components/style/servo/selector_parser.rs +++ b/components/style/servo/selector_parser.rs @@ -616,53 +616,48 @@ impl + Debug> ElementExt for E { /// Returns whether the language is matched, as defined by /// [RFC 4647](https://tools.ietf.org/html/rfc4647#section-3.3.2). pub fn extended_filtering(tag: &str, range: &str) -> bool { - let lang_ranges: Vec<&str> = range.split(',').collect(); - - lang_ranges.iter().any(|&lang_range| { + range.split(',').any(|lang_range| { // step 1 - let range_subtags: Vec<&str> = lang_range.split('\x2d').collect(); - let tag_subtags: Vec<&str> = tag.split('\x2d').collect(); - - let mut range_iter = range_subtags.iter(); - let mut tag_iter = tag_subtags.iter(); + let mut range_subtags = lang_range.split('\x2d'); + let mut tag_subtags = tag.split('\x2d'); // step 2 // Note: [Level-4 spec](https://drafts.csswg.org/selectors/#lang-pseudo) check for wild card - if let (Some(range_subtag), Some(tag_subtag)) = (range_iter.next(), tag_iter.next()) { + if let (Some(range_subtag), Some(tag_subtag)) = (range_subtags.next(), tag_subtags.next()) { if !(range_subtag.eq_ignore_ascii_case(tag_subtag) || range_subtag.eq_ignore_ascii_case("*")) { return false; } } - let mut current_tag_subtag = tag_iter.next(); + let mut current_tag_subtag = tag_subtags.next(); // step 3 - for range_subtag in range_iter { + for range_subtag in range_subtags { // step 3a - if range_subtag.eq_ignore_ascii_case("*") { + if range_subtag == "*" { continue; } match current_tag_subtag.clone() { Some(tag_subtag) => { // step 3c if range_subtag.eq_ignore_ascii_case(tag_subtag) { - current_tag_subtag = tag_iter.next(); + current_tag_subtag = tag_subtags.next(); continue; - } else { - // step 3d - if tag_subtag.len() == 1 { - return false; - } else { - // else step 3e - continue with loop - current_tag_subtag = tag_iter.next(); - if current_tag_subtag.is_none() { - return false; - } - } + } + // step 3d + if tag_subtag.len() == 1 { + return false; + } + // else step 3e - continue with loop + current_tag_subtag = tag_subtags.next(); + if current_tag_subtag.is_none() { + return false; } }, // step 3b - None => { return false; } + None => { + return false; + } } } // step 4