Skip to content

Commit 0fd5b3b

Browse files
OpenType edits in all sources: new changes to ccmp and calt features
1 parent 90e667c commit 0fd5b3b

File tree

20 files changed

+1080
-614
lines changed

20 files changed

+1080
-614
lines changed

sources/instances/postscript/IntelOneMono-Bold.ufo/features.fea

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

7068
feature 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
# --------------

sources/instances/postscript/IntelOneMono-BoldItalic.ufo/features.fea

Lines changed: 55 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -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

7068
feature 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

Comments
 (0)