implicit 0.1.0

A library for playing with 2d implicit geometry
Documentation
use super::OutputDevice;
use ::geom::Point;

pub struct SvgWriter {
    buffer: String,
    conversion: f32,
}

impl SvgWriter {
    pub fn new(width: f32, height: f32, units: &str, conversion_factor: f32) -> SvgWriter {
        let mut s = String::from(r#"<?xml version="1.0" standalone="no"?>"#);
        s.push_str(&format!(r#"<svg width="{0}{2}" height="{1}{2}" viewbox="0 0 {0} {1}" version="1.1" xmlns="http://www.w3.org/2000/svg">"#, width, height, units));
        SvgWriter {
            buffer: s,
            conversion: conversion_factor,
        }
    }

    pub fn write_out(mut self, path: &str) {
        use std::io::Write;
        use std::fs::File;
        self.buffer.push_str("</svg>");
        let mut f = File::create(path).unwrap();
        f.write(self.buffer.as_bytes()).unwrap();
    }
}

impl OutputDevice for SvgWriter {
    fn start_line(&mut self) {
        self.buffer.push_str("\n");
        self.buffer.push_str(r#"<path fill="none" stroke-width="0.01px" stroke="black" d="M"#);
    }

    fn add_point(&mut self, Point{x, y}: Point) {
        self.buffer.push_str(&format!("{} {} L", x * self.conversion, y * self.conversion));
    }

    fn end_line(&mut self) {
        self.buffer.pop();
        self.buffer.push_str(r#""/>"#);
    }
}