A macro-based html builder for rust
Clone or download
Latest commit b06b29b Jun 27, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches remove maud benchmark Apr 16, 2018
examples rustfmt Apr 1, 2018
src Fix typo Apr 18, 2018
tests avoid warning in macros. Apr 15, 2018
.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.4 Jun 27, 2018
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);
}