format.cljs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. (ns frontend.format
  2. (:require [frontend.format.mldoc :refer [->MldocMode] :as mldoc]
  3. [frontend.format.adoc :refer [->AdocMode]]
  4. [frontend.format.protocol :as protocol]
  5. [clojure.string :as string]))
  6. (defonce mldoc-record (->MldocMode))
  7. (defonce adoc-record (->AdocMode))
  8. (defn normalize
  9. [format]
  10. (case (keyword format)
  11. :md :markdown
  12. :asciidoc :adoc
  13. ;; default
  14. (keyword format)))
  15. (defn get-format
  16. [file]
  17. (when file
  18. (normalize (keyword (string/lower-case (last (string/split file #"\.")))))))
  19. (defn get-format-record
  20. [format]
  21. (case (normalize format)
  22. :org
  23. mldoc-record
  24. :markdown
  25. mldoc-record
  26. :adoc
  27. adoc-record
  28. nil))
  29. ;; html
  30. (defn get-default-config
  31. ([format]
  32. (mldoc/default-config format))
  33. ([format options]
  34. (mldoc/default-config format options)))
  35. (defn to-html
  36. ([content format]
  37. (to-html content format (get-default-config format)))
  38. ([content format config]
  39. (let [config (if config config (get-default-config format))]
  40. (if (string/blank? content)
  41. ""
  42. (if-let [record (get-format-record format)]
  43. (protocol/toHtml record content config mldoc/default-references)
  44. content)))))
  45. (defn to-edn
  46. ([content format]
  47. (to-edn content format (get-default-config format)))
  48. ([content format config]
  49. (let [config (or config (get-default-config format))]
  50. (if-let [record (get-format-record format)]
  51. (protocol/toEdn record content config)
  52. nil))))
  53. (defn loaded?
  54. [format]
  55. (when-let [record (get-format-record format)]
  56. (protocol/loaded? record)))