diff options
author | rmckenzie <rmckenzie92@gmail.com> | 2013-03-13 10:18:22 -0500 |
---|---|---|
committer | rmckenzie <rmckenzie92@gmail.com> | 2013-03-13 10:18:22 -0500 |
commit | 7267b3b3a7e8c53d9c9926bb04cd9d2c476bab57 (patch) | |
tree | 08fc9de72ff17bcb28e911a4b79fcf0ec3b26685 /README.md | |
parent | 395d7d95e85a9dee1befdfa72bc33af9aa21e929 (diff) |
README cleanup
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 67 |
1 files changed, 44 insertions, 23 deletions
@@ -2,42 +2,63 @@ Decomp, short for decompose, is a Clojure tool for translating HTML into the 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. +developed for refactoring raw or static html easily into the Ring web +development stack. 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 +a Lisp-like prefix notation based on Clojure's Vector literal denoted ```clojure[]```. In +Hiccup one may say ```clojure [: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 +this is a fairly regular translation and the Hiccup tool makes it easy to go from Clojure to HTML. Decomp decomposes the expanded html into the Huccup-equivalent vector stack, completing the round trip. +## Get Decomp + + + ## Example - > (use 'me.arrdem.decomp.core) +```clojure +> (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 - ;; 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 and tags... +> (process-string "<baz bung=\"1\" blarrrrrrrrgh=\"2\"> </baz>") +[[:baz {:blarrrrrrrrgh "2", :bung "1"}]] +nil +``` - ;; Decomp supports arbitrary properties... - > (process-string "<baz bung=\"1\" blarrrrrrrrgh=\"2\"> </baz>") - [[:baz {:blarrrrrrrrgh "2", :bung "1"}]] - nil +Decomp can also be used as a standalone tool able to translate files or standard input from html +to hiccup. The standalone jar can be invoked as ```shell $ java -jar decomp.jar foo.html``` just +as one would expect. Multiple file arguments are supported, and in the absence of file arguments +decomp will attempt to read & process HTML from standard input. ## 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 +- Top-level comments for instance will break the parser +- Unbalanced open and close tokens will also kill the parser +- Parser does not do error checking to ensure that matched open and closes have equivalent values +- Javascript (due to semicolons and {}) will likely break the parser or at least behave strangely +- Inline CSS should work but is iffy ## License |