svgdom 0.8.1

Library to represent an SVG as a DOM.
Documentation
// This example shows how to create an SVG file from scratch.

extern crate svgdom;

use svgdom::{
    ElementId,
    AttributeId,
    Document,
    NodeType,
};

use svgdom::types::{
    path,
    Color,
    Length,
    LengthUnit,
    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());
}