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

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

View File

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