Skip to main content

html/
html.rs

1use packo::Packo;
2
3pub type Document = Packo<256, Tag, 1, u8>;
4
5pub struct Tag {
6    name: &'static str,
7    text: &'static str,
8}
9
10#[rustfmt::skip]
11fn main() {
12    let mut doc = Document::default();
13
14    let html = doc.insert(Tag { name: "html", text: "" });
15    let body = doc.nest(html, Tag{ name: "body", text: "" });
16    let p1 = doc.nest(body, Tag{ name: "p", text: "first line" }); 
17    let _p2 = doc.append(p1, Tag{ name: "p", text: "second line" }); 
18
19    print(&doc, html);
20    println!();
21
22    println!("{doc}");
23}
24
25fn print(d: &Document, i: u8) {
26    print!("<{}>", d[i].name);
27    let s = d.child(i);
28    let mut c = s;
29    while c != 0 {
30        print(d, c);
31        c = d.next(c);
32        if c == s {
33            break;
34        }
35    }
36    print!("{}", d[i].text);
37    print!("</{}>", d[i].name);
38}