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];
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];
20 @BACKSLASH = [backslash];
22 @BRACKET_ = [parenleft bracketleft braceleft uni2770 uni2772];
23 @_BRACKET = [parenright bracketright braceright uni2771 uni2773];
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;
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];
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];
54 sub exclamdown from [exclamdown.case];
55 sub questiondown from [questiondown.case];
61 # Note: The explicit notation with exclude_dflt
62 # is necessary to prevent FontForge from adding
63 # the lookups to the dflt language.
66 language ROM exclude_dflt;
67 lookup loclCommaaccent
69 sub Scedilla by uni0218;
70 sub scedilla by uni0219;
71 sub uni0162 by uni021A;
72 sub uni0163 by uni021B;
74 language MOL exclude_dflt;
75 lookup loclCommaaccent;
77 language ISM exclude_dflt;
82 language KSM exclude_dflt;
84 language LSM exclude_dflt;
86 language NSM exclude_dflt;
88 language SKS exclude_dflt;
90 language SSM exclude_dflt;
113 # Trailblazer Algorithm
114 # Example input: 00 000/000 000/000/000
116 # Start leftward numerator trail, originating from any slash
117 # Result: 00 '''/000 '''/'''/000
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;
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
134 lookup fracMark { sub [slash @FIGR @DNOM] @NUMR' by @DNOM; } fracMark;
136 # Replace any valid slash with a fraction glyph
137 # Result: 00 '''|000 '''/.../000
139 lookup fracSlash { sub @NUMR slash' @FIGR by slash.frac; } fracSlash;
141 # Change marked trails back to figures
142 # Result: 00 '''|000 '''/000/000
144 lookup fracUnMark { sub @DNOM by @FIGR; } fracUnMark;
146 # Change trails not originating from a fraction glyph back to figures
147 # Result: 00 '''|000 000/000/000
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;
160 # Insert the denominators
161 # Result: 00 '''|... 000/000/000
163 lookup fracDnom { sub [slash.frac @DNOM] @FIGR' by @DNOM; } fracDnom;
165 # Move the fraction closer to a leading figure
166 # Result: 00'''|... 000/000/000
168 sub @FIGR [space uni00A0]' @NUMR by [space.frac uni00A0.frac];
192 pos [@SUBS zero.dnom.zero] <0 -120 0 0>;
199 @zeroEmpty = [zero uni2070 uni2080 zero.numr zero.dnom];
200 @zeroSlash = [zero.zero uni2070.zero uni2080.zero zero.numr.zero zero.dnom.zero];
202 sub @zeroEmpty by @zeroSlash;