The entry point for generating documentation with sidenotes.core
Since all configuration is done with a sidenotes.edn file in the project there is not much that needs to be done here.
The actual usage is to call the main function inside the project root. I expect this to be done via an alias in deps.edn as outlined in the README.
(ns sidenotes.core (:require [sidenotes.fs :as fs] [sidenotes.parser :as parser] [sidenotes.renderer :as renderer] [clojure.edn :as edn]) (:gen-class))
Read the given deps.edn file and return the contained dependencies and source paths.
(defn read-deps [file] (if (fs/file? file) (select-keys (edn/read-string (slurp file)) [:deps :paths]) {:deps [] :paths []}))
The default settings write the documentation with the marginalia theme to the docs folder. And prompts for project description too.
(def default-settings {:description "Add description in sidenotes.edn..." :output-to "docs" :toc-filename "toc.html" :include-readme true :theme "marginalia"})
Read the settings from a config file.
(defn read-settings [file] (if (fs/file? file) (edn/read-string (slurp file)) {}))
Merge the settings from a config file with the defaults to fill in missing bits.
(defn load-settings [file] (let [fallback {:projectname (fs/project-folder)} settings (merge default-settings fallback (read-settings file)) tmp (fs/ensure-directory! (:output-to settings))] settings))
Parse one source file.
(defn parse-source [source] (let [sections (parser/parse-file source) result-msg (if (nil? (:error (first sections))) " ... parsed" (str " ... error: " (:error (first sections)))) tmp (dorun (print (str "\\t" (fs/shorten source) result-msg))) ns (parser/parse-ns source)] {:file source :sections (parser/parse-file source) :type (fs/file-extension source) :ns (parser/parse-ns source)}))
Create a list of parsed source files.
(defn parse-sources [sources] (dorun (println "Generating docs for:")) (map parse-source sources))
Generate the documentation without further checks.
(defn generate-documentation [settings] (try (let [project (read-deps "deps.edn") readme (fs/load-readme) sources (fs/find-sources (:paths project)) parsed-sources (parse-sources sources)] (renderer/render parsed-sources project settings readme)) (catch Exception e (.printStackTrace e))))
Check that the config is valid.
(defn perform-checks [settings] (if (renderer/external-theme? (:theme settings)) (if (renderer/external-theme-valid? (:theme settings)) true (do (dorun (println renderer/message-theme-invalid)) false)) true))
Generate the documentation.
(defn -main [& args] (try (let [settings (load-settings "sidenotes.edn")] (when (perform-checks settings) (generate-documentation settings))) (catch Exception e (.printStackTrace e))))