Skip to content

Commit 265919f

Browse files
committed
Merge branch 'master' of https://github.com/tonsky/FiraCode
2 parents 4ed91e0 + fdf8bc9 commit 265919f

64 files changed

Lines changed: 275 additions & 367 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,18 @@ on:
88
paths:
99
- '.github/workflows/**'
1010
- 'FiraCode.glyphs'
11+
- 'requirements.txt'
1112
- 'script/**'
12-
13+
1314
jobs:
1415
build:
1516
permissions:
1617
contents: write
1718
runs-on: ubuntu-latest
1819
steps:
1920
- uses: actions/checkout@v4
20-
- name: Set up Python 3.12
21-
uses: actions/setup-python@v5
22-
with:
23-
python-version: '3.12'
24-
- name: Install System Dependencies
25-
run: |
26-
sudo apt-get update
27-
sudo apt-get install -y ttfautohint woff2 zlib1g-dev
28-
- name: Install sfnt2woff-zopfli
29-
run: |
30-
git clone https://github.com/bramstein/sfnt2woff-zopfli.git
31-
cd sfnt2woff-zopfli
32-
make
33-
chmod +x sfnt2woff-zopfli
34-
sudo mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff-zopfli
35-
cd ..
36-
rm -rf sfnt2woff-zopfli
37-
- name: Install Python Dependencies
38-
run: |
39-
pip install --upgrade pip
40-
pip install fontmake glyphsLib gftools fontbakery ufo2ft statmake
21+
- name: Install Dependencies
22+
run: ./script/bootstrap_linux.sh
4123
- if: startsWith(github.ref, 'refs/tags/')
4224
run: python3 ./script/update_version.py
4325
- run: ./script/build.sh

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ distr/*/
1717
.idea
1818
.fleet
1919
*.iml
20-
*.glyphspackage
20+
*.glyphspackage
21+
.vibe

FiraCode.glyphs

Lines changed: 10 additions & 47 deletions
Large diffs are not rendered by default.

clojure/fira_code/calt.clj

Lines changed: 73 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
[fira-code.time :as time]
77
[flatland.ordered.map :refer [ordered-map]]))
88

9-
109
;; No ligature should follow those sequences
1110
(def ignore-prefixes
1211
[["parenleft" "question" "colon"]
@@ -16,23 +15,21 @@
1615
["parenleft" "question" "exclam"]
1716
["parenleft" "question" "less" "exclam"]
1817
;; #850 PHP <?=
19-
["less" "question" "equal"]
20-
])
21-
18+
["less" "question" "equal"]])
2219

2320
(defn gen-ignore-prefixes [liga]
2421
(str/join
2522
(for [prefix ignore-prefixes
2623
;; try to match last N glyphs in `prefix` with N first in `liga`
2724
N (range (count liga) 0 -1)
2825
:when (= (take-last N prefix) (take N liga))]
29-
(str " ignore sub"
26+
(str
27+
" ignore sub"
3028
" " (str/join " " (drop-last N prefix))
3129
" " (first liga) "'"
3230
" " (str/join " " (drop 1 liga))
3331
";\n"))))
3432

35-
3633
(def priorities
3734
{;; <|>
3835
["less" "bar" "greater"] 0
@@ -54,7 +51,6 @@
5451
["bar" "bar"] 2
5552
["bar" "bar" "bar"] 2})
5653

57-
5854
(def ignores
5955
(coll/multimap-by str
6056
["slash" "asterisk"]
@@ -79,12 +75,14 @@
7975

8076
;; #1061
8177
["colon" "colon"]
82-
(str " ignore sub colon' colon [less greater];\n"
83-
" ignore sub [less greater] colon' colon;\n")
78+
(str
79+
" ignore sub colon' colon [less greater];\n"
80+
" ignore sub [less greater] colon' colon;\n")
8481

8582
["colon" "colon" "colon"]
86-
(str " ignore sub colon' colon colon [less greater];\n"
87-
" ignore sub [less greater] colon' colon colon;\n")
83+
(str
84+
" ignore sub colon' colon colon [less greater];\n"
85+
" ignore sub [less greater] colon' colon colon;\n")
8886

8987
;; #621 <||>
9088
["less" "bar" "bar"]
@@ -126,14 +124,16 @@
126124
;; #948 [==[ ]==]
127125
;; #968 [== ==]
128126
["equal" "equal"]
129-
(str " ignore sub bracketleft equal' equal;\n"
130-
" ignore sub equal' equal bracketright;\n")
127+
(str
128+
" ignore sub bracketleft equal' equal;\n"
129+
" ignore sub equal' equal bracketright;\n")
131130

132131
;; #948 [===[ ]===]
133132
;; #968 [=== ===]
134133
["equal" "equal" "equal"]
135-
(str " ignore sub bracketleft equal' equal equal;\n"
136-
" ignore sub equal' equal equal bracketright;\n")
134+
(str
135+
" ignore sub bracketleft equal' equal equal;\n"
136+
" ignore sub equal' equal equal bracketright;\n")
137137

138138
;; #346 =:=
139139
["colon" "equal"]
@@ -148,78 +148,84 @@
148148

149149
;; #346 =<= <=< <=> <=| <=: <=! <=/
150150
["less" "equal"]
151-
(str " ignore sub equal less' equal;\n"
152-
" ignore sub less' equal [less greater bar colon exclam slash];\n")
151+
(str
152+
" ignore sub equal less' equal;\n"
153+
" ignore sub less' equal [less greater bar colon exclam slash];\n")
153154

154155
;; #548 >=<
155156
;; #346 =>= >=> >=< >=| >=: >=! >=/
156157
["greater" "equal"]
157-
(str " ignore sub equal greater' equal;\n"
158-
" ignore sub greater' equal [less greater bar colon exclam slash];\n")
158+
(str
159+
" ignore sub equal greater' equal;\n"
160+
" ignore sub greater' equal [less greater bar colon exclam slash];\n")
159161

160162
;; #346 >>->> >>=>>
161163
;; #974 keep >>=
162164
["greater" "greater"]
163-
(str " ignore sub [hyphen equal] greater' greater;\n"
164-
" ignore sub greater' greater hyphen;\n"
165-
" ignore sub greater' greater equal [equal less greater bar colon exclam slash];\n")
165+
(str
166+
" ignore sub [hyphen equal] greater' greater;\n"
167+
" ignore sub greater' greater hyphen;\n"
168+
" ignore sub greater' greater equal [equal less greater bar colon exclam slash];\n")
166169

167170
;; #346 <<-<< <<=<<
168171
;; #974 keep <<=
169172
["less" "less"]
170-
(str " ignore sub [hyphen equal] less' less;\n"
171-
" ignore sub less' less hyphen;\n"
172-
" ignore sub less' less equal [equal less greater bar colon exclam slash];\n")
173+
(str
174+
" ignore sub [hyphen equal] less' less;\n"
175+
" ignore sub less' less hyphen;\n"
176+
" ignore sub less' less equal [equal less greater bar colon exclam slash];\n")
173177

174178
;; #346 ||-|| ||=||
175179
;; #974 keep ||=
176180
["bar" "bar"]
177-
(str " ignore sub [hyphen equal] bar' bar;\n"
178-
" ignore sub bar' bar hyphen;\n"
179-
" ignore sub bar' bar equal [equal less greater bar colon exclam slash];\n")
181+
(str
182+
" ignore sub [hyphen equal] bar' bar;\n"
183+
" ignore sub bar' bar hyphen;\n"
184+
" ignore sub bar' bar equal [equal less greater bar colon exclam slash];\n")
180185

181186
;; #816 //=
182187
["slash" "slash"]
183-
(str " ignore sub equal slash' slash;\n"
184-
" ignore sub slash' slash equal;\n")
188+
(str
189+
" ignore sub equal slash' slash;\n"
190+
" ignore sub slash' slash equal;\n")
185191

186192
;; #346 <--> >--< |--|
187193
["hyphen" "hyphen"]
188-
(str " ignore sub [less greater bar] hyphen' hyphen;\n"
189-
" ignore sub hyphen' hyphen [less greater bar];\n")
194+
(str
195+
" ignore sub [less greater bar] hyphen' hyphen;\n"
196+
" ignore sub hyphen' hyphen [less greater bar];\n")
190197

191198
;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!=
192199
["equal" "equal"]
193-
(str " ignore sub equal [colon exclam] equal' equal;\n"
194-
" ignore sub [less greater bar slash] equal' equal;\n"
195-
" ignore sub equal' equal [less greater bar slash] ;\n"
196-
" ignore sub equal' equal [colon exclam] equal;\n")
200+
(str
201+
" ignore sub equal [colon exclam] equal' equal;\n"
202+
" ignore sub [less greater bar slash] equal' equal;\n"
203+
" ignore sub equal' equal [less greater bar slash] ;\n"
204+
" ignore sub equal' equal [colon exclam] equal;\n")
197205

198206
;; #346 <===> >===< |===| /===/ =:=== =!=== ===:= ===!=
199207
["equal" "equal" "equal"]
200-
(str " ignore sub equal [colon exclam] equal' equal equal;\n"
201-
" ignore sub [less greater bar slash] equal' equal equal;\n"
202-
" ignore sub equal' equal equal [less greater bar slash];\n"
203-
" ignore sub equal' equal equal [colon exclam] equal;\n")
204-
))
205-
208+
(str
209+
" ignore sub equal [colon exclam] equal' equal equal;\n"
210+
" ignore sub [less greater bar slash] equal' equal equal;\n"
211+
" ignore sub equal' equal equal [less greater bar slash];\n"
212+
" ignore sub equal' equal equal [colon exclam] equal;\n")
213+
))
206214

207215
;; DO NOT generate ignores at all
208216
(def skip-ignores? #{
209-
;; #410 <<*>> <<+>> <<$>>
210-
["less" "asterisk" "greater"]
211-
["less" "plus" "greater"]
212-
["less" "dollar" "greater"]
213-
})
214-
217+
;; #410 <<*>> <<+>> <<$>>
218+
["less" "asterisk" "greater"]
219+
["less" "plus" "greater"]
220+
["less" "dollar" "greater"]
221+
})
215222

216223
;; DO NOT generate ligature
217224
(def manual? #{
218-
;; /\ \/
219-
["slash" "backslash"]
220-
["backslash" "slash"]
221-
})
222-
225+
;; /\ \/
226+
["slash" "backslash"]
227+
["backslash" "slash"]
228+
})
223229

224230
(defn liga->rule
225231
"[f f i] => { [LIG LIG i] f_f_i.liga
@@ -232,8 +238,9 @@
232238
(str
233239
"lookup 1_2 {\n"
234240
(when-not (skip-ignores? liga)
235-
(str " ignore sub 1 1' 2;\n"
236-
" ignore sub 1' 2 2;\n"))
241+
(str
242+
" ignore sub 1 1' 2;\n"
243+
" ignore sub 1' 2 2;\n"))
237244
(gen-ignore-prefixes liga)
238245
(get ignores liga)
239246
" sub 1.spacer 2' by 1_2.liga;\n"
@@ -246,8 +253,9 @@
246253
(str
247254
"lookup 1_2_3 {\n"
248255
(when-not (skip-ignores? liga)
249-
(str " ignore sub 1 1' 2 3;\n"
250-
" ignore sub 1' 2 3 3;\n"))
256+
(str
257+
" ignore sub 1 1' 2 3;\n"
258+
" ignore sub 1' 2 3 3;\n"))
251259
(gen-ignore-prefixes liga)
252260
(get ignores liga)
253261
" sub 1.spacer 2.spacer 3' by 1_2_3.liga;\n"
@@ -261,8 +269,9 @@
261269
(str
262270
"lookup 1_2_3_4 {\n"
263271
(when-not (skip-ignores? liga)
264-
(str " ignore sub 1 1' 2 3 4;\n"
265-
" ignore sub 1' 2 3 4 4;\n"))
272+
(str
273+
" ignore sub 1 1' 2 3 4;\n"
274+
" ignore sub 1' 2 3 4 4;\n"))
266275
(gen-ignore-prefixes liga)
267276
(get ignores liga)
268277
" sub 1.spacer 2.spacer 3.spacer 4' by 1_2_3_4.liga;\n"
@@ -277,8 +286,9 @@
277286
(str
278287
"lookup 1_2_3_4_5 {\n"
279288
(when-not (skip-ignores? liga)
280-
(str " ignore sub 1 1' 2 3 4 5;\n"
281-
" ignore sub 1' 2 3 4 4 5;\n"))
289+
(str
290+
" ignore sub 1 1' 2 3 4 5;\n"
291+
" ignore sub 1' 2 3 4 4 5;\n"))
282292
(gen-ignore-prefixes liga)
283293
(get ignores liga)
284294
" sub 1.spacer 2.spacer 3.spacer 4.spacer 5' by 1_2_3_4_5.liga;\n"
@@ -289,8 +299,7 @@
289299
; "sub 1 2 3 4 5 by 1_2_3_4_5.liga;"
290300
"} 1_2_3_4_5;")
291301
#"\d" {"1" a "2" b "3" c "4" d "5" e}))
292-
))
293-
302+
))
294303

295304
(defn compare-ligas [l1 l2]
296305
(let [p1 (priorities l1 Long/MAX_VALUE)
@@ -304,7 +313,6 @@
304313
(not= 0 cc) (- cc) ;; longer first
305314
:else (compare l1 l2)))) ;; alphabetical
306315

307-
308316
(defn replace-calt [font ligas]
309317
(let [ligas' (->> ligas
310318
(remove manual?)
@@ -332,4 +340,4 @@
332340
(get counts 4) " quadruples, "
333341
(count ligas') " total" #_")"))
334342

335-
(glyphs/update-code font :features "calt" (constantly calt))))
343+
(glyphs/update-code font :features :tag "calt" (constantly calt))))

clojure/fira_code/checks.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
(defn -main [& args]
2121
(let [path (or (first args) "FiraCode.glyphs")
2222
font (glyphs/load path)]
23-
(widths font)))
23+
(widths font)))

clojure/fira_code/classes.clj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
[clojure.java.io :as io]
44
[clojure.string :as str]
55
[fira-code.glyphs :as glyphs]
6-
[fira-code.files :as files]))
7-
6+
[fira-code.files :as files])
7+
(:import
8+
[java.io File]))
89

910
(defn fill-class [font file]
10-
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
11+
(let [[_ name] (re-matches #"([^.]+)\.fea" (File/.getName file))
1112
code (slurp file)
1213
class {:code (str/trim code)
1314
:name name}]
1415
(glyphs/set-class font name class)))
1516

16-
1717
(defn fill-all [font]
1818
(reduce fill-class font (files/find "classes" #"classes/[^/]+\.fea")))

clojure/fira_code/coll.clj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
(ns fira-code.coll)
22

3-
43
(defn index-of [pred xs]
54
(let [res (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)]
65
(if (>= res (count xs))
76
-1
87
res)))
98

10-
119
(defn group-by-to [key-fn value-fn xs]
1210
(reduce-kv
1311
(fn [m k vs]
1412
(assoc m k (value-fn vs)))
1513
{}
1614
(group-by key-fn xs)))
1715

18-
1916
(defn multimap-by [f & kvs]
2017
(reduce
2118
(fn [m [k v]]
2219
(if (contains? m k)
2320
(update m k f v)
2421
(assoc m k v)))
25-
{} (partition 2 kvs)))
22+
{} (partition 2 kvs)))

0 commit comments

Comments
 (0)