]> git.xonotic.org Git - xonotic/mediasource.git/blob - fonts/xolonium/sourcefiles/features/Xolonium-Head.fea
Update Xolonium font sources to version 3.0
[xonotic/mediasource.git] / fonts / xolonium / sourcefiles / features / Xolonium-Head.fea
1 @FIGR = [zero one two three four five six seven eight nine];
2 @NUMR = [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr nine.numr];
3 @DNOM = [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom nine.dnom];
4
5 @SUPS = [@NUMR];
6 @SUBS = [@DNOM];
7
8 @PERIOD     = [comma period ellipsis];
9 @COLON      = [colon semicolon];
10 @GREEKCOLON = [uni037E anoteleia];
11 @DASH       = [hyphen endash emdash];
12 @GUILLEMET  = [guillemotleft guillemotright guilsinglleft guilsinglright];
13 @MATH       = [plus less equal greater asciitilde logicalnot periodcentered multiply divide minus uni2219 infinity approxequal notequal];
14 @BASEQUOTE  = [quotesinglbase quotedblbase];
15 @ASCIIQUOTE = [quotedbl quotesingle asterisk asciicircum degree];
16 @FANCYQUOTE = [quoteleft quoteright quotedblleft quotedblright];
17 @QUESTION   = [question];
18 @QUESTIONDN = [questiondown];
19 @SLASH      = [slash];
20 @BACKSLASH  = [backslash];
21
22 @BRACKET_ = [parenleft bracketleft braceleft uni2770 uni2772];
23 @_BRACKET = [parenright bracketright braceright uni2771 uni2773];
24
25
26 languagesystem DFLT dflt;
27 languagesystem latn dflt;
28 languagesystem latn ROM;
29 languagesystem latn MOL;
30 languagesystem latn ISM;
31 languagesystem latn KSM;
32 languagesystem latn LSM;
33 languagesystem latn NSM;
34 languagesystem latn SKS;
35 languagesystem latn SSM;
36 languagesystem grek dflt;
37 languagesystem cyrl dflt;
38
39
40 feature aalt
41 {
42         sub Eng      from [Eng.locl];
43         sub Scedilla from [uni0218];
44         sub scedilla from [uni0219];
45         sub uni0162  from [uni021A];
46         sub uni0163  from [uni021B];
47
48         sub zero      from [zero.zero];
49         sub uni2070   from [uni2070.zero];
50         sub uni2080   from [uni2080.zero];
51         sub zero.numr from [zero.numr.zero];
52         sub zero.dnom from [zero.dnom.zero];
53
54         sub exclamdown   from [exclamdown.case];
55         sub questiondown from [questiondown.case];
56 } aalt;
57
58
59 feature locl
60 {
61         # Note: The explicit notation with exclude_dflt
62         # is necessary to prevent FontForge from adding
63         # the lookups to the dflt language.
64
65         script latn;
66                 language ROM exclude_dflt;
67                         lookup loclCommaaccent
68                         {
69                                 sub Scedilla by uni0218;
70                                 sub scedilla by uni0219;
71                                 sub uni0162  by uni021A;
72                                 sub uni0163  by uni021B;
73                         } loclCommaaccent;
74                 language MOL exclude_dflt;
75                         lookup loclCommaaccent;
76
77                 language ISM exclude_dflt;
78                         lookup loclEng
79                         {
80                                 sub Eng by Eng.locl;
81                         } loclEng;
82                 language KSM exclude_dflt;
83                         lookup loclEng;
84                 language LSM exclude_dflt;
85                         lookup loclEng;
86                 language NSM exclude_dflt;
87                         lookup loclEng;
88                 language SKS exclude_dflt;
89                         lookup loclEng;
90                 language SSM exclude_dflt;
91                         lookup loclEng;
92 } locl;
93
94
95 feature dlig
96 {
97         lookup dligCrossbar
98         {
99                 sub f' f by f.dlig;
100                 sub t' t by t.dlig;
101         } dligCrossbar;
102
103         lookup dligTittle
104         {
105                 sub f i by f_i;
106                 sub f j by f_j;
107         } dligTittle;
108 } dlig;
109
110
111 feature frac
112 {
113         # Trailblazer Algorithm
114         # Example input: 00 000/000 000/000/000
115
116         # Start leftward numerator trail, originating from any slash
117         # Result: 00 '''/000 '''/'''/000
118
119                 lookup fracNumr0 { sub @FIGR' slash by @NUMR; } fracNumr0;
120                 lookup fracNumr1 { sub @FIGR' @NUMR by @NUMR; } fracNumr1;
121                 lookup fracNumr2 { sub @FIGR' @NUMR by @NUMR; } fracNumr2;
122                 lookup fracNumr3 { sub @FIGR' @NUMR by @NUMR; } fracNumr3;
123                 lookup fracNumr4 { sub @FIGR' @NUMR by @NUMR; } fracNumr4;
124                 lookup fracNumr5 { sub @FIGR' @NUMR by @NUMR; } fracNumr5;
125                 lookup fracNumr6 { sub @FIGR' @NUMR by @NUMR; } fracNumr6;
126                 lookup fracNumr7 { sub @FIGR' @NUMR by @NUMR; } fracNumr7;
127                 lookup fracNumr8 { sub @FIGR' @NUMR by @NUMR; } fracNumr8;
128                 lookup fracNumr9 { sub @FIGR' @NUMR by @NUMR; } fracNumr9;
129
130         # Trails that touch a figure or slash on their left end are invalid,
131         # mark them by replacing the numerators with denominators
132         # Result: 00 '''/000 '''/.../000
133
134                 lookup fracMark { sub [slash @FIGR @DNOM] @NUMR' by @DNOM; } fracMark;
135
136         # Replace any valid slash with a fraction glyph
137         # Result: 00 '''|000 '''/.../000
138
139                 lookup fracSlash { sub @NUMR slash' @FIGR by slash.frac; } fracSlash;
140
141         # Change marked trails back to figures
142         # Result: 00 '''|000 '''/000/000
143
144                 lookup fracUnMark { sub @DNOM by @FIGR; } fracUnMark;
145
146         # Change trails not originating from a fraction glyph back to figures
147         # Result: 00 '''|000 000/000/000
148
149                 lookup fracUnNumr0 { sub @NUMR' slash by @FIGR; } fracUnNumr0;
150                 lookup fracUnNumr1 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr1;
151                 lookup fracUnNumr2 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr2;
152                 lookup fracUnNumr3 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr3;
153                 lookup fracUnNumr4 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr4;
154                 lookup fracUnNumr5 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr5;
155                 lookup fracUnNumr6 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr6;
156                 lookup fracUnNumr7 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr7;
157                 lookup fracUnNumr8 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr8;
158                 lookup fracUnNumr9 { sub @NUMR' @FIGR by @FIGR; } fracUnNumr9;
159
160         # Insert the denominators
161         # Result: 00 '''|... 000/000/000
162
163                 lookup fracDnom { sub [slash.frac @DNOM] @FIGR' by @DNOM; } fracDnom;
164
165         # Move the fraction closer to a leading figure
166         # Result: 00'''|... 000/000/000
167
168                 sub @FIGR [space uni00A0]' @NUMR by [space.frac uni00A0.frac];
169 } frac;
170
171
172 feature sups
173 {
174         sub @FIGR by @SUPS;
175 } sups;
176
177
178 feature subs
179 {
180         lookup subsSub
181         {
182                 sub @FIGR by @SUBS;
183         } subsSub;
184 } subs;
185
186
187 feature sinf
188 {
189         lookup subsSub;
190         lookup sinfPos
191         {
192                 pos [@SUBS zero.dnom.zero] <0 -120 0 0>;
193         } sinfPos;
194 } sinf;
195
196
197 feature zero
198 {
199         @zeroEmpty = [zero uni2070 uni2080 zero.numr zero.dnom];
200         @zeroSlash = [zero.zero uni2070.zero uni2080.zero zero.numr.zero zero.dnom.zero];
201
202         sub @zeroEmpty by @zeroSlash;
203 } zero;