A macro-based html builder for rust
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches chore: rustfmt Jan 20, 2019
examples chore: rustfmt Jan 20, 2019
src fix handling of non-ascii characters Jan 20, 2019
tests fix handling of non-ascii characters Jan 20, 2019
.gitignore Initial commit. May 3, 2015
.travis.yml disable sudo in travis Jul 5, 2016
AUTHORS Add AUTHORS Jun 6, 2016
Cargo.toml release 0.6.5 Jan 20, 2019
LICENSE-APACHE Add licenses. May 3, 2015
LICENSE-MIT Add AUTHORS Jun 6, 2016
README.md use format! in examples Feb 18, 2018
travis_setup.sh travis's gawk is out of date... May 28, 2015

README.md

Horrorshow

Build Status

A macro-based html templating library (1.0 compatible).

Documentation

Example:

#[macro_use]
extern crate horrorshow;
use horrorshow::prelude::*;
use horrorshow::doctype;

fn main() {
    let actual = format!("{}", html! {
        : doctype::HTML;
        html {
            head {
                title : "Hello world!";
            }
            body {
                // attributes
                h1(id="heading") {
                    // Insert escaped text
                    : "Hello! This is <html />"
                }
                p {
                    // Insert raw text (unescaped)
                    : Raw("Let's <i>count</i> to 10!")
                }
                ol(id="count") {
                    // You can embed for loops, while loops, and if statements.
                    @ for i in 0..10 {
                        li(first? = (i == 0)) {
                            // Format some text.
                            : format_args!("{}", i+1)
                        }
                    }
                }
                // You need semi-colons for tags without children.
                br; br;
                p {
                    // You can also embed closures.
                    |tmpl| {
                        tmpl << "Easy!";
                    }
                }
            }
        }
    });

    let expected = "\
    <!DOCTYPE html>\
    <html>\
      <head>\
        <title>Hello world!</title>\
      </head>\
      <body>\
        <h1 id=\"heading\">Hello! This is &lt;html /&gt;</h1>\
        <p>Let's <i>count</i> to 10!</p>\
        <ol id=\"count\">\
          <li first>1</li>\
          <li>2</li>\
          <li>3</li>\
          <li>4</li>\
          <li>5</li>\
          <li>6</li>\
          <li>7</li>\
          <li>8</li>\
          <li>9</li>\
          <li>10</li>\
        </ol>\
        <br /><br />\
        <p>Easy!</p>\
      </body>\
    </html>";
    assert_eq!(expected, actual);
}