extern crate svgdom;
use svgdom::{
path,
AttributeId,
Color,
Document,
ElementId,
Length,
LengthUnit,
NodeType,
Transform,
};
fn main() {
let mut doc = Document::new();
let decl = doc.create_node(
NodeType::Declaration,
"version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\""
);
doc.append(&decl);
let comm = doc.create_node(
NodeType::Comment,
" this SVG is created via svgdom library "
);
doc.append(&comm);
let mut svg = doc.create_element(ElementId::Svg);
doc.append(&svg);
svg.set_attribute((AttributeId::Xmlns, "http://www.w3.org/2000/svg"));
svg.set_attribute((AttributeId::XmlnsXlink, "http://www.w3.org/1999/xlink"));
svg.set_attribute((AttributeId::Width, 100));
svg.set_attribute((AttributeId::Height, 100));
let mut defs = doc.create_element(ElementId::Defs);
svg.append(&defs);
let mut lg = doc.create_element(ElementId::LinearGradient);
defs.append(&lg);
lg.set_id("lg1");
let mut stop1 = doc.create_element(ElementId::Stop);
stop1.set_attribute((AttributeId::Offset, 0));
stop1.set_attribute((AttributeId::StopColor, Color::new(0, 200, 0)));
lg.append(&stop1);
let mut stop2 = doc.create_element(ElementId::Stop);
stop2.set_attribute((AttributeId::Offset, 1));
stop2.set_attribute((AttributeId::StopColor, Color::new(200, 0, 0)));
lg.append(&stop2);
let mut rect = doc.create_element(ElementId::Rect);
svg.append(&rect);
rect.set_id("rect1");
rect.set_attribute((AttributeId::X, 0));
rect.set_attribute((AttributeId::Y, 0));
rect.set_attribute((AttributeId::Width, Length::new(50.0, LengthUnit::Percent)));
rect.set_attribute((AttributeId::Height, Length::new(50.0, LengthUnit::Percent)));
rect.set_attribute(("non-svg-attribute", "value"));
rect.set_attribute((AttributeId::Fill, lg));
let mut path1 = doc.create_element(ElementId::Path);
svg.append(&path1);
let path_data = path::Builder::new()
.move_to(10.0, 10.0)
.line_to(50.0, 50.0)
.finalize();
let mut ts = Transform::default();
ts.translate(10.0, 20.0);
ts.scale(2.0, 2.0);
path1.set_attribute((AttributeId::Stroke, Color::new(0, 0, 255)));
path1.set_attribute((AttributeId::StrokeWidth, 2));
path1.set_attribute((AttributeId::D, path_data));
path1.set_attribute((AttributeId::Transform, ts));
println!("{}", doc.to_string());
}