kopia lustrzana https://github.com/tonsky/FiraCode
Extracted other features and classes into separate files, fixed few ligatures conflicts with arrows
rodzic
3843439a55
commit
ace859529f
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
bracketright braceright parenright
|
|
@ -0,0 +1,13 @@
|
|||
zero
|
||||
zero.zero
|
||||
one
|
||||
two
|
||||
twoTurned
|
||||
threeTurned
|
||||
three
|
||||
four
|
||||
five
|
||||
six
|
||||
seven
|
||||
eight
|
||||
nine
|
|
@ -0,0 +1,12 @@
|
|||
zero.tosf
|
||||
zero.tosf.zero
|
||||
zero.zero.tosf
|
||||
one.tosf
|
||||
two.tosf
|
||||
three.tosf
|
||||
four.tosf
|
||||
five.tosf
|
||||
six.tosf
|
||||
seven.tosf
|
||||
eight.tosf
|
||||
nine.tosf
|
|
@ -0,0 +1 @@
|
|||
a b c d e f A B C D E F
|
|
@ -0,0 +1 @@
|
|||
bracketleft braceleft parenleft
|
|
@ -0,0 +1 @@
|
|||
@Uppercase zero one two twoTurned threeTurned three four five six seven eight nine @OpeningBracket @ClosingBracket bar
|
|
@ -65,12 +65,14 @@
|
|||
["colon" "greater"]
|
||||
" ignore sub colon' greater equal;\n"
|
||||
|
||||
;; #346 <=< <=> <=|
|
||||
["less" "equal"]
|
||||
" ignore sub less' equal [less greater bar];\n"
|
||||
|
||||
;; #548 >=<
|
||||
;; #346 >=> >=< >=|
|
||||
["greater" "equal"]
|
||||
" ignore sub greater' equal less;\n"
|
||||
|
||||
["equal" "less"]
|
||||
" ignore sub greater equal' less;\n"
|
||||
" ignore sub greater' equal [less greater bar];\n"
|
||||
|
||||
;; #593 {|}
|
||||
["braceleft" "bar"]
|
||||
|
@ -95,8 +97,7 @@
|
|||
;; #410 <*>>> <+>>> <$>>>
|
||||
;; #346 >>>->>> >>>=>>>
|
||||
["greater" "greater" "greater"]
|
||||
(str " ignore sub [asterisk plus dollar hyphen equal] greater' greater greater;\n"
|
||||
" ignore sub greater' greater greater [hyphen equal];\n")
|
||||
" ignore sub [asterisk plus dollar] greater' greater greater;\n"
|
||||
|
||||
;; #410 <<*> <<+> <<$>
|
||||
;; #346 <<-<< <<=<<
|
||||
|
@ -105,10 +106,8 @@
|
|||
" ignore sub less' less [asterisk plus dollar hyphen equal];\n")
|
||||
|
||||
;; #410 <<<*> <<<+> <<<$>
|
||||
;; #346 <<<-<<< <<<=<<<
|
||||
["less" "less" "less"]
|
||||
(str " ignore sub [hyphen equal] less' less less;\n"
|
||||
" ignore sub less' less less [asterisk plus dollar hyphen equal];\n")
|
||||
" ignore sub less' less less [asterisk plus dollar];\n"
|
||||
|
||||
;; #968 [==> [=>
|
||||
;; #346 <==> <===> |==| |===|
|
||||
|
@ -122,7 +121,6 @@
|
|||
|
||||
;; #968 [-> [-->
|
||||
;; #346 <--> <---> |--| |---|
|
||||
|
||||
["hyphen" "hyphen"]
|
||||
(str " ignore sub [bracketleft less greater bar] hyphen' hyphen;\n"
|
||||
" ignore sub hyphen' hyphen [bracketright less greater bar];\n")
|
||||
|
@ -144,8 +142,6 @@
|
|||
["less" "asterisk" "greater"]
|
||||
["less" "plus" "greater"]
|
||||
["less" "dollar" "greater"]
|
||||
;; #795
|
||||
["f" "l"] ["F" "l"] ["T" "l"]
|
||||
})
|
||||
|
||||
|
||||
|
@ -245,6 +241,15 @@
|
|||
glyphs (map #(str (str/join "_" %) ".liga") ligas')
|
||||
counts (coll/group-by-to count count ligas')]
|
||||
|
||||
(when-some [unused (not-empty (reduce dissoc ignores ligas'))]
|
||||
(println " WARN Unused ignores" (str/join " " (keys unused))))
|
||||
|
||||
(when-some [unused (not-empty (reduce disj skip-ignores? ligas'))]
|
||||
(println " WARN Unused skip-ignores?" (str/join " " unused)))
|
||||
|
||||
(when-some [unused (not-empty (reduce disj manual? ligas))]
|
||||
(println " WARN Unused manual?" (str/join " " unused)))
|
||||
|
||||
(println " generated calt:"
|
||||
; (str/join " " glyphs)
|
||||
(str
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
(ns fira-code.classes
|
||||
(:require
|
||||
[clojure.java.io :as io]
|
||||
[clojure.string :as str]
|
||||
[fira-code.glyphs :as glyphs]
|
||||
[fira-code.files :as files]))
|
||||
|
||||
|
||||
(defn fill-class [font file]
|
||||
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
|
||||
code (slurp file)
|
||||
class {:code (str/trim code)
|
||||
:name name}]
|
||||
(glyphs/set-class font name class)))
|
||||
|
||||
|
||||
(defn fill-all [font]
|
||||
(reduce fill-class font (files/find "classes" #"classes/[^/]+\.fea")))
|
|
@ -3,8 +3,9 @@
|
|||
|
||||
(defn index-of [pred xs]
|
||||
(let [res (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)]
|
||||
(assert (< res (count xs)) "Nothing found")
|
||||
res))
|
||||
(if (>= res (count xs))
|
||||
-1
|
||||
res)))
|
||||
|
||||
|
||||
(defn group-by-to [key-fn value-fn xs]
|
||||
|
|
|
@ -2,15 +2,38 @@
|
|||
(:require
|
||||
[clojure.java.io :as io]
|
||||
[clojure.string :as str]
|
||||
[fira-code.glyphs :as glyphs]))
|
||||
[fira-code.glyphs :as glyphs]
|
||||
[fira-code.files :as files]))
|
||||
|
||||
|
||||
(defn append-features [font]
|
||||
(let [features (->> (file-seq (io/file "features"))
|
||||
(filter #(str/ends-with? (.getName %) ".fea"))
|
||||
(sort-by #(.getName %))
|
||||
(defn append-calt [font]
|
||||
(let [features (->> (files/find "features/calt" #"features/calt/[^/]+\.fea")
|
||||
(map slurp)
|
||||
(map str/trim)
|
||||
(str/join "\n\n"))]
|
||||
(println " appending to feature calt" (glyphs/lines features) "lines")
|
||||
(glyphs/update-code font :features "calt"
|
||||
#(str % "\n\n" features))))
|
||||
#(str % "\n\n" features))))
|
||||
|
||||
|
||||
(defn fill-feature [font file]
|
||||
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
|
||||
code (slurp file)
|
||||
[_ notes code'] (re-matches #"(?s)#([^\n]+)\n(.*)" code)
|
||||
feature (if notes
|
||||
{:code (str/trim code')
|
||||
:name name
|
||||
:notes (str/trim notes)}
|
||||
{:code (str/trim code)
|
||||
:name name})]
|
||||
(glyphs/set-feature font name feature)))
|
||||
|
||||
|
||||
(defn fill-features [font]
|
||||
(reduce fill-feature font (files/find "features" #"features/[^/]+\.fea")))
|
||||
|
||||
|
||||
(defn fill-all [font]
|
||||
(-> font
|
||||
(append-calt)
|
||||
(fill-features)))
|
|
@ -0,0 +1,12 @@
|
|||
(ns fira-code.files
|
||||
(:refer-clojure :exclude [find])
|
||||
(:require
|
||||
[clojure.java.io :as io]
|
||||
[clojure.string :as str]))
|
||||
|
||||
|
||||
(defn find [path re]
|
||||
(->> (file-seq (io/file path))
|
||||
(next) ;; skip directory itself
|
||||
(filter #(re-matches re (.getPath %)))
|
||||
(sort-by #(.getPath %))))
|
|
@ -154,9 +154,40 @@
|
|||
|
||||
(defn update-code [font key name f & args]
|
||||
(let [idx (coll/index-of #(= (:name %) name) (get font key))]
|
||||
(assert (>= idx 0) (str "Can’t find " key "[name=\"" name "\"], got " (str/join ", " (map :name (get font key)))))
|
||||
(apply update-in font [key idx :code] f args)))
|
||||
|
||||
|
||||
(defn lines [s]
|
||||
(inc (count (re-seq #"\n" s))))
|
||||
|
||||
|
||||
(defn words [s]
|
||||
(count (re-seq #"[^\s]+" s)))
|
||||
|
||||
|
||||
(defn set-feature [font name feature]
|
||||
(let [idx (coll/index-of #(= (:name %) name) (:features font))]
|
||||
(if (pos? idx)
|
||||
(do
|
||||
(println " replacing feature" name "with" (lines (:code feature)) "lines")
|
||||
(assoc-in font [:features idx] feature))
|
||||
(do
|
||||
(println " appending to feature" name (lines (:code feature)) "lines")
|
||||
(update font :features conj feature)))))
|
||||
|
||||
|
||||
(defn set-class [font name class]
|
||||
(let [idx (coll/index-of #(= (:name %) name) (:classes font))]
|
||||
(if (pos? idx)
|
||||
(do
|
||||
(println " replacing class" name "with" (words (:code class)) "entries")
|
||||
(assoc-in font [:classes idx] class))
|
||||
(do
|
||||
(println " appending to class" name (words (:code class)) "entries")
|
||||
(update font :classes conj class)))))
|
||||
|
||||
|
||||
(def weights
|
||||
{:Light "B67F0F2D-EC95-4CB8-966E-23AE86958A69"
|
||||
:Regular "UUID0"
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
[fira-code.calt :as calt]
|
||||
[fira-code.coll :as coll]
|
||||
[fira-code.checks :as checks]
|
||||
[fira-code.classes :as classes]
|
||||
[fira-code.features :as features]
|
||||
[fira-code.glyphs :as glyphs]
|
||||
[fira-code.not-space :as not-space]
|
||||
|
@ -23,7 +24,8 @@
|
|||
(str/split liga #"_")) ;; [ ["dash" "greater" "greater"] ... ]
|
||||
font' (-> font
|
||||
(calt/replace-calt ligas)
|
||||
(features/append-features)
|
||||
(classes/fill-all)
|
||||
(features/fill-all)
|
||||
(spacers/add-spacers ligas)
|
||||
(not-space/regen-not-space)
|
||||
(checks/widths))]
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
sub zero by zero.tosf;
|
||||
sub zero.zero by zero.zero.tosf;
|
||||
sub one by one.tosf;
|
||||
sub two by two.tosf;
|
||||
sub three by three.tosf;
|
||||
sub four by four.tosf;
|
||||
sub five by five.tosf;
|
||||
sub six by six.tosf;
|
||||
sub seven by seven.tosf;
|
||||
sub eight by eight.tosf;
|
||||
sub nine by nine.tosf;
|
||||
sub x.multiply by x.multiply.tosf;
|
|
@ -0,0 +1,3 @@
|
|||
# Name: Sans serif lowercase r
|
||||
|
||||
sub r by r.ss01;
|
|
@ -0,0 +1,4 @@
|
|||
# Name: Less Than/Greater Than with horizontal bar
|
||||
|
||||
sub greater_equal.liga by greater_equal.ss02;
|
||||
sub less_equal.liga by less_equal.ss02;
|
|
@ -0,0 +1,8 @@
|
|||
# Name: Traditional Ampersand
|
||||
|
||||
sub ampersand by ampersand.ss03;
|
||||
|
||||
sub ampersand_ampersand.liga by ampersand.ss03;
|
||||
sub ampersand.spacer' ampersand.ss03 by ampersand.before.ss03;
|
||||
|
||||
sub [ampersand ampersand.ss03]' [ampersand ampersand.ss03] by ampersand.before.ss03;
|
|
@ -0,0 +1,7 @@
|
|||
# Name: Lightweight Dollar Sign
|
||||
|
||||
sub dollar by dollar.ss04;
|
||||
|
||||
sub dollar_greater.liga by dollar_greater.liga.ss04;
|
||||
sub less_dollar_greater.liga by less_dollar_greater.liga.ss04;
|
||||
sub less_dollar.liga by less_dollar.liga.ss04;
|
|
@ -0,0 +1,5 @@
|
|||
# Name: Traditional At sign
|
||||
|
||||
sub at by at.ss05;
|
||||
sub asciitilde.spacer' asciitilde_at.liga by asciitilde;
|
||||
sub asciitilde asciitilde_at.liga' by at.ss05;
|
|
@ -0,0 +1,7 @@
|
|||
# Name: Thin backslash
|
||||
|
||||
sub backslash' by backslash.ss06;
|
||||
|
||||
lookup backslash_thin {
|
||||
sub backslash.ss06 backslash.ss06' by backslash.thick.ss06;
|
||||
} backslash_thin;
|
|
@ -0,0 +1,15 @@
|
|||
# Name: Regex matching operator
|
||||
|
||||
lookup equal_asciitilde {
|
||||
ignore sub equal equal' asciitilde;
|
||||
ignore sub equal' asciitilde asciitilde;
|
||||
sub equal.spacer asciitilde' by equal_asciitilde.ss07;
|
||||
sub equal' asciitilde by equal.spacer;
|
||||
} equal_asciitilde;
|
||||
|
||||
lookup exclam_asciitilde {
|
||||
ignore sub exclam exclam' asciitilde;
|
||||
ignore sub exclam' asciitilde asciitilde;
|
||||
sub exclam.spacer asciitilde' by exclam_asciitilde.ss07;
|
||||
sub exclam' asciitilde by exclam.spacer;
|
||||
} exclam_asciitilde;
|
|
@ -114,5 +114,5 @@ r 0 123456789 & && $ <$ <$> $> @ <= >=
|
|||
||=== ||==< ||=<< ||==> ||=>> ||==| ||=|| =||=
|
||||
|==<==<<==>>==>==|==||==|
|
||||
.= ..= := ::= != !== ?= #= /= /==
|
||||
=:= =!= = == === =/= >= <= ^=
|
||||
>=< :>= <||>
|
||||
=:= =!= = == === =/= >= <= ^= <=< >=>
|
||||
>=< =< :>= <||> <<<-<<< <<<=<<< >>>->>> >>>=>>>
|
Ładowanie…
Reference in New Issue