diff --git a/Cargo.lock b/Cargo.lock index 2b6af83..f86630d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1534,7 +1534,7 @@ dependencies = [ [[package]] name = "svg2gcode" -version = "0.2.1" +version = "0.2.2" dependencies = [ "cairo-rs", "euclid", @@ -1552,9 +1552,9 @@ dependencies = [ [[package]] name = "svg2gcode" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d67d8338b768e752994fb7908968c9f1b5e5fb7049f60148a5a0f028c89d6f5d" +checksum = "8d18e790145346387c28b89177f0f262d7be814d96456b7d844ea930e5e014f5" dependencies = [ "euclid", "g-code", @@ -1569,7 +1569,7 @@ dependencies = [ [[package]] name = "svg2gcode-cli" -version = "0.0.10" +version = "0.0.11" dependencies = [ "codespan-reporting", "env_logger", @@ -1578,13 +1578,13 @@ dependencies = [ "roxmltree", "serde_json", "structopt", - "svg2gcode 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "svg2gcode 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "svgtypes", ] [[package]] name = "svg2gcode-web" -version = "0.0.10" +version = "0.0.11" dependencies = [ "base64", "codespan", @@ -1598,7 +1598,7 @@ dependencies = [ "roxmltree", "serde", "serde_json", - "svg2gcode 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "svg2gcode 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "svgtypes", "thiserror", "wasm-bindgen", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 57d4f68..93d3ac9 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "svg2gcode-cli" -version = "0.0.10" +version = "0.0.11" authors = ["Sameer Puri "] edition = "2021" description = "Command line interface for svg2gcode" @@ -8,7 +8,7 @@ repository = "https://github.com/sameer/svg2gcode" license = "MIT" [dependencies] -svg2gcode = { version = "0.2.1", features = ["serde"]} +svg2gcode = { version = "0.2.2", features = ["serde"]} env_logger = { version = "0", default-features = false, features = ["atty", "termcolor", "humantime"] } log = "0" g-code = "0.4.2" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 0fe25a3..7877608 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "svg2gcode" -version = "0.2.1" +version = "0.2.2" authors = ["Sameer Puri "] edition = "2021" description = "Convert paths in SVG files to GCode for a pen plotter, laser engraver, or other machine." diff --git a/lib/src/converter/visit.rs b/lib/src/converter/visit.rs index b5babde..05f996a 100644 --- a/lib/src/converter/visit.rs +++ b/lib/src/converter/visit.rs @@ -23,6 +23,8 @@ const CIRCLE_TAG_NAME: &str = "circle"; const ELLIPSE_TAG_NAME: &str = "ellipse"; const LINE_TAG_NAME: &str = "line"; const GROUP_TAG_NAME: &str = "g"; +const DEFS_TAG_NAME: &str = "defs"; +const USE_TAG_NAME: &str = "use"; pub trait XmlVisitor { fn visit_enter(&mut self, node: Node); @@ -30,16 +32,18 @@ pub trait XmlVisitor { } /// Used to skip over SVG elements that are explicitly marked as do not render -fn is_valid_node(node: Node) -> bool { - return node.is_element() +fn should_render_node(node: Node) -> bool { + node.is_element() && !node .attribute("style") - .map_or(false, |style| style.contains("display:none")); + .map_or(false, |style| style.contains("display:none")) + // Defs are not rendered + && node.tag_name().name() != DEFS_TAG_NAME } pub fn depth_first_visit(doc: &Document, visitor: &mut impl XmlVisitor) { fn visit_node(node: Node, visitor: &mut impl XmlVisitor) { - if !is_valid_node(node) { + if !should_render_node(node) { return; } visitor.visit_enter(node); @@ -352,6 +356,9 @@ impl<'a, T: Turtle> XmlVisitor for ConversionVisitor<'a, T> { } } } + USE_TAG_NAME => { + warn!("Unsupported node: {node:?}"); + } // No-op tags SVG_TAG_NAME | GROUP_TAG_NAME => {} _ => { diff --git a/web/Cargo.toml b/web/Cargo.toml index f4cbfda..09f02e5 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "svg2gcode-web" -version = "0.0.10" +version = "0.0.11" authors = ["Sameer Puri "] edition = "2021" description = "Convert vector graphics to g-code for pen plotters, laser engravers, and other CNC machines" @@ -10,7 +10,7 @@ license = "MIT" [dependencies] wasm-bindgen = "0.2" -svg2gcode = { version = "0.2.1", features = ["serde"] } +svg2gcode = { version = "0.2.2", features = ["serde"] } roxmltree = "0.19" g-code = "0.4.2" codespan-reporting = "0.11"