tagger

Crates.iotagger
lib.rstagger
version4.3.5
sourcesrc
created_at2021-02-17 14:00:10.471658
updated_at2023-07-08 23:24:17.753846
descriptionWrite SVG / HTML / XML programmatically
homepage
repositoryhttps://github.com/tiby312/tagger
max_upload_size
id356466
size17,409
Ken Reed (tiby312)

documentation

README

Before you try

I recommend you use the tagu crate instead of this crate.

Overview

Build xml / html / svg programmatically using element building blocks. Instead of using a templating engine, write data/markup that 'looks like' rust.

Find it on github and crates.io. Docs at docs.rs.

Tagger also provides functionality to build svg paths and polyline attribute data.

Tagger additionally protects against XML escaping by replacing xml escape characters with its encoded value.

Example

fn main() -> std::fmt::Result {
    let width = 100.0;
    let height = 100.0;

    let mut w = tagger::new(tagger::upgrade_write(std::io::stdout()));

    w.elem("svg", |d| {
        d.attr("xmlns", "http://www.w3.org/2000/svg")?;
        d.attr("viewBox", format_args!("0 0 {} {}", width, height))
    })?
    .build(|w| {
        w.single("rect", |d| {
            d.attr("x1", 0)?;
            d.attr("y1", 0)?;
            d.attr("rx", 20)?;
            d.attr("ry", 20)?;
            d.attr("width", width)?;
            d.attr("height", height)?;
            d.attr("style", "fill:blue")
        })?;

        w.elem("style", tagger::no_attr())?
            .build(|w| w.put_raw(".test{fill:none;stroke:white;stroke-width:3}"))?;

        w.elem("g", |d| d.attr("class", "test"))?.build(|w| {
            for r in (0..50).step_by(10) {
                w.single("circle", |w| {
                    w.attr("cx", 50.0)?;
                    w.attr("cy", 50.0)?;
                    w.attr("r", r)
                })?;
            }
            Ok(())
        })
    })
}

Output

demo
Commit count: 177

cargo fmt