diff --git a/doclet/resources/main.css b/doclet/resources/main.css index c5e8818..82e2ddd 100644 --- a/doclet/resources/main.css +++ b/doclet/resources/main.css @@ -59,7 +59,7 @@ a { } .java { - background: #444; + background: #444444; } .j-text { diff --git a/doclet/src/clojure/play_clj_doclet/core.clj b/doclet/src/clojure/play_clj_doclet/core.clj index b35d8c0..637438f 100644 --- a/doclet/src/clojure/play_clj_doclet/core.clj +++ b/doclet/src/clojure/play_clj_doclet/core.clj @@ -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/")) diff --git a/doclet/src/clojure/play_clj_doclet/html.clj b/doclet/src/clojure/play_clj_doclet/html.clj index d2b47e7..4923d1c 100644 --- a/doclet/src/clojure/play_clj_doclet/html.clj +++ b/doclet/src/clojure/play_clj_doclet/html.clj @@ -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)))