Clean up doclet code and export embeddable HTML

This commit is contained in:
oakes
2014-05-19 03:22:18 -04:00
parent aed7e8e57e
commit 8937b8608a
3 changed files with 49 additions and 28 deletions

View File

@@ -59,7 +59,7 @@ a {
} }
.java { .java {
background: #444; background: #444444;
} }
.j-text { .j-text {

View File

@@ -8,6 +8,9 @@
(:import [com.sun.javadoc ClassDoc ConstructorDoc Doc ExecutableMemberDoc (:import [com.sun.javadoc ClassDoc ConstructorDoc Doc ExecutableMemberDoc
FieldDoc MethodDoc Parameter RootDoc])) FieldDoc MethodDoc Parameter RootDoc]))
(def ^:const default-ns "play-clj.core")
(def ^:const ignore-files #{"physics.clj" "utils.clj"})
(def classes (-> "classes.edn" io/resource slurp edn/read-string)) (def classes (-> "classes.edn" io/resource slurp edn/read-string))
(defn camel->keyword (defn camel->keyword
@@ -90,12 +93,13 @@
vec)) vec))
(defn process-group (defn process-group
[{:keys [type raw docstring] :as group} java-docs] [ns {:keys [type raw docstring] :as group} java-docs]
(let [form (read-string raw) (let [form (read-string raw)
n (second form)] n (second form)]
(when (and (contains? #{'defn 'defmacro} (first form)) (when (and (contains? #{'defn 'defmacro} (first form))
(-> n meta :private not)) (-> n meta :private not))
(assoc group (assoc group
:ns (if (> (count ns) 0) ns default-ns)
:name (str n) :name (str n)
:java (->> java-docs :java (->> java-docs
(filter #(= (first %) (str n))) (filter #(= (first %) (str n)))
@@ -114,30 +118,29 @@
(assoc group :raw*))))) (assoc group :raw*)))))
(defn process-groups (defn process-groups
[{:keys [groups] :as parsed-file} java-docs] [{:keys [ns groups] :as parsed-file} java-docs]
(->> groups (->> groups
(map #(process-group % java-docs)) (map #(process-group ns % java-docs))
merge-groups merge-groups
(remove nil?) (remove nil?)))
(assoc parsed-file :groups)))
(defn parse-clj (defn parse-clj
[java-docs] [java-docs]
(->> (io/file "../src/") (->> (io/file "../src/")
file-seq file-seq
(filter #(-> % .getName (.endsWith ".clj"))) (filter #(-> % .getName (.endsWith ".clj")))
(remove #(contains? #{"physics.clj" "utils.clj"} (remove #(contains? ignore-files (.getName %)))
(-> % .getName)))
(sort-by #(.getName %)) (sort-by #(.getName %))
(map #(.getCanonicalPath %)) (map #(.getCanonicalPath %))
(map marg/path-to-doc) (map marg/path-to-doc)
(map #(process-groups % java-docs)) (map #(process-groups % java-docs))
(filter #(> (count (:groups %)) 0)))) (apply concat)
(group-by :ns)))
(defn save (defn save!
[parsed-files] [parsed-files]
(->> parsed-files pr-str (spit (io/file "doc.edn"))) (html/create-site! "site" parsed-files)
(html/create "doc" parsed-files)) (html/create-embed! "embed" parsed-files))
(defn parse (defn parse
[^RootDoc root] [^RootDoc root]
@@ -145,5 +148,5 @@
(filter some?) (filter some?)
(apply concat) (apply concat)
parse-clj parse-clj
save) save!)
(println "Created doc/ and doc.edn.")) (println "Created site/ and embed/"))

View File

@@ -5,10 +5,7 @@
(defn str->filename (defn str->filename
[ns s] [ns s]
(-> (or (let [dot-pos (.lastIndexOf ns ".")] (-> (subs ns (+ (.lastIndexOf ns ".") 1))
(when-not (= dot-pos -1)
(subs ns (+ 1 dot-pos))))
"core")
(str "." s) (str "." s)
(string/replace "?" "_q") (string/replace "?" "_q")
(string/replace "->" "_") (string/replace "->" "_")
@@ -19,9 +16,8 @@
(defn sidebar (defn sidebar
[parsed-files] [parsed-files]
[:div {:class "sidebar"} [:div {:class "sidebar"}
(for [{:keys [ns groups] :as pf} parsed-files] (for [[ns groups] parsed-files]
(cons (when (> (count ns) 0) (cons [:div {:class "ns"} ns]
[:div {:class "ns"} ns])
(for [{:keys [name]} groups] (for [{:keys [name]} groups]
[:div {:class "name"} [:div {:class "name"}
[:a {:href (str->filename ns name)} [:a {:href (str->filename ns name)}
@@ -64,34 +60,56 @@
(when raw* [:pre raw*]) (when raw* [:pre raw*])
[:pre raw]]]]) [:pre raw]]]])
(defn create-file (defn create-site-file
[parsed-files name content] [name sidebar content]
(html [:html (html [:html
[:head [:head
[:title name] [:title name]
[:link {:rel "stylesheet" :href "highlight.css"}] [:link {:rel "stylesheet" :href "highlight.css"}]
[:link {:rel "stylesheet" :href "main.css"}]] [:link {:rel "stylesheet" :href "main.css"}]]
[:body [:body
(sidebar parsed-files) sidebar
content content
[:script {:src "highlight.js"}] [:script {:src "highlight.js"}]
[:script {:src "main.js"}]]])) [:script {:src "main.js"}]]]))
(defn create-embed-file
[content]
(html [:html [:body content]]))
(defn copy-from-res (defn copy-from-res
[dir file-name] [dir file-name]
(spit (io/file dir file-name) (spit (io/file dir file-name)
(-> file-name io/resource slurp))) (-> file-name io/resource slurp)))
(defn create (defn create-site!
[dir parsed-files] [dir parsed-files]
(.mkdir (io/file dir)) (.mkdir (io/file dir))
(copy-from-res dir "main.css") (copy-from-res dir "main.css")
(copy-from-res dir "main.js") (copy-from-res dir "main.js")
(copy-from-res dir "highlight.css") (copy-from-res dir "highlight.css")
(copy-from-res dir "highlight.js") (copy-from-res dir "highlight.js")
(doseq [{:keys [ns groups] :as pf} parsed-files] (doseq [[ns groups] parsed-files]
(doseq [{:keys [name] :as group} groups] (doseq [{:keys [name] :as group} groups]
(spit (io/file dir (str->filename ns name)) (spit (io/file dir (str->filename ns name))
(create-file parsed-files name (content group))))) (create-site-file name (sidebar parsed-files) (content group)))))
(spit (io/file dir "index.html") (spit (io/file dir "index.html")
(create-file parsed-files "play-clj docs" nil))) (create-site-file "play-clj docs" (sidebar parsed-files) nil)))
(defn create-embed!
[dir parsed-files]
(.mkdir (io/file dir))
(doseq [[ns groups] parsed-files]
(doseq [{:keys [name] :as group} groups]
(spit (io/file dir (str->filename ns name))
(create-embed-file (content group)))))
(spit (io/file dir "index.edn")
(->> parsed-files
(map (fn [[ns groups]]
(for [{:keys [name]} groups]
{:ns ns
:name name
:file (str->filename ns name)})))
(apply concat)
vec
pr-str)))