Skip to content

Commit f91fdf4

Browse files
committed
Add support for advanced :base-language option
Author: @ptaoussanis This is an advanced option to help prevent any broken doc links when upgrading a project's docs from single language to dual language. In this case, :base-language can be set to the previous (single) language for which doc links may already exist in the wild. In detail, if cross-platform project then: {:base-language nil} => ".clj", ".cljs" file extensions ; Default {:base-language :clojure} => nil, ".cljs" file extensions {:base-language :clojurescript} => ".clj", nil file extensions For example: Library Foo previously used {:language :clojure} (either because it was Clojure only, or because of limitations in Codox). Various links to Foo's Codox documentation now exist in the wild. Foo's authors want to change to cross-platform, but don't want to break pre-existing links in the wild. In this case, Foo's authors can use the following opts: {:language #{:clojure :clojurescript} :base-language :clojure} This will produce files like the following: com.foolib.html ; For Clojure platform com.foolib.cljs.html ; For ClojureScript platform Any pre-existing links will successfully point to the same (Clojure) docs they did previously.
1 parent f88c2d9 commit f91fdf4

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

codox/src/codox/writer/html.clj

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,20 +147,26 @@
147147
(markdown-to-html doc project ns))])
148148

149149
(defn- language-info
150-
[language]
151-
(when language
152-
(case language
153-
:clojure {:ext "clj", :filename-suffix ".clj", :name "Clojure"}
154-
:clojurescript {:ext "cljs", :filename-suffix ".cljs", :name "ClojureScript"}
155-
(ex-info (str "Unexpected language: `" language "`")
156-
{:language language}))))
150+
([language]
151+
(when language
152+
(case language
153+
:clojure {:ext "clj", :filename-suffix ".clj", :name "Clojure"}
154+
:clojurescript {:ext "cljs", :filename-suffix ".cljs", :name "ClojureScript"}
155+
(ex-info (str "Unexpected language: `" language "`")
156+
{:language language}))))
157+
158+
([language base-language]
159+
(when-let [info (language-info language)]
160+
(if (= language base-language)
161+
(assoc info :filename-suffix "")
162+
info))))
157163

158164
(defn- index-filename [language]
159165
(str "index" (:filename-suffix (language-info language)) ".html"))
160166

161167
(defn- ns-filename [namespace]
162168
(str (:name namespace)
163-
(:filename-suffix (language-info (:language namespace)))
169+
(:filename-suffix (language-info (:language namespace) (:base-language namespace)))
164170
".html"))
165171

166172
(comment
@@ -517,8 +523,11 @@
517523
(.mkdirs (io/file output-dir dir))))
518524

519525
(defn- cross-platform-namespaces
520-
[namespaces language]
521-
(map #(assoc % :language language)
526+
[namespaces language base-language]
527+
(map
528+
#(assoc %
529+
:language language
530+
:base-language base-language)
522531
(get namespaces language)))
523532

524533
(defn- write-index [output-dir project]
@@ -527,7 +536,7 @@
527536
(when cross-platform?
528537
;; Write an index file for each language
529538
(doseq [language (:languages project)]
530-
(let [namespaces (cross-platform-namespaces namespaces language)
539+
(let [namespaces (cross-platform-namespaces namespaces language (:base-language project))
531540
project
532541
(assoc project
533542
:namespaces namespaces
@@ -550,7 +559,7 @@
550559
(if cross-platform?
551560
;; Write namespace files for each language
552561
(doseq [language (:languages project)]
553-
(let [namespaces (cross-platform-namespaces namespaces language)]
562+
(let [namespaces (cross-platform-namespaces namespaces language (:base-language project))]
554563
(doseq [namespace namespaces]
555564
(let [project (assoc project
556565
:namespaces namespaces

0 commit comments

Comments
 (0)