Symbolic Expressions As Markup.
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.
This may 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. Personally, I am currently just using the seam
binary to statically
generate some personal and project websites.
Read the USAGE.md file for code examples and documentation.
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
.
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
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)"
Hello World
sh
seam --xml <<< '(para Today is a day in (%date "%B, year %Y").)'
```
(
, )
} and
next to string-literals. Whitespace should then be added between between
symbols after macro expansion, since a macro could expand to any literal.
Variadic macros should preserve whitespace in its arguments entirely (no stripping).%list
macro which expands from (p (%list a b c))
to (p a b c)
.
This is essentially an anonymous macro definition, i.e (%define L a b c)
,
then %L
is the same as (%list a b c)
.%for
-loop macro, iterating over %list
s.%glob
which returns a list of files/directories matching a glob.%markdown
renders markdown given to it.%html
, %xml
, %css
, etc. macros which goes into the specific rendering mode.style="..."
object should handle s-expressions well, (e.g. (p :style (:color red :border none) Hello World)
)<style>
tag should allow for normal CSS syntax if just given a string.@
syntax in CSS, such as @import
and @media
.JSON
, JS
, TOML
, &c.).(%include ...)
, which already exists).(%chez (+ 1 2))
executes
(+ 1 2)
with Chez-Scheme LISP, and places the result in the source
(i.e. 3
).