Horrorshow: A POC HTML templating library

Horrorshow is a POC macro-based HTML templating library that will probably never be developed into anything substantial. It exists solely as an experiment in advanced macro programming.

Links

Github: https://github.com/Stebalien/horrorshow-rs
Docs: horrorshow - Rust

Example

html! {
    html {
        head {
            title { : "Hello world!" }
        }
        body {
            // attributes
            h1(id="heading") {
                // Insert escaped text
                : "Hello! This is <html />"
            }
            p {
                // Insert raw text (unescaped)
                ! "Let's <i>count</i> to 10!"
            }
            ol(id="count") {
                // run some inline code...
                @ for i in 0..10 {
                    // append to the current template.
                    append_html! {
                        li {
                            // format some text
                            #{"{}", i+1 }
                        }
                    }
                }
            }
            // You need semi-colons for tags without children.
            br; br;
            p {
                : "Easy!"
            }
        }
    }
}

Becomes (white-space added for clarity):

<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>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>

Disclaimers

  1. Attributes must be valid identifiers (so attributes with dashes are currently not supported).
  2. The documentation is confusing and limited.
1 Like

Looks very similar to this library: Basic syntax · Maud: a compile-time template engine for Rust

Anyway, nice job! I really like this style of templating.

Cool! I didn't know about maud. A big difference is that this one is written completely in macros and works on beta.