diff --git a/doclet/README.md b/doclet/README.md index 648ed03..95e40c1 100644 --- a/doclet/README.md +++ b/doclet/README.md @@ -1,6 +1,4 @@ -# doclet - -This doclet generates the edn file used by the play-clj documentation. +This doclet generates the play-clj doc site. ## Usage diff --git a/doclet/project.clj b/doclet/project.clj index e352a50..ea42f9c 100644 --- a/doclet/project.clj +++ b/doclet/project.clj @@ -1,6 +1,7 @@ (defproject play-clj-doclet "0.0.1-SNAPSHOT" :description "FIXME: write description" - :dependencies [[org.clojure/clojure "1.6.0"]] + :dependencies [[org.clojure/clojure "1.6.0"] + [hiccup "1.0.5"]] :source-paths ["src/clojure"] :java-source-paths ["src/java"] :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"] diff --git a/doclet/src/clojure/play_clj_doclet/core.clj b/doclet/src/clojure/play_clj_doclet/core.clj index bae8b62..622b17a 100644 --- a/doclet/src/clojure/play_clj_doclet/core.clj +++ b/doclet/src/clojure/play_clj_doclet/core.clj @@ -1,7 +1,8 @@ (ns play-clj-doclet.core (:require [clojure.edn :as edn] [clojure.string :as string] - [clojure.java.io :as io]) + [clojure.java.io :as io] + [play-clj-doclet.html :as html]) (:import [com.sun.javadoc ClassDoc ConstructorDoc Doc ExecutableMemberDoc Parameter RootDoc])) @@ -33,7 +34,7 @@ (->> d .parameters (map parse-param) vec))]) (defn parse-class-entry - [^ClassDoc c [clj-name type]] + [^ClassDoc c type] (some->> (case type :methods (filter #(-> % .isStatic not) (.methods c)) :static-methods (filter #(.isStatic %) (.methods c)) @@ -47,21 +48,24 @@ (map parse-doc) (concat (when-let [sc (.superclass c)] (when (not= (.typeName sc) "Object") - (parse-class-entry sc [clj-name type])))) - vec - (vector clj-name))) + (parse-class-entry sc type)))) + vec)) (defn parse-class [^ClassDoc c] (some->> (get targets (.typeName c)) - (map #(parse-class-entry c %)) + (map #(vector (first %) (parse-class-entry c (second %)))) (into {}))) +(defn save + [doc-map] + (->> doc-map pr-str (spit (io/file "uberdoc.edn"))) + (->> doc-map html/create-html (spit (io/file "uberdoc.html")))) + (defn parse [^RootDoc root] (->> (map parse-class (.classes root)) (filter some?) (into {}) - pr-str - (spit (io/file "java.edn"))) - (println "Created edn file.")) + save) + (println "Created uberdoc.html and uberdoc.edn.")) diff --git a/doclet/src/clojure/play_clj_doclet/html.clj b/doclet/src/clojure/play_clj_doclet/html.clj new file mode 100644 index 0000000..4685dfc --- /dev/null +++ b/doclet/src/clojure/play_clj_doclet/html.clj @@ -0,0 +1,18 @@ +(ns play-clj-doclet.html + (:require [hiccup.core :refer :all])) + +(defn create-item + [[name text params]] + [:div + [:h3 (str name)] + [:i text]]) + +(defn create-section + [[clj-name items]] + [:div + [:h2 {} clj-name] + (map create-item items)]) + +(defn create-html + [doc-map] + (html (map create-section doc-map)))