@@ -29,13 +29,11 @@ languagesystem latn CAT;
2929@figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num ];
3030@figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den ];
3131
32- # Marks Above - no grave
33- @deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ];
34- @lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ];
35- @ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap ];
32+ # Marks Above
33+ @lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ];
34+ @ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap ];
3635
3736# Marks Below
38- @deadbelowMarks = [uniA788 macronlowmod cedilla ogonek ];
3937@belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb ];
4038
4139
@@ -69,35 +67,54 @@ feature locl {
6967
7068feature ccmp {
7169
72- # Decompose unicode lowercase characters whose capital counterparts have no unicode.
70+ # Decompose unicode lowercase characters whose uppercase counterparts have no unicode.
7371 lookup Decomp {
7472 sub hlinebelow by h macronlowmod ;
7573 sub jcaron by j caron ;
7674 } Decomp ;
7775
78- # Replace marks that follow a letter and another mark with their combining forms.
79- # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters.
76+ # Replace double above accents by combined drawings.
8077 lookup DblMarks {
81- sub [@ltrLC ] [@deadMarks @deadbelowMarks dotbelowcmb ] [@deadMarks @deadbelowMarks ]' by [@lcMarks @belowMarks ];
82- sub [@ltrUC ] [@deadMarks @deadbelowMarks dotbelowcmb ] [@deadMarks @deadbelowMarks ]' by [@ucMarks @belowMarks ];
83- sub [@ltrUC ] [@lcMarks @deadbelowMarks dotbelowcmb ] [@lcMarks ]' by [@ucMarks ];
78+ sub dieresiscmb acutecmb by dieresisacute ;
79+ sub dieresiscmb gravecmb by dieresisgrave ;
80+ sub dieresiscmb caroncmb by dieresiscaron ;
81+ sub dieresiscmb macroncmb by dieresismacron ;
82+ sub brevecmb acutecmb by breveacute ;
83+ sub brevecmb gravecmb by brevegrave ;
84+ sub brevecmb hookcmb by brevehook ;
85+ sub brevecmb tildecmb by brevetilde ;
86+ sub circumflexcmb acutecmb by circumflexacute ;
87+ sub circumflexcmb gravecmb by circumflexgrave ;
88+ sub circumflexcmb hookcmb by circumflexhook ;
89+ sub circumflexcmb tildecmb by circumflextilde ;
90+ # capital forms
91+ sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap ;
92+ sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap ;
93+ sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap ;
94+ sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap ;
95+ sub brevecmb.cap acutecmb.cap by breveacute.cap ;
96+ sub brevecmb.cap gravecmb.cap by brevegrave.cap ;
97+ sub brevecmb.cap hookcmb.cap by brevehook.cap ;
98+ sub brevecmb.cap tildecmb.cap by brevetilde.cap ;
99+ sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap ;
100+ sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap ;
101+ sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap ;
102+ sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap ;
84103 } DblMarks ;
85-
86- # Replace marks that follow a letter with their combining forms.
87- lookup CmbMarks {
88- # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters.
89- sub [@ltrLC ] [@deadMarks @deadbelowMarks ]' by [@lcMarks @belowMarks ];
90- sub [@ltrUC ] [@deadMarks @deadbelowMarks ]' by [@ucMarks @belowMarks ];
104+
105+ # Replace combining marks that follow a uppercase letter by their uppercase form
106+ lookup CapitalMarks {
107+ sub [@ltrUC ] [@lcMarks @belowMarks dotbelowcmb ] [@lcMarks ]' by [@ucMarks ];
91108 sub [@ltrUC ] [@lcMarks ]' by [@ucMarks ];
92- } CmbMarks ;
109+ } CapitalMarks ;
93110
94- # Replace letters with dotless counterparts when followed by a combining mark.
111+ # Replace letters with dotless counterparts when followed by a combining mark
95112 lookup Dotless {
96- sub [i j ]' [@belowMarks dotbelowcmb ] [@lcMarks gravecmb ] by [dotlessi dotlessj ];
97- sub [i j ]' [@lcMarks gravecmb ] by [dotlessi dotlessj ];
113+ sub [i j ]' [@belowMarks dotbelowcmb ] [@lcMarks ] by [dotlessi dotlessj ];
114+ sub [i j ]' [@lcMarks ] by [dotlessi dotlessj ];
98115 } Dotless ;
99116
100- # Replace e ogonek with eogonek.
117+ # Replace e ogonek with pre-drawn eogonek
101118 lookup eogonek {
102119 sub e ogonekcmb by eogonek ;
103120 } eogonek ;
@@ -142,6 +159,22 @@ feature sinf {
142159} sinf ;
143160
144161
162+ # ---------------------
163+ # Contextual Alternates
164+ # ---------------------
165+
166+ feature calt {
167+ # shifts colon to align with math symbols when used together
168+
169+ sub colon' [plus equal greater less hyphen ] by colon.fig ;
170+ sub [plus equal less greater hyphen ] colon' by colon.fig ;
171+
172+ sub colon' [colon colon.fig ] by colon.fig ;
173+ sub colon.fig colon' by colon.fig ;
174+
175+ } calt ;
176+
177+
145178# --------------
146179# Stylistic Sets
147180# --------------
@@ -176,103 +209,6 @@ feature salt {
176209} salt ;
177210
178211
179- # ---------------------------------------------------------------------
180- # MARK | Generated: November 23, 2022 - 02:37:46 PM by 'markFeature.py'
181- # ---------------------------------------------------------------------
182-
183- markClass [acutecmb caroncmb circumflexcmb dieresiscmb dotaccentcmb gravecmb macroncmb tildecmb ] <anchor 76 502 > @mark_aboveLC ;
184- markClass [acutecmb.cap caroncmb.cap circumflexcmb.cap dieresiscmb.cap dotaccentcmb.cap gravecmb.cap macroncmb.cap tildecmb.cap ] <anchor 130 691 > @mark_aboveUC ;
185- markClass [dieresisbelowcmb dotbelowcmb macronbelowcmb ] <anchor -78 -35 > @mark_below ;
186- markClass [cedillacmb ] <anchor -71 -10 > @mark_belowcedilla ;
187- markClass [ogonekcmb ] <anchor -71 -10 > @mark_belowogonek ;
188-
189- feature mark {
190-
191- lookup aboveLC {
192- pos base [a ] <anchor 372 507 > mark @mark_aboveLC ;
193- pos base [c ] <anchor 389 507 > mark @mark_aboveLC ;
194- pos base [dotlessi ] <anchor 388 502 > mark @mark_aboveLC ;
195- pos base [dotlessj ] <anchor 476 502 > mark @mark_aboveLC ;
196- pos base [e ] <anchor 395 507 > mark @mark_aboveLC ;
197- pos base [eogonek ] <anchor 395 507 > mark @mark_aboveLC ;
198- pos base [g ] <anchor 400 507 > mark @mark_aboveLC ;
199- pos base [m ] <anchor 382 502 > mark @mark_aboveLC ;
200- pos base [n ] <anchor 384 502 > mark @mark_aboveLC ;
201- pos base [o ] <anchor 370 507 > mark @mark_aboveLC ;
202- pos base [p ] <anchor 394 502 > mark @mark_aboveLC ;
203- pos base [s ] <anchor 388 507 > mark @mark_aboveLC ;
204- pos base [u ] <anchor 386 502 > mark @mark_aboveLC ;
205- pos base [z ] <anchor 364 502 > mark @mark_aboveLC ;
206- } aboveLC ;
207-
208- lookup aboveUC {
209- pos base [A ] <anchor 427 691 > mark @mark_aboveUC ;
210- pos base [C ] <anchor 472 696 > mark @mark_aboveUC ;
211- pos base [E ] <anchor 443 691 > mark @mark_aboveUC ;
212- pos base [Eogonek ] <anchor 443 691 > mark @mark_aboveUC ;
213- pos base [G ] <anchor 460 691 > mark @mark_aboveUC ;
214- pos base [I ] <anchor 437 691 > mark @mark_aboveUC ;
215- pos base [J ] <anchor 599 691 > mark @mark_aboveUC ;
216- pos base [M ] <anchor 436 691 > mark @mark_aboveUC ;
217- pos base [N ] <anchor 440 691 > mark @mark_aboveUC ;
218- pos base [O ] <anchor 440 696 > mark @mark_aboveUC ;
219- pos base [P ] <anchor 452 691 > mark @mark_aboveUC ;
220- pos base [S ] <anchor 452 696 > mark @mark_aboveUC ;
221- pos base [U ] <anchor 436 691 > mark @mark_aboveUC ;
222- pos base [Z ] <anchor 422 691 > mark @mark_aboveUC ;
223- } aboveUC ;
224-
225- lookup below {
226- pos base [C ] <anchor 275 -40 > mark @mark_below ;
227- pos base [Dcroat ] <anchor 303 -35 > mark @mark_below ;
228- pos base [E ] <anchor 246 -35 > mark @mark_below ;
229- pos base [H ] <anchor 229 -35 > mark @mark_below ;
230- pos base [I ] <anchor 228 -35 > mark @mark_below ;
231- pos base [O ] <anchor 243 -40 > mark @mark_below ;
232- pos base [S ] <anchor 271 -40 > mark @mark_below ;
233- pos base [U ] <anchor 228 -40 > mark @mark_below ;
234- pos base [X ] <anchor 230 -35 > mark @mark_below ;
235- pos base [Z ] <anchor 239 -35 > mark @mark_below ;
236- pos base [c ] <anchor 232 -35 > mark @mark_below ;
237- pos base [dcroat ] <anchor 254 -30 > mark @mark_below ;
238- pos base [dotlessi ] <anchor 235 -35 > mark @mark_below ;
239- pos base [e ] <anchor 240 -40 > mark @mark_below ;
240- pos base [h ] <anchor 240 -35 > mark @mark_below ;
241- pos base [o ] <anchor 242 -40 > mark @mark_below ;
242- pos base [s ] <anchor 222 -40 > mark @mark_below ;
243- pos base [u ] <anchor 239 -35 > mark @mark_below ;
244- pos base [x ] <anchor 227 -35 > mark @mark_below ;
245- pos base [z ] <anchor 237 -35 > mark @mark_below ;
246- } below ;
247-
248- lookup belowcedilla {
249- pos base [Z ] <anchor 246 -10 > mark @mark_belowcedilla ;
250- pos base [z ] <anchor 244 -10 > mark @mark_belowcedilla ;
251- } belowcedilla ;
252-
253- lookup belowogonek {
254- pos base [A ] <anchor 443 -10 > mark @mark_belowogonek ;
255- pos base [E ] <anchor 396 -10 > mark @mark_belowogonek ;
256- pos base [I ] <anchor 235 -10 > mark @mark_belowogonek ;
257- pos base [O ] <anchor 248 -15 > mark @mark_belowogonek ;
258- pos base [U ] <anchor 238 -15 > mark @mark_belowogonek ;
259- pos base [a ] <anchor 391 -10 > mark @mark_belowogonek ;
260- pos base [dotlessi ] <anchor 242 -9 > mark @mark_belowogonek ;
261- pos base [e ] <anchor 339 -10 > mark @mark_belowogonek ;
262- pos base [o ] <anchor 245 -15 > mark @mark_belowogonek ;
263- pos base [u ] <anchor 401 -10 > mark @mark_belowogonek ;
264- } belowogonek ;
265-
266- } mark ;
267-
268- @BASES = [A C Dcroat E Eogonek G H I J M N O P S U X Z a c dcroat dotlessi dotlessj e eogonek g h m n o p s u x z ];
269- @MARKS = [@mark_aboveLC @mark_aboveUC @mark_below @mark_belowcedilla @mark_belowogonek ];
270-
271- table GDEF {
272- GlyphClassDef @BASES ,,@MARKS ,;
273- } GDEF ;
274-
275-
276212# --------------
277213# All Alternates
278214# --------------
0 commit comments