|
6 | 6 | [fira-code.time :as time] |
7 | 7 | [flatland.ordered.map :refer [ordered-map]])) |
8 | 8 |
|
9 | | - |
10 | 9 | ;; No ligature should follow those sequences |
11 | 10 | (def ignore-prefixes |
12 | 11 | [["parenleft" "question" "colon"] |
|
17 | 16 | ["parenleft" "question" "less" "exclam"] |
18 | 17 | ;; #850 PHP <?= |
19 | 18 | ["less" "question" "equal"] |
20 | | - ]) |
21 | | - |
| 19 | + ]) |
22 | 20 |
|
23 | 21 | (defn gen-ignore-prefixes [liga] |
24 | 22 | (str/join |
|
32 | 30 | " " (str/join " " (drop 1 liga)) |
33 | 31 | ";\n")))) |
34 | 32 |
|
35 | | - |
36 | 33 | (def priorities |
37 | 34 | {;; <|> |
38 | 35 | ["less" "bar" "greater"] 0 |
|
54 | 51 | ["bar" "bar"] 2 |
55 | 52 | ["bar" "bar" "bar"] 2}) |
56 | 53 |
|
57 | | - |
58 | 54 | (def ignores |
59 | 55 | (coll/multimap-by str |
60 | 56 | ["slash" "asterisk"] |
|
79 | 75 |
|
80 | 76 | ;; #1061 |
81 | 77 | ["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") |
84 | 81 |
|
85 | 82 | ["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") |
88 | 86 |
|
89 | 87 | ;; #621 <||> |
90 | 88 | ["less" "bar" "bar"] |
|
126 | 124 | ;; #948 [==[ ]==] |
127 | 125 | ;; #968 [== ==] |
128 | 126 | ["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") |
131 | 130 |
|
132 | 131 | ;; #948 [===[ ]===] |
133 | 132 | ;; #968 [=== ===] |
134 | 133 | ["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") |
137 | 137 |
|
138 | 138 | ;; #346 =:= |
139 | 139 | ["colon" "equal"] |
|
148 | 148 |
|
149 | 149 | ;; #346 =<= <=< <=> <=| <=: <=! <=/ |
150 | 150 | ["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") |
153 | 154 |
|
154 | 155 | ;; #548 >=< |
155 | 156 | ;; #346 =>= >=> >=< >=| >=: >=! >=/ |
156 | 157 | ["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") |
159 | 161 |
|
160 | 162 | ;; #346 >>->> >>=>> |
161 | 163 | ;; #974 keep >>= |
162 | 164 | ["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") |
166 | 169 |
|
167 | 170 | ;; #346 <<-<< <<=<< |
168 | 171 | ;; #974 keep <<= |
169 | 172 | ["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") |
173 | 177 |
|
174 | 178 | ;; #346 ||-|| ||=|| |
175 | 179 | ;; #974 keep ||= |
176 | 180 | ["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") |
180 | 185 |
|
181 | 186 | ;; #816 //= |
182 | 187 | ["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") |
185 | 191 |
|
186 | 192 | ;; #346 <--> >--< |--| |
187 | 193 | ["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") |
190 | 197 |
|
191 | 198 | ;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!= |
192 | 199 | ["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") |
197 | 205 |
|
198 | 206 | ;; #346 <===> >===< |===| /===/ =:=== =!=== ===:= ===!= |
199 | 207 | ["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 | + )) |
206 | 214 |
|
207 | 215 | ;; DO NOT generate ignores at all |
208 | 216 | (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 | + }) |
215 | 222 |
|
216 | 223 | ;; DO NOT generate ligature |
217 | 224 | (def manual? #{ |
218 | | - ;; /\ \/ |
219 | | - ["slash" "backslash"] |
220 | | - ["backslash" "slash"] |
221 | | -}) |
222 | | - |
| 225 | + ;; /\ \/ |
| 226 | + ["slash" "backslash"] |
| 227 | + ["backslash" "slash"] |
| 228 | + }) |
223 | 229 |
|
224 | 230 | (defn liga->rule |
225 | 231 | "[f f i] => { [LIG LIG i] f_f_i.liga |
|
233 | 239 | "lookup 1_2 {\n" |
234 | 240 | (when-not (skip-ignores? liga) |
235 | 241 | (str " ignore sub 1 1' 2;\n" |
236 | | - " ignore sub 1' 2 2;\n")) |
| 242 | + " ignore sub 1' 2 2;\n")) |
237 | 243 | (gen-ignore-prefixes liga) |
238 | 244 | (get ignores liga) |
239 | 245 | " sub 1.spacer 2' by 1_2.liga;\n" |
|
246 | 252 | (str |
247 | 253 | "lookup 1_2_3 {\n" |
248 | 254 | (when-not (skip-ignores? liga) |
249 | | - (str " ignore sub 1 1' 2 3;\n" |
250 | | - " ignore sub 1' 2 3 3;\n")) |
| 255 | + (str " ignore sub 1 1' 2 3;\n" |
| 256 | + " ignore sub 1' 2 3 3;\n")) |
251 | 257 | (gen-ignore-prefixes liga) |
252 | 258 | (get ignores liga) |
253 | 259 | " sub 1.spacer 2.spacer 3' by 1_2_3.liga;\n" |
|
262 | 268 | "lookup 1_2_3_4 {\n" |
263 | 269 | (when-not (skip-ignores? liga) |
264 | 270 | (str " ignore sub 1 1' 2 3 4;\n" |
265 | | - " ignore sub 1' 2 3 4 4;\n")) |
| 271 | + " ignore sub 1' 2 3 4 4;\n")) |
266 | 272 | (gen-ignore-prefixes liga) |
267 | 273 | (get ignores liga) |
268 | 274 | " sub 1.spacer 2.spacer 3.spacer 4' by 1_2_3_4.liga;\n" |
|
278 | 284 | "lookup 1_2_3_4_5 {\n" |
279 | 285 | (when-not (skip-ignores? liga) |
280 | 286 | (str " ignore sub 1 1' 2 3 4 5;\n" |
281 | | - " ignore sub 1' 2 3 4 4 5;\n")) |
| 287 | + " ignore sub 1' 2 3 4 4 5;\n")) |
282 | 288 | (gen-ignore-prefixes liga) |
283 | 289 | (get ignores liga) |
284 | 290 | " sub 1.spacer 2.spacer 3.spacer 4.spacer 5' by 1_2_3_4_5.liga;\n" |
|
289 | 295 | ; "sub 1 2 3 4 5 by 1_2_3_4_5.liga;" |
290 | 296 | "} 1_2_3_4_5;") |
291 | 297 | #"\d" {"1" a "2" b "3" c "4" d "5" e})) |
292 | | -)) |
293 | | - |
| 298 | + )) |
294 | 299 |
|
295 | 300 | (defn compare-ligas [l1 l2] |
296 | 301 | (let [p1 (priorities l1 Long/MAX_VALUE) |
|
304 | 309 | (not= 0 cc) (- cc) ;; longer first |
305 | 310 | :else (compare l1 l2)))) ;; alphabetical |
306 | 311 |
|
307 | | - |
308 | 312 | (defn replace-calt [font ligas] |
309 | 313 | (let [ligas' (->> ligas |
310 | 314 | (remove manual?) |
|
0 commit comments