features.clj 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. (ns fira-code.features
  2. (:require
  3. [clojure.java.io :as io]
  4. [clojure.string :as str]
  5. [fira-code.glyphs :as glyphs]
  6. [fira-code.files :as files]))
  7. (defn append-calt [font]
  8. (let [features (->> (files/find "features/calt" #"features/calt/[^/]+\.fea")
  9. (map slurp)
  10. (map str/trim)
  11. (str/join "\n\n"))]
  12. (println " appending to feature calt" (glyphs/lines features) "lines")
  13. (glyphs/update-code font :features "calt"
  14. #(str % "\n\n" features))))
  15. (defn fill-feature [font file]
  16. (let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
  17. code (slurp file)
  18. [_ notes code'] (re-matches #"(?s)#([^\n]+)\n(.*)" code)
  19. feature (cond-> {:code (str/trim (or code' code))
  20. :name name}
  21. notes
  22. (assoc :notes (str/trim notes)))]
  23. (glyphs/set-feature font name feature)))
  24. (defn fill-features [font]
  25. (reduce fill-feature font (files/find "features" #"features/[^/]+\.fea")))
  26. (defn fill-all [font]
  27. (-> font
  28. (append-calt)
  29. (fill-features)))