Removed the default

This commit is contained in:
fogus 2014-11-18 14:10:35 -05:00
parent 8522fa3fba
commit 9e66b1266d

View file

@ -148,7 +148,122 @@
(defn merge-line [line m] (defn merge-line [line m]
(cond (cond
(:docstring-text line) (assoc m (:docstring-text line) (assoc m
]) :docs
(conj (get m :docs []) line))
(:code-text line) (assoc m
:codes
(conj (get m :codes []) line))
(:docs-text line) (assoc m
:docs
(conj (get m :docs []) line))))
(defn group-lines [doc-lines]
(loop [cur-group {}
groups []
lines doc-lines]
(cond
(empty? lines) (conj groups cur-group)
(end-of-block? cur-group groups lines)
(recur (merge-line (first lines) {}) (conj groups cur-group) (rest lines))
:else (recur (merge-line (first lines) cur-group) groups (rest lines)))))
(defn path-to-doc [fn]
(let [file (java.io.File. fn)
ns (-> file
(read-file-ns-decl)
(second)
(str))
ns (if (or (nil? ns) (empty? ns)) (.getName file) ns)
groups (parse-file fn)]
{:ns ns
:groups groups}))
;; ## Output Generation
(defn filename-contents
[props output-dir all-files parsed-file]
{:name (io/file output-dir (str (:ns parsed-file) ".html"))
:contents (single-page-html props parsed-file all-files)})
(defn multidoc!
[output-dir files-to-analyze props]
(let [parsed-files (map path-to-doc files-to-analyze)
index (index-html props parsed-files)
pages (map #(filename-contents props output-dir parsed-files %) parsed-files)]
(doseq [f (conj pages {:name (io/file output-dir "toc.html")
:contents index})]
(spit (:name f) (:contents f)))))
(defn uberdoc!
"Generates an uberdoc html file from 3 pieces of information:
2. The path to spit the result (`output-file-name`)
1. Results from processing source files (`path-to-doc`)
3. Project metadata as a map, containing at a minimum the following:
- :name
- :version
"
[output-file-name files-to-analyze props]
(let [source (uberdoc-html
props
(map path-to-doc files-to-analyze))]
(spit output-file-name source)))
;; ## External Interface (command-line, lein, cake, etc)
;; These functions support Marginalia's use by client software or command-line
;; users.
(def ^:private file-extensions #{"clj" "cljs" "cljx"})
(defn format-sources
"Given a collection of filepaths, returns a lazy sequence of filepaths to all
.clj, .cljs, and .cljx files on those paths: directory paths will be searched
recursively for files."
[sources]
(if (nil? sources)
(find-processable-file-paths "./src" file-extensions)
(->> sources
(mapcat #(if (dir? %)
(find-processable-file-paths % file-extensions)
[(.getCanonicalPath (io/file %))])))))
(defn split-deps [deps]
(when deps
(for [d (.split deps ";")
:let [[group artifact version] (.split d ":")]]
[(if (= group artifact) artifact (str group "/" artifact))
version])))
(defn run-marginalia
"Default generation: given a collection of filepaths in a project, find the .clj
files at these paths and, if Clojure source files are found:
1. Print out a message to std out letting a user know which files are to be processed;
1. Create the docs directory inside the project folder if it doesn't already exist;
1. Call the uberdoc! function to generate the output file at its default location,
using the found source files and a project file expected to be in its default location.
If no source files are found, complain with a usage message."
[args & [project]]
(let [[{:keys [dir file name version desc deps css js multi leiningen]} files help]
(cli args
["-d" "--dir" "Directory into which the documentation will be written" :default "./docs"]
["-f" "--file" "File into which the documentation will be written" :default "uberdoc.html"]
["-n" "--name" "Project name - if not given will be taken from project.clj"]
["-v" "--version" "Project version - if not given will be taken from project.clj"]
["-D" "--desc" "Project description - if not given will be taken from project.clj"]
["-a" "--deps" "Project dependencies in the form <group1>:<artifact1>:<version1>;<group2>...
If not given will be taken from project.clj"]
["-c" "--css" "Additional css resources <resource1>;<resource2>;...
If not given will be taken from project.clj."]
["-j" "--js" "Additional javascript resources <resource1>;<resource2>;...
If not given will be taken from project.clj"]
["-m" "--multi" "Generate each namespace documentation as a separate file" :flag true]
["-l" "--leiningen" "Generate the documentation for a Leiningen project file."])
sources (distinct (format-sources (seq files))) sources (distinct (format-sources (seq files)))
sources (if leiningen (cons leiningen sources) sources)] sources (if leiningen (cons leiningen sources) sources)]
(if-not sources (if-not sources