Clean up doclet code and export embeddable HTML
This commit is contained in:
@@ -59,7 +59,7 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.java {
|
.java {
|
||||||
background: #444;
|
background: #444444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.j-text {
|
.j-text {
|
||||||
|
|||||||
@@ -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/"))
|
||||||
|
|||||||
@@ -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)))
|
||||||
|
|||||||
Reference in New Issue
Block a user