fn main() {
let args: Vec<_> = std::env::args().collect();
if args.len() != 2 {
println!("Usage:\n\tcargo run --example parse -- input.svg");
std::process::exit(1);
}
let input = std::fs::read_to_string(&args[1]).unwrap();
let svg = rosvgtree::Document::parse_str(&input).unwrap();
let opt = xmlwriter::Options::default();
let mut xml = xmlwriter::XmlWriter::new(opt);
write_element(svg.root(), &mut xml);
print!("{}", xml.end_document());
}
fn write_element(parent: rosvgtree::Node, xml: &mut xmlwriter::XmlWriter) {
for node in parent.children() {
let tag_name = match node.tag_name() {
Some(v) => v,
None => {
let text = node.text();
if !text.is_empty() {
xml.write_text(text);
}
continue;
}
};
xml.start_element(tag_name.to_str());
for attr in node.attributes() {
xml.write_attribute(attr.name.to_str(), &attr.value);
}
if tag_name == rosvgtree::ElementId::Text {
xml.set_preserve_whitespaces(true);
}
if node.has_children() {
write_element(node, xml);
}
xml.end_element();
if tag_name == rosvgtree::ElementId::Text {
xml.set_preserve_whitespaces(false);
}
}
}