SEAM
Symbolic Expressions As Markup.
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
Or install it from crates.io
Either way, you'll need the Rust (nightly) compiler and along
with it, comes cargo.
Using The Binary
You may use it by doing
test.sex contains your symbolic-expressions, which is used to generate
HTML, saved in test.html.
Likewise, you may read from STDIN
# Which is the same as
|
You may also very well use here-strings and here-docs, if your shell supports it.
#stdout:
# <!DOCTYPE html>
# <html>
# <head></head>
# <body>
# <p>Hello World</p>
# <!-- Generated by SEAM, from symbolic-expressions into HTML. -->
# </body>
# </html>
#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@importand@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).