diff options
author | Federico Mena Quintero <federico@gnome.org> | 2022-08-23 17:41:05 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2022-08-23 17:41:05 -0500 |
commit | 03fa7caa2772abc84b979ede060b0c1efaae5632 (patch) | |
tree | f4ddc96906b32f975340f9a1ea63ba86b5b52669 /src | |
parent | c0a336b8a3121033c0ddf59444a8ab7a26f95dff (diff) | |
download | librsvg-03fa7caa2772abc84b979ede060b0c1efaae5632.tar.gz |
Pass a Session to the cascading machinery
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/731>
Diffstat (limited to 'src')
-rw-r--r-- | src/css.rs | 3 | ||||
-rw-r--r-- | src/document.rs | 14 | ||||
-rw-r--r-- | src/element.rs | 7 | ||||
-rw-r--r-- | src/handle.rs | 2 | ||||
-rw-r--r-- | src/properties.rs | 17 |
5 files changed, 28 insertions, 15 deletions
@@ -941,6 +941,7 @@ pub fn cascade( ua_stylesheets: &[Stylesheet], author_stylesheets: &[Stylesheet], user_stylesheets: &[Stylesheet], + session: &Session, ) { for mut node in root.descendants().filter(|n| n.is_element()) { let mut matches = Vec::new(); @@ -975,7 +976,7 @@ pub fn cascade( .apply_style_declaration(m.declaration, m.origin); } - node.borrow_element_mut().set_style_attribute(); + node.borrow_element_mut().set_style_attribute(session); } let values = ComputedValues::default(); diff --git a/src/document.rs b/src/document.rs index 0af3d9e5..21252e40 100644 --- a/src/document.rs +++ b/src/document.rs @@ -166,8 +166,14 @@ impl Document { /// /// This uses the default UserAgent stylesheet, the document's internal stylesheets, /// plus an extra set of stylesheets supplied by the caller. - pub fn cascade(&mut self, extra: &[Stylesheet]) { - css::cascade(&mut self.tree, &UA_STYLESHEETS, &self.stylesheets, extra); + pub fn cascade(&mut self, extra: &[Stylesheet], session: &Session) { + css::cascade( + &mut self.tree, + &UA_STYLESHEETS, + &self.stylesheets, + extra, + session, + ); } } @@ -609,7 +615,7 @@ impl DocumentBuilder { if is_element_of_type!(root, Svg) { let mut document = Document { tree: root, - session, + session: session.clone(), ids, externs: RefCell::new(Resources::new()), images: RefCell::new(Images::new()), @@ -617,7 +623,7 @@ impl DocumentBuilder { stylesheets, }; - document.cascade(&[]); + document.cascade(&[], &session); Ok(document) } else { diff --git a/src/element.rs b/src/element.rs index 2926680f..7db33608 100644 --- a/src/element.rs +++ b/src/element.rs @@ -232,7 +232,7 @@ impl<T: SetAttributes + Draw> ElementInner<T> { } /// Applies CSS styles from the "style" attribute - fn set_style_attribute(&mut self) { + fn set_style_attribute(&mut self, session: &Session) { let style = self .attributes .iter() @@ -244,6 +244,7 @@ impl<T: SetAttributes + Draw> ElementInner<T> { style, Origin::Author, &mut self.important_styles, + session, ) { self.set_error(e); } @@ -515,8 +516,8 @@ impl Element { call_inner!(self, apply_style_declaration, declaration, origin) } - pub fn set_style_attribute(&mut self) { - call_inner!(self, set_style_attribute); + pub fn set_style_attribute(&mut self, session: &Session) { + call_inner!(self, set_style_attribute, session); } pub fn is_in_error(&self) -> bool { diff --git a/src/handle.rs b/src/handle.rs index 6062d3f1..e18b2a17 100644 --- a/src/handle.rs +++ b/src/handle.rs @@ -378,7 +378,7 @@ impl Handle { pub fn set_stylesheet(&mut self, css: &str) -> Result<(), LoadingError> { let mut stylesheet = Stylesheet::new(Origin::User); stylesheet.parse(css, &UrlResolver::new(None), self.session.clone())?; - self.document.cascade(&[stylesheet]); + self.document.cascade(&[stylesheet], &self.session); Ok(()) } } diff --git a/src/properties.rs b/src/properties.rs index 8d4390d9..2b077d4c 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -840,7 +840,8 @@ impl SpecifiedValues { let mut tok = String::new(); t.to_css(&mut tok).unwrap(); // FIXME: what do we do with a fmt::Error? - rsvg_log!( + rsvg_log_session!( + session, "(ignoring invalid presentation attribute {:?}\n value=\"{}\"\n \ unexpected token '{}')", attr.expanded(), @@ -853,7 +854,8 @@ impl SpecifiedValues { kind: ParseErrorKind::Basic(BasicParseErrorKind::EndOfInput), .. }) => { - rsvg_log!( + rsvg_log_session!( + session, "(ignoring invalid presentation attribute {:?}\n value=\"{}\"\n \ unexpected end of input)", attr.expanded(), @@ -865,7 +867,8 @@ impl SpecifiedValues { kind: ParseErrorKind::Basic(_), .. }) => { - rsvg_log!( + rsvg_log_session!( + session, "(ignoring invalid presentation attribute {:?}\n value=\"{}\"\n \ unexpected error)", attr.expanded(), @@ -877,7 +880,8 @@ impl SpecifiedValues { kind: ParseErrorKind::Custom(ref v), .. }) => { - rsvg_log!( + rsvg_log_session!( + session, "(ignoring invalid presentation attribute {:?}\n value=\"{}\"\n {})", attr.expanded(), value, @@ -954,6 +958,7 @@ impl SpecifiedValues { declarations: &str, origin: Origin, important_styles: &mut HashSet<QualName>, + session: &Session, ) -> Result<(), ElementError> { let mut input = ParserInput::new(declarations); let mut parser = Parser::new(&mut input); @@ -962,7 +967,7 @@ impl SpecifiedValues { .filter_map(|r| match r { Ok(decl) => Some(decl), Err(e) => { - rsvg_log!("Invalid declaration; ignoring: {:?}", e); + rsvg_log_session!(session, "Invalid declaration; ignoring: {:?}", e); None } }) @@ -1118,7 +1123,7 @@ mod tests { let mut specified = SpecifiedValues::default(); assert!(specified - .parse_style_declarations("", Origin::Author, &mut HashSet::new()) + .parse_style_declarations("", Origin::Author, &mut HashSet::new(), &Session::default()) .is_ok()) } } |