feature: implement :glob()

This commit is contained in:
yiffyrusdev 2024-12-13 10:34:23 +05:00
commit 722106595b
No known key found for this signature in database
GPG key ID: FB83DFEAFB3F4709

View file

@ -1,8 +1,8 @@
use ostrta::OneSyntaxToRuleThemAll;
use raffia::{
ast::{
ClassSelector, CompoundSelector, IdSelector, NestingSelector, SimpleSelector, Statement,
Stylesheet, TypeSelector,
ClassSelector, CompoundSelector, IdSelector, NestingSelector, PseudoClassSelector,
SimpleSelector, Statement, Stylesheet, TypeSelector,
},
ParserBuilder,
};
@ -56,6 +56,27 @@ impl<'s> StylesheetAdapter<'s> {
self.selectors_by(|c| c.as_nesting().cloned())
}
/// special selector case searching for :g(whatever), :glob(whatever), :global(whatever)
pub fn glob_modified_selectors(&self) -> Vec<PseudoClassSelector<'s>> {
self.selectors_by(|c| {
let cps = match c.as_pseudo_class() {
Some(s) => s.clone(),
_ => return None,
};
let ident = match cps.name.as_literal().map(|r| r.raw) {
Some(i) => i,
_ => return None,
};
if ident == "global" {
Some(cps)
} else {
None
}
})
}
/// Return collected [Vec] of owned values modulo `T`, filtered by `F`.
///
/// This is preferred way to apply custom filtering on selectors over