seam 0.1.4

Symbolic Expressions As Markup.
Documentation
# SEAM

> **S**ymbolic **E**xpressions **A**s **M**arkup.

## Why

Because all markup is terrible, especially XML/SGML and derivatives.

But mainly, for easier static markup code generation, such as with
macros, code includes and such.

## Try it out

Mainly this should be used as a library, such as from within a server,
generating HTML (or any other supported markup) before it is served to the
client.

### Current Formats

 - XML
 - HTML
 - CSS

### Installation

You may clone the repo, then build and install
```sh
git clone git://git.knutsen.co/seam
cd seam
cargo build --release
cargo install --path .
```

Or install it from crates.io
```sh
cargo install seam
```

Either way, you'll need the Rust (nightly) compiler and along
with it, comes `cargo`.

### Using The Binary

You may use it by doing
```sh
seam test.sex --html > test.html
```

`test.sex` contains your symbolic-expressions, which is used to generate
HTML, saved in `test.html`.

Likewise, you may read from `STDIN`
```sh
seam --html < example.sex > example.html
# Which is the same as
cat example.sex | seam --html > example.html
```
You may also very well use here-strings and here-docs, if your shell
supports it.
```sh
seam --html <<< "(p Hello World)"
#stdout:
#   <!DOCTYPE html>
#   <html>
#   <head></head>
#   <body>
#   <p>Hello World</p>
#   <!-- Generated by SEAM, from symbolic-expressions into HTML. -->
#   </body>
#   </html>
```
```sh
seam --xml <<< '(para Today is a day in (%date "%B, year %Y").)'
#stdout:
#   <?xml version="1.0" encoding="UTF-8" ?>
#   <para>Today is a day in November, year 2020.</para>
#   <!-- Generated by SEAM, from symbolic-expressions into XML. -->
```

## TODO
 - Caching or checking time-stamps as to not regenerate unmodified source files.
 - HTML object `style="..."` object should handle s-expressions well, (e.g. `(p :style (:color red :border none) Hello World)`)
 - HTML `<style>` tag should allow for *normal* CSS syntax if just given a string.
 - Allow for, and handle special `@` syntax in CSS, such as `@import` and `@media`.
 - Add more supported formats (`JSON`, `JS`, `TOML`, &c.).
 - Add more helpful/generic macros (e.g. `(%include ...)`, which already exists).
 - Add user defined macros system (e.g. `(%define (red-para txt) (p :style "color: red" %txt))`)
 - Then add variadic macros.
 - Allow for arbitrary embedding of code, that can be run by
   a LISP interpreter (or any other langauge), for example.  (e.g. `(%chez (+ 1 2))` executes
   `(+ 1 2)` with Chez-Scheme LISP, and places the result in the source
   (i.e. `3`).