Add cljfmt to format code

This commit is contained in:
Archie Hilton 2024-11-03 21:50:07 +00:00
parent c4b85808b9
commit 98f10abaaf
2 changed files with 64 additions and 8 deletions

View File

@ -7,4 +7,5 @@
[hiccup "2.0.0-RC3"]]
:repl-options {:init-ns website.core}
:main website.main
:plugins [[dev.weavejester/lein-cljfmt "0.13.0"]]
)

View File

@ -1,19 +1,74 @@
(ns website.core
(:require [clojure.java.io :as io]))
(:require
[clojure.java.io :as io]
[clojure.string :as string]
))
(def template-reg #"#\{\{(.*)\}\}")
(def template-dir "./site/templates")
(def html-dir "./site/html")
(def output-dir "./out")
;; Thank you https://clojure.org/api/cheatsheet
(def template-map
; Generate a keyword-string map of the templates folder
(defn generate-template-map [template-dir]
"Grab all files in the template directory and insert them into a map with
the filenames as keyword keys"
(let [files (filter #(.isFile %) (file-seq (io/file template-dir)))
] (mapcat #(assoc {} (keyword (.getName %)) (slurp %)) files)))
]
(reduce #(assoc %1 (keyword (.getName %2)) (slurp %2)) {} files)
)
)
; Generate a string-string map of the new filepaths and the unprocessed contents
(defn generate-output-file-map [html-dir, output-dir]
"Take the input html files, read them, and create a mapping of their paths to
their contents.
This would probably be better as a list of maps each containing a :contents
and :path keyword.
"
(let [file-listing (filter #(.isFile %) (file-seq (io/file html-dir)))
contents (map slurp file-listing)
old-paths (map #(.getPath %) file-listing)
rootless-paths (map #(subs % (count html-dir)) old-paths)
new-paths (map #(string/join [output-dir %]) rootless-paths)
]
(zipmap new-paths contents)
)
)
(defn foo
"I don't do a whole lot."
[x]
(println x "Hello, World!"))
(defn put_file [file_map_entry]
"Output a file to a location while ensuring the required parent directories exist."
(io/make-parents (first file_map_entry))
(spit (first file_map_entry) (second file_map_entry))
)
(defn insert_templates [file-map-entry template-map]
; Will go through and check all the template names in the file then
; mark which templates exist and which dont
;
; Using this we can report an error for any templates which do not exist
(let [template-names (map first template-map)
file (first file-map-entry)
contents (second file-map-entry)
templates-used (re-seq template-reg contents)
new-contents (reduce #(string/replace %1 (first %2) ((keyword (second %2)) template-map)) contents templates-used)
]
[file new-contents]
))
; Main routine
; Read all the templates
(def template-map (generate-template-map template-dir))
; Read all the html files
(def output-file-map (generate-output-file-map html-dir output-dir))
; For each html file:
; * Insert any matching templates
; * Stick it in the out directory
(for [of output-file-map]
; of is a key-value pair
(put_file (insert_templates of template-map))
;(put_file of)
)