@@ -23,23 +23,27 @@ const CIRCLE_TAG_NAME: &str = "circle";
2323const ELLIPSE_TAG_NAME : & str = "ellipse" ;
2424const LINE_TAG_NAME : & str = "line" ;
2525const GROUP_TAG_NAME : & str = "g" ;
26+ const DEFS_TAG_NAME : & str = "defs" ;
27+ const USE_TAG_NAME : & str = "use" ;
2628
2729pub trait XmlVisitor {
2830 fn visit_enter ( & mut self , node : Node ) ;
2931 fn visit_exit ( & mut self , node : Node ) ;
3032}
3133
3234/// Used to skip over SVG elements that are explicitly marked as do not render
33- fn is_valid_node ( node : Node ) -> bool {
34- return node. is_element ( )
35+ fn should_render_node ( node : Node ) -> bool {
36+ node. is_element ( )
3537 && !node
3638 . attribute ( "style" )
37- . map_or ( false , |style| style. contains ( "display:none" ) ) ;
39+ . map_or ( false , |style| style. contains ( "display:none" ) )
40+ // Defs are not rendered
41+ && node. tag_name ( ) . name ( ) != DEFS_TAG_NAME
3842}
3943
4044pub fn depth_first_visit ( doc : & Document , visitor : & mut impl XmlVisitor ) {
4145 fn visit_node ( node : Node , visitor : & mut impl XmlVisitor ) {
42- if !is_valid_node ( node) {
46+ if !should_render_node ( node) {
4347 return ;
4448 }
4549 visitor. visit_enter ( node) ;
@@ -352,6 +356,9 @@ impl<'a, T: Turtle> XmlVisitor for ConversionVisitor<'a, T> {
352356 }
353357 }
354358 }
359+ USE_TAG_NAME => {
360+ warn ! ( "Unsupported node: {node:?}" ) ;
361+ }
355362 // No-op tags
356363 SVG_TAG_NAME | GROUP_TAG_NAME => { }
357364 _ => {
0 commit comments