diff options
author | rmckenzie <rmckenzie92@gmail.com> | 2013-03-13 01:51:55 -0500 |
---|---|---|
committer | rmckenzie <rmckenzie92@gmail.com> | 2013-03-13 01:51:55 -0500 |
commit | 395d7d95e85a9dee1befdfa72bc33af9aa21e929 (patch) | |
tree | 0888e36307cc27de23d7784481406f27883587ec | |
parent | 697caa34e65463315121f7c8864ec7d44dbe6159 (diff) |
little bit better writeup
-rw-r--r-- | README.md | 41 |
1 files changed, 36 insertions, 5 deletions
@@ -1,12 +1,43 @@ -# decomp +# Decomp Decomp, short for decompose, is a Clojure tool for translating HTML into the -equivalent Compojure AST. It was developed for refactoring raw or static html -easily into compojure templating. +equivalent [Hiccup](https://github.com/weavejester/hiccup) AST. It was +developed for refactoring raw or static html easily into the standard +clojure, ring, compojure, hiccup web development stack. -## Usage +The Hiccup formatting language allows the description of HTML syntax trees in +a Lisp-like prefix notation based on Clojure's Vector literal denoted `[]`. In +Hiccup one may say `[:a {class "bar" :href "/"} "go home!"" ]`, which renders +to the equivalent html `<a href="/" class="bar"> go home! </a>`. As you can see +this is a fairly regular translation and the Hiccup tool make it easy to go from +Clojure to HTML. Decomp decomposes the expanded html into the Huccup-equivalent +vector stack, completing the round trip. -`java -jar decomp foo.html` +## Example + + > (use 'me.arrdem.decomp.core) + + ;; process-string wraps the application of the lexer, parser and pprinter in one easy function + > (process-string "<foo a=\"b\"> this <!-- ignored --> <a href=\"/bar\"> goes home </a> as does <a href=\"/\"> this! </a> </foo>") + [[:foo + {:a "b"} + "this" + [:a {:href "/bar"} "goes home"] + "as does" + [:a {:href "/"} "this!"]]] + nil + + ;; Decomp supports arbitrary properties... + > (process-string "<baz bung=\"1\" blarrrrrrrrgh=\"2\"> </baz>") + [[:baz {:blarrrrrrrrgh "2", :bung "1"}]] + nil + +## Limitations + + - Top-level comments for instance will break the parser. + - Unbalanced open and close tokens will also kill the parser + - Javascript (due to semicolons and {}) will likely break the parser or at least behave strangely + - Inline CSS should work but is iffy ## License |