summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-03-14 21:51:16 +0000
committerKarl Berry <karl@freefriends.org>2017-03-14 21:51:16 +0000
commitd1c70ab27326385145a9d77d021834269f4d81a2 (patch)
treecd37e28c210ecb160f786e2cfea06eac3a43d060 /Master/texmf-dist/fonts/source/public
parent9cb26f3d0d652229032965f48c2a15afe0d52371 (diff)
fetamont (14mar17)
git-svn-id: svn://tug.org/texlive/trunk@43496 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source/public')
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmb10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmb8.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmb9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbase.mf1586
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbc40.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbco40.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbo10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbo8.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbo9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbw10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmbwo10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmc10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmchars_nonscalable.mf1167
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmchars_scalable.mf807
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmchars_uni.mf5316
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmco10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmh10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmh8.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmh9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmho10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmho8.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmho9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmhw10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmhwo10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffml10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlc10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlco10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlo10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlq10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlqo10.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlw10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmlwo10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmo10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmo8.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmo9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmr10.mf9
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmr8.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmr9.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmw10.mf8
-rw-r--r--Master/texmf-dist/fonts/source/public/fetamont/ffmwo10.mf8
40 files changed, 6183 insertions, 2978 deletions
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmb10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmb10.mf
index 4f4a303b2ca..e0618c03f52 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmb10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmb10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Bold";
+ font_fullname "Fetamont Bold";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(9.5,72,5);
+fi
font_identifier:="FFMB";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmb8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmb8.mf
index 3d0dbf65a3b..7022e88bc2c 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmb8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmb8.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Bold8";
+ font_fullname "Fetamont Bold 8";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(5,8.4,5);
+fi
font_identifier:="FFMB";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmb9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmb9.mf
index 93b55b632e5..4cd4c7fa93a 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmb9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmb9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Bold9";
+ font_fullname "Fetamont Bold 9";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(8.5,9.4,5);
+fi
font_identifier:="FFMB";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbase.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbase.mf
index e27c3517009..1356a87de82 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbase.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbase.mf
@@ -11,14 +11,13 @@
% are distributed under the terms of the
% LaTeX Project Public License (LPPL).
-mode_setup;
-if unknown slant: slant:=0 else: currenttransform:=
- identity slanted slant yscaled aspect_ratio fi;
-
-ho#:=o#; % horizontal overshoot
-leftstemloc#:=2.5u#+s#; % position of left stem
+if base_name<>"mf2outline":
+ message("This font has to be compiled");
+ message("with METAPOST and the base file");
+ message("mf2outline.mp! Using mf2outline.py");
+ message("makes things even easier.");
+fi
-font_coding_scheme "T1";
font_slant slant;
font_normal_space 6u#+2s#;
font_normal_stretch 3u#;
@@ -26,6 +25,27 @@ font_normal_shrink 2u#;
font_x_height x_ht#;
font_quad 18u#+2s#;
font_extra_space 2u#;
+font_coding_scheme "unicode";
+font_version "1.7";
+font_copyright "Copyright (c) 2014 by Linus Romer."
+ & "This work is released under the LaTeX project public license. "
+ & "The designs of the letters A, E, F, M, O, P, S and T rely heavily "
+ & "on the original design of the logo font family by "
+ & "Donald E. Knuth. The shapes of the glyphs Y and 1 have been "
+ & "imitated from the METATYPE1 logo.";
+
+ho#:=o#; % horizontal overshoot
+leftstemloc#:=2.5u#+s#; % position of left stem
+acc_gr#:=1.5acc_ht#; % height of Greek accents
+if not known has_variants:
+ has_variants:=0; % are random variants contained?
+fi
+variant:=0; % current variant
+string variantcode;
+variantcode:="F0000"; % starting code for variants %F0000
+
+mode_setup;
+currenttransform:=identity slanted slant yscaled aspect_ratio;
define_pixels(s,u);
define_whole_pixels(xgap);
@@ -34,535 +54,19 @@ define_blacker_pixels(px,py);
pickup pencircle xscaled px yscaled py rotated prot;
logo_pen:=savepen;
define_good_x_pixels(leftstemloc);
-define_good_y_pixels(barheight,x_ht,ht);
+define_good_y_pixels(barheight,x_ht,ht,acc_ht,acc_gr);
define_corrected_pixels(o);
define_horizontal_corrected_pixels(ho);
-% enc encodes names to numbers, so enc("A")=65
-% altough defining an array first seems to be
-% a good idea, it turns out that this variant
-% is significantly faster!
-def enc(expr name)=
- if (font_coding_scheme_="T1"):
- if name="grave":
- 0
- elseif name="acute":
- 1
- elseif name="circumflex":
- 2
- elseif name="tilde":
- 3
- elseif name="dieresis":
- 4
- elseif name="hungarumlaut":
- 5
- elseif name="ring":
- 6
- elseif name="caron":
- 7
- elseif name="breve":
- 8
- elseif name="macron":
- 9
- elseif name="dotaccent":
- 10
- elseif name="cedilla":
- 11
- elseif name="ogonek":
- 12
- elseif name="quotesinglbase":
- 13
- elseif name="guilsinglleft":
- 14
- elseif name="guilsinglright":
- 15
- elseif name="quotedblleft":
- 16
- elseif name="quotedblright":
- 17
- elseif name="quotedblbase":
- 18
- elseif name="guillemotleft":
- 19
- elseif name="guillemotright":
- 20
- elseif name="endash":
- 21
- elseif name="emdash":
- 22
- elseif name="cwm":
- 23
- elseif name="perthousandzero":
- 24
- elseif name="dotlessi":
- 25
- elseif name="dotlessj":
- 26
- elseif name="ff":
- 27
- elseif name="fi":
- 28
- elseif name="fl":
- 29
- elseif name="ffi":
- 30
- elseif name="ffl":
- 31
- elseif name="visiblespace":
- 32
- elseif name="exclam":
- 33
- elseif name="quotedbl":
- 34
- elseif name="numbersign":
- 35
- elseif name="dollar":
- 36
- elseif name="percent":
- 37
- elseif name="ampersand":
- 38
- elseif name="quoteright":
- 39
- elseif name="parenleft":
- 40
- elseif name="parenright":
- 41
- elseif name="asterisk":
- 42
- elseif name="plus":
- 43
- elseif name="comma":
- 44
- elseif name="hyphen":
- 45
- elseif name="period":
- 46
- elseif name="slash":
- 47
- elseif name="zero":
- 48
- elseif name="one":
- 49
- elseif name="two":
- 50
- elseif name="three":
- 51
- elseif name="four":
- 52
- elseif name="five":
- 53
- elseif name="six":
- 54
- elseif name="seven":
- 55
- elseif name="eight":
- 56
- elseif name="nine":
- 57
- elseif name="colon":
- 58
- elseif name="semicolon":
- 59
- elseif name="less":
- 60
- elseif name="equal":
- 61
- elseif name="greater":
- 62
- elseif name="question":
- 63
- elseif name="at":
- 64
- elseif name="A":
- 65
- elseif name="B":
- 66
- elseif name="C":
- 67
- elseif name="D":
- 68
- elseif name="E":
- 69
- elseif name="F":
- 70
- elseif name="G":
- 71
- elseif name="H":
- 72
- elseif name="I":
- 73
- elseif name="J":
- 74
- elseif name="K":
- 75
- elseif name="L":
- 76
- elseif name="M":
- 77
- elseif name="N":
- 78
- elseif name="O":
- 79
- elseif name="P":
- 80
- elseif name="Q":
- 81
- elseif name="R":
- 82
- elseif name="S":
- 83
- elseif name="T":
- 84
- elseif name="U":
- 85
- elseif name="V":
- 86
- elseif name="W":
- 87
- elseif name="X":
- 88
- elseif name="Y":
- 89
- elseif name="Z":
- 90
- elseif name="bracketleft":
- 91
- elseif name="backslash":
- 92
- elseif name="bracketright":
- 93
- elseif name="asciicircum":
- 94
- elseif name="underscore":
- 95
- elseif name="quoteleft":
- 96
- elseif name="a":
- 97
- elseif name="b":
- 98
- elseif name="c":
- 99
- elseif name="d":
- 100
- elseif name="e":
- 101
- elseif name="f":
- 102
- elseif name="g":
- 103
- elseif name="h":
- 104
- elseif name="i":
- 105
- elseif name="j":
- 106
- elseif name="k":
- 107
- elseif name="l":
- 108
- elseif name="m":
- 109
- elseif name="n":
- 110
- elseif name="o":
- 111
- elseif name="p":
- 112
- elseif name="q":
- 113
- elseif name="r":
- 114
- elseif name="s":
- 115
- elseif name="t":
- 116
- elseif name="u":
- 117
- elseif name="v":
- 118
- elseif name="w":
- 119
- elseif name="x":
- 120
- elseif name="y":
- 121
- elseif name="z":
- 122
- elseif name="braceleft":
- 123
- elseif name="bar":
- 124
- elseif name="braceright":
- 125
- elseif name="asciitilde":
- 126
- elseif name="dash":
- 127
- elseif name="Abreve":
- 128
- elseif name="Aogonek":
- 129
- elseif name="Cacute":
- 130
- elseif name="Ccaron":
- 131
- elseif name="Dcaron":
- 132
- elseif name="Ecaron":
- 133
- elseif name="Eogonek":
- 134
- elseif name="Gbreve":
- 135
- elseif name="Lacute":
- 136
- elseif name="Lcaron":
- 137
- elseif name="Lslash":
- 138
- elseif name="Nacute":
- 139
- elseif name="Ncaron":
- 140
- elseif name="Eng":
- 141
- elseif name="Ohungarumlaut":
- 142
- elseif name="Racute":
- 143
- elseif name="Rcaron":
- 144
- elseif name="Sacute":
- 145
- elseif name="Scaron":
- 146
- elseif name="Scedilla":
- 147
- elseif name="Tcaron":
- 148
- elseif name="Tcedilla":
- 149
- elseif name="Uhungarumlaut":
- 150
- elseif name="Uring":
- 151
- elseif name="Ydieresis":
- 152
- elseif name="Zacute":
- 153
- elseif name="Zcaron":
- 154
- elseif name="Zdotaccent":
- 155
- elseif name="IJ":
- 156
- elseif name="Idotaccent":
- 157
- elseif name="dcroat":
- 158
- elseif name="section":
- 159
- elseif name="abreve":
- 160
- elseif name="aogonek":
- 161
- elseif name="cacute":
- 162
- elseif name="ccaron":
- 163
- elseif name="dcaron":
- 164
- elseif name="ecaron":
- 165
- elseif name="eogonek":
- 166
- elseif name="gbreve":
- 167
- elseif name="lacute":
- 168
- elseif name="lcaron":
- 169
- elseif name="lslash":
- 170
- elseif name="nacute":
- 171
- elseif name="ncaron":
- 172
- elseif name="eng":
- 173
- elseif name="ohungarumlaut":
- 174
- elseif name="racute":
- 175
- elseif name="rcaron":
- 176
- elseif name="sacute":
- 177
- elseif name="scaron":
- 178
- elseif name="scedilla":
- 179
- elseif name="tcaron":
- 180
- elseif name="tcedilla":
- 181
- elseif name="uhungarumlaut":
- 182
- elseif name="uring":
- 183
- elseif name="ydieresis":
- 184
- elseif name="zacute":
- 185
- elseif name="zcaron":
- 186
- elseif name="zdotaccent":
- 187
- elseif name="ij":
- 188
- elseif name="exclamdown":
- 189
- elseif name="questiondown":
- 190
- elseif name="sterling":
- 191
- elseif name="Agrave":
- 192
- elseif name="Aacute":
- 193
- elseif name="Acircumflex":
- 194
- elseif name="Atilde":
- 195
- elseif name="Adieresis":
- 196
- elseif name="Aring":
- 197
- elseif name="AE":
- 198
- elseif name="Ccedilla":
- 199
- elseif name="Egrave":
- 200
- elseif name="Eacute":
- 201
- elseif name="Ecircumflex":
- 202
- elseif name="Edieresis":
- 203
- elseif name="Igrave":
- 204
- elseif name="Iacute":
- 205
- elseif name="Icircumflex":
- 206
- elseif name="Idieresis":
- 207
- elseif name="Eth":
- 208
- elseif name="Ntilde":
- 209
- elseif name="Ograve":
- 210
- elseif name="Oacute":
- 211
- elseif name="Ocircumflex":
- 212
- elseif name="Otilde":
- 213
- elseif name="Odieresis":
- 214
- elseif name="OE":
- 215
- elseif name="Oslash":
- 216
- elseif name="Ugrave":
- 217
- elseif name="Uacute":
- 218
- elseif name="Ucircumflex":
- 219
- elseif name="Udieresis":
- 220
- elseif name="Yacute":
- 221
- elseif name="Thorn":
- 222
- elseif name="Germandbls":
- 223
- elseif name="agrave":
- 224
- elseif name="aacute":
- 225
- elseif name="acircumflex":
- 226
- elseif name="atilde":
- 227
- elseif name="adieresis":
- 228
- elseif name="aring":
- 229
- elseif name="ae":
- 230
- elseif name="ccedilla":
- 231
- elseif name="egrave":
- 232
- elseif name="eacute":
- 233
- elseif name="ecircumflex":
- 234
- elseif name="edieresis":
- 235
- elseif name="igrave":
- 236
- elseif name="iacute":
- 237
- elseif name="icircumflex":
- 238
- elseif name="idieresis":
- 239
- elseif name="eth":
- 240
- elseif name="ntilde":
- 241
- elseif name="ograve":
- 242
- elseif name="oacute":
- 243
- elseif name="ocircumflex":
- 244
- elseif name="otilde":
- 245
- elseif name="odieresis":
- 246
- elseif name="oe":
- 247
- elseif name="oslash":
- 248
- elseif name="ugrave":
- 249
- elseif name="uacute":
- 250
- elseif name="ucircumflex":
- 251
- elseif name="udieresis":
- 252
- elseif name="yacute":
- 253
- elseif name="thorn":
- 254
- elseif name="germandbls":
- 255
- else:
- errmessage("unknown name to encode");
- fi
- else:
- errmessage("tell me somewhere that the font_coding_scheme is T1");
- fi
-enddef;
+numeric charwidths_[];
+numeric charheights_[];
+numeric chardepths_[];
+numeric charitalcorrs_[];
+picture charpictures_[];
+pair charanchortops_[];
+pair charanchorbots_[];
+pair charanchortoprights_[];
+pair charanchorcedillas_[];
% the randomization is fixed
% but still special for every style
@@ -585,78 +89,187 @@ vardef randup = %random direction towards up
(normaldeviate*craziness,ht)
enddef;
-code_offset:=0; %later used for small caps
-
-numeric charwidths_[];
-numeric charheights_[];
-numeric chardepths_[];
-numeric charitalcorrs_[];
-picture charpictures_[];
-pair charanchortops_[];
-pair charanchorbots_[];
-pair charanchortoprights_[];
+% varycode returns a code for a variant, if
+% variant>0 and
+vardef varycode(expr code) =
+ if variant>0:
+ variantcode := unicodeeps(epscode(variantcode)+epsilon);
+ unicodeeps(epscode(variantcode)-epsilon)
+ else:
+ code
+ fi
+enddef;
-def ffmchar(expr name, unit_width, height, depth) =
- beginchar(enc(name)+code_offset,if unit_width=0: 0 else: unit_width*u#+2s# fi,height,depth);
+def ffmchar(expr code, unit_width, height, depth) =
+ beginchar(varycode(code),
+ if unit_width=0: 0 else: unit_width*u#+2s# fi,
+ height,depth);
+ if variant>0:
+ addrandvariant(code,charunicode);
+ fi
pickup logo_pen
enddef;
-extra_endchar := extra_endchar&"charpictures_[charcode]:=currentpicture;"
- &"charwidths_[charcode]=charwd;"
- &"charheights_[charcode]=charht;"
- &"chardepths_[charcode]=chardp;"
- &"charitalcorrs_[charcode]=charic;";
-
-def ffmcombinedchar(expr namea,nameb,namec,anchor,height,depth) =
- beginchar(enc(namea)+code_offset,charwidths_[enc(nameb)+code_offset],height,depth);
- charic:=charitalcorrs_[enc(nameb)+code_offset];
- addto currentpicture also charpictures_[enc(nameb)+code_offset];
+extra_endchar :=
+ extra_endchar
+ &"charpictures_[charepscode]:=currentpicture;"
+ &"charwidths_[charepscode]=charwd;"
+ &"charheights_[charepscode]=charht;"
+ &"chardepths_[charepscode]=chardp;"
+ &"charitalcorrs_[charepscode]=charic;";
+
+% the glyph with code a is anchor wise combined
+% from the glyphs with code b (base) and code c (accent)
+% the new height and depth shall be h and d
+def ffmcombinedchar(expr a,b,c,anchor,h,d) =
+ beginchar(varycode(a),charwidths_[epscode(b)],h,d);
+ if variant>0:
+ addrandvariant(a,charunicode);
+ fi
+ charic:=charitalcorrs_[epscode(b)];
+ charanchortops_[epscode(varycode(a))]=charanchortops_[epscode(b)];
+ charanchorbots_[epscode(varycode(a))]=charanchorbots_[epscode(b)];
+ charanchortoprights_[epscode(varycode(a))]=charanchortoprights_[epscode(b)];
+ charanchorcedillas_[epscode(varycode(a))]=charanchorcedillas_[epscode(b)];
+ if variant>0:
+ picepscode:=randvariants_[epscode(b)][variant];
+ else:
+ picepscode:=epscode(b);
+ fi
+ addto currentpicture also charpictures_[picepscode];
+ if variant>0:
+ picepscode:=randvariants_[epscode(c)][variant];
+ else:
+ picepscode:=epscode(c);
+ fi
if anchor="top":
- addto currentpicture also charpictures_[enc(namec)] shifted
- ((charanchortops_[enc(nameb)+code_offset]-charanchortops_[enc(namec)]) slanted slant);
+ addto currentpicture also charpictures_[picepscode] shifted
+ ((charanchortops_[epscode(b)]-charanchortops_[epscode(c)]) slanted slant);
elseif anchor="bot":
- addto currentpicture also charpictures_[enc(namec)] shifted
- ((charanchorbots_[enc(nameb)+code_offset]-charanchorbots_[enc(namec)]) slanted slant);
+ addto currentpicture also charpictures_[picepscode] shifted
+ ((charanchorbots_[epscode(b)]-charanchorbots_[epscode(c)]) slanted slant);
elseif anchor="topright":
- addto currentpicture also charpictures_[enc(namec)] shifted
- ((charanchortoprights_[enc(nameb)+code_offset]-charanchortoprights_[enc(namec)]) slanted slant);
+ addto currentpicture also charpictures_[picepscode] shifted
+ ((charanchortoprights_[epscode(b)]-charanchortoprights_[epscode(c)]) slanted slant);
+ elseif anchor="cedilla":
+ addto currentpicture also charpictures_[picepscode] shifted
+ ((charanchorcedillas_[epscode(b)]-charanchorcedillas_[epscode(c)]) slanted slant);
else:
errmessage "Wrong anchor name";
fi
endchar;
enddef;
-% chain two chars like "f" and "l" to "fl"
-def ffmchainedchar(expr namea,nameb,namec) =
- beginchar(
- enc(namea)+code_offset,
- charwidths_[enc(nameb)+code_offset]
- +charwidths_[enc(namec)+code_offset],
- max(charheights_[enc(nameb)+code_offset],
- charheights_[enc(namec)+code_offset]),
- max(chardepths_[enc(nameb)+code_offset],
- chardepths_[enc(namec)+code_offset])
+% ffmchainedchar chains two chars like "f" (code b)
+% and "l" (code c) to "fl" (code a)
+% inbetween the chars may be a gap
+def ffmchainedchar(expr a,b,c,gap) =
+ beginchar(varycode(a),
+ charwidths_[epscode(b)]
+ +charwidths_[epscode(c)]+gap*u#,
+ max(charheights_[epscode(b)],
+ charheights_[epscode(c)]),
+ max(chardepths_[epscode(b)],
+ chardepths_[epscode(c)])
);
- charic:=charitalcorrs_[enc(nameb)+code_offset];
- addto currentpicture also charpictures_[enc(nameb)+code_offset];
- addto currentpicture also charpictures_[enc(namec)+code_offset]
- shifted (charwidths_[enc(nameb)+code_offset]*hppp,0);
+ if variant>0:
+ addrandvariant(a,charunicode);
+ fi
+ charic:=charitalcorrs_[epscode(b)];
+ if variant>0:
+ picepscode:=randvariants_[epscode(b)][variant];
+ else:
+ picepscode:=epscode(b);
+ fi
+ addto currentpicture also charpictures_[picepscode];
+ if variant>0:
+ picepscode:=randvariants_[epscode(c)][variant];
+ else:
+ picepscode:=epscode(c);
+ fi
+ addto currentpicture also charpictures_[picepscode]
+ shifted (charwidths_[epscode(b)]*hppp+gap*u#*hppp,0);
endchar;
enddef;
-% copy a letter nameb to namea
-def ffmcopiedchar(expr namea,nameb) =
- beginchar(
- enc(namea),
- charwidths_[enc(nameb)],
- charheights_[enc(nameb)],
- chardepths_[enc(nameb)]
+% copy a letter with code b to code a
+def ffmcopiedchar(expr a,b) =
+ beginchar(varycode(a),
+ charwidths_[epscode(b)],
+ charheights_[epscode(b)],
+ chardepths_[epscode(b)]
);
- charic:=charitalcorrs_[enc(nameb)];
- addto currentpicture also charpictures_[enc(nameb)];
+ if variant>0:
+ addrandvariant(a,charunicode);
+ fi
+ charic:=charitalcorrs_[epscode(b)];
+ charanchortops_[epscode(varycode(a))]=charanchortops_[epscode(b)];
+ charanchorbots_[epscode(varycode(a))]=charanchorbots_[epscode(b)];
+ charanchortoprights_[epscode(varycode(a))]=charanchortoprights_[epscode(b)];
+ charanchorcedillas_[epscode(varycode(a))]=charanchorcedillas_[epscode(b)];
+ if variant>0:
+ picepscode:=randvariants_[epscode(b)][variant];
+ else:
+ picepscode:=epscode(b);
+ fi
+ addto currentpicture also charpictures_[picepscode];
endchar;
enddef;
+% add a first kerning class (similar to addkernclassl
+% as in mf2outline.mp) but with random variants
+def addkernclassf(text a) =
+ begingroup
+ save i,l;
+ numeric i,l;
+ l:=hex(kernclassesl_[0][0])+1;
+ kernclassesl_[0][0]:=hexadecimal l;
+ i:=0; % number of chars in current class
+ for b=a:
+ i:=i+1;
+ kernclassesl_[l][i]:=unicode b;
+ % include also random variants
+ if has_variants=1:
+ if randvariants_[epscode(b)][0]>0:
+ for j=1 upto randvariants_[epscode(b)][0]:
+ i:=i+1;
+ kernclassesl_[l][i]:=unicodeeps(randvariants_[epscode(b)][j]);
+ endfor
+ fi
+ fi
+ endfor
+ % number of chars in current class is stored at 0th position
+ kernclassesl_[l][0]:=hexadecimal i;
+ endgroup
+enddef;
+
+% add a second kerning class (similar to addkernclassr
+% as in mf2outline.mp) but with random variants
+def addkernclasss(text a) =
+ begingroup
+ save i,l;
+ numeric i,l;
+ l:=hex(kernclassesr_[0][0])+1;
+ kernclassesr_[0][0]:=hexadecimal l;
+ i:=0; % number of chars in current class
+ for b=a:
+ i:=i+1;
+ kernclassesr_[l][i]:=unicode b;
+ % include also random variants
+ if has_variants=1:
+ if randvariants_[epscode(b)][0]>0:
+ for j=1 upto randvariants_[epscode(b)][0]:
+ i:=i+1;
+ kernclassesr_[l][i]:=unicodeeps(randvariants_[epscode(b)][j]);
+ endfor
+ fi
+ fi
+ endfor
+ % number of chars in current class is stored at 0th position
+ kernclassesr_[l][0]:=hexadecimal i;
+ endgroup
+enddef;
+
% an arc is kind of a quarter of a skewed superellipse
vardef arc(expr zi,diri,zj,dirj) =
zi{diri}...
@@ -689,528 +302,497 @@ def dotcircle(expr zi,zj) =
zi..zj..cycle & zi
enddef;
-% general letters with no lowercase counterpart
-input ffmchars_nonscalable
-% uppercase with lowercase counterpart
-input ffmchars_scalable
-% uppercase with no lowercase counterpart
-ffmcombinedchar("Idotaccent","I","dotaccent","top",ht#+acc_ht#,0);
-
-% now try again with lowercase settings
-ht#:=x_ht#; % new characters height (for lowercase)
-u#:=.9u#; % new unit width
-barheight#:=.5x_ht#; % new height of bar lines (for lowercase)
-define_pixels(u);
-define_good_y_pixels(barheight);
-code_offset:=ASCII"a" - ASCII"A";
-
-input ffmchars_scalable
-% restore the most important things
-code_offset:=0;
-u#:=u#/.9;
-define_pixels(u);
-
-ffmcopiedchar("dotlessi","i");
-ffmcopiedchar("dotlessj","j");
-ffmcopiedchar("dcroat","eth");
-ffmchainedchar("ff","f","f");
-ffmchainedchar("fi","f","i");
-ffmchainedchar("fl","f","l");
-ffmchainedchar("ffi","ff","i");
-ffmchainedchar("ffl","ff","l");
-
-% kernings
-numeric kernclassesf_[][], % list of kerning classes (first position)
- kernclassess_[][], % list of kerning classes (second position)
- ligmatrix_[][][]; % matrix with kern and ligature entries: 255 times X times 2
-kernclassesf_[0][0]=0; % number of kernclassesf (will be increased)
-kernclassess_[0][0]=0; % number of kernclassess (will be increased)
-for i=0 upto 255:
- ligmatrix_[i][0][0]:=0; % every char i begins with no kernings (will be increased)
-endfor
-
-def addkernclassf(text a) = % add a kerning class to kernclassesf
- kernclassesf_[0][0]:=kernclassesf_[0][0]+1; % number of kernclassesf
- begingroup
- save i;
- i:=0; % number of chars in current class
- for b=a:
- i:=i+1;
- kernclassesf_[kernclassesf_[0][0]][i]:=enc(b);
- endfor
- % number of chars in current class is stored at 0th position
- kernclassesf_[kernclassesf_[0][0]][0]:=i;
- endgroup
-enddef;
-
-def addkernclasss(text a) = % add a kerning class to kernclassess
- kernclassess_[0][0]:=kernclassess_[0][0]+1; % number of kernclassess
- begingroup
- save i,n;
- n:=kernclassess_[0][0]; % current last class (being written)
- i:=0; % number of chars in current class
- for b=a:
- i:=i+1;
- kernclassess_[n][i]:=enc(b);
- endfor
- % number of chars in current class is stored at 0th position
- kernclassess_[n][0]:=i;
- endgroup
-enddef;
-
-def addlig(expr first,second,third) = % replace first and second to the ligature third
- begingroup
- save i,n;
- i:=enc(first); % encoding number of first
- ligmatrix_[i][0][0]:=ligmatrix_[i][0][0]+1;
- n:=ligmatrix_[i][0][0]; % current last ligature entry index of i (being written)
- ligmatrix_[i][0][0]:=n;
- ligmatrix_[i][n][0]:=-enc(second); % the minus is a flag for "ligature" instead of "kern"
- ligmatrix_[i][n][1]:=enc(third);
- endgroup
-enddef;
-
-def addclasskern(expr first,second,kvalue) = % kern all chars of first class and second class by kvalue
- begingroup
- save i,j,m,n;
- % get the indices i and j of the two classes:
- i:=0; % default value (cannot be true)
- j:=0; % default value (cannot be true)
- forever:
- i:=i+1;
- exitif kernclassesf_[i][1]=enc(first);
- if i>255:
- errmessage("unknown first kerning class");
- fi
- endfor
- forever:
- j:=j+1;
- exitif kernclassess_[j][1]=enc(second);
- if j>255:
- errmessage("unknown first kerning class");
- fi
- endfor
- for k=1 upto kernclassesf_[i][0]:
- m:=kernclassesf_[i][k]; % current first glyph
- for l=1 upto kernclassess_[j][0]:
- ligmatrix_[m][0][0]:=ligmatrix_[m][0][0]+1;
- n:=ligmatrix_[m][0][0]; % current last entry index (being written)
- ligmatrix_[m][n][0]:=kernclassess_[j][l];
- ligmatrix_[m][n][1]:=kvalue;
- endfor
- endfor
- endgroup
-enddef;
-
-def writeligtable = % write all kernings/ligatures at once
- begingroup
- save n;
- for i=0 upto 255: % current glyph i
- n:=ligmatrix_[i][0][0]; % number n of entries for glyph i
- if n<>0: % skip empty entries
- ligtable i:
- for j=1 upto n-1: %last entry needs a semicolon
- if ligmatrix_[i][j][0]<0: % the minus is a flag for "ligature"
- -ligmatrix_[i][j][0]=:ligmatrix_[i][j][1],
- else:
- ligmatrix_[i][j][0] kern ligmatrix_[i][j][1],
- fi
- endfor
- %last entry needs a semicolon:
- if ligmatrix_[i][n][0]<0: % the minus is a flag for "ligature"
- -ligmatrix_[i][n][0]=:ligmatrix_[i][n][1];
- else:
- ligmatrix_[i][n][0] kern ligmatrix_[i][n][1];
- fi
- fi
- endfor
- endgroup
-enddef;
-
-addkernclassf("A","Abreve","Aogonek","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring");
-addkernclassf("B");
-addkernclassf("C","Cacute","Ccaron","Ccedilla");
-addkernclassf("D","Dcaron","O","Ohungarumlaut","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","Eth");
-addkernclassf("F");
-addkernclassf("J","U","Uhungarumlaut","Ugrave","Uacute","Ucircumflex","Udieresis","IJ","Oslash");
-addkernclassf("K","X");
-addkernclassf("L","Lacute","Lcaron","Lslash");
-addkernclassf("P");
-addkernclassf("Thorn");
+%
+input ffmchars_uni
+if has_variants=1: % make 4 variants for RAND feature
+ variant := 1;
+ input ffmchars_uni
+ variant := 2;
+ input ffmchars_uni
+ variant := 3;
+ input ffmchars_uni
+ variant := 4;
+ input ffmchars_uni
+fi
+
+%------kerning-------
+addkernclassf("A","00C0","00C1","00C2","00C3","00C4","00C5","0100",
+ "0102","0104","0386","038F","0391","03A9","1EA0","1F08","1F09",
+ "1F0A","1F0B","1F0C","1F0D","1F0E","1F0F","1F68","1F69","1F6A",
+ "1F6B","1F6C","1F6D","1F6E","1F6F","1F88","1F89","1F8A","1F8B",
+ "1F8C","1F8D","1F8E","1F8F","1FA8","1FA9","1FAA","1FAB","1FAC",
+ "1FAD","1FAE","1FAF","1FB8","1FB9","1FBA","1FBB","1FBC","1FFA",
+ "1FFB","1FFC");
+addkernclassf("B","0392","1E9E");
+addkernclassf("C","00C7","0106","0108","010A","010C");
+addkernclassf("D","O","00D0","00D2","00D3","00D4","00D5","00D6",
+ "010E","0110","014C","014E","0150","018F","038C","0398","039F","03D8",
+ "1ECC","1F48","1F49","1F4A","1F4B","1F4C","1F4D","1FF8","1FF9");
+addkernclassf("F","03DC");
+addkernclassf("J","U","00D8","00D9","00DA","00DB","00DC","0132","0134",
+ "0168","016A","016C","016E","0170","0172");
+addkernclassf("K","0058","0136","039A","039E","03A3","03A7");
+addkernclassf("L","0139","013B","013D","0141");
+addkernclassf("P","03A1","1FEC");
+addkernclassf("00DE"); % Thorn
addkernclassf("Q");
-addkernclassf("R","Racute","Rcaron");
-addkernclassf("S","Sacute","Scedilla","Scaron");
-addkernclassf("T","Tcaron","Tcedilla");
-addkernclassf("V","W");
-addkernclassf("Y","Ydieresis","Yacute");
-addkernclassf("Z","Zacute","Zcaron","Zdotaccent");
-addkernclassf("a","abreve","aogonek","agrave","aacute","acircumflex","atilde","adieresis","aring");
-addkernclassf("b");
-addkernclassf("c","cacute","ccaron","ccedilla");
-addkernclassf("d","dcaron","o","ohungarumlaut","ograve","oacute","ocircumflex","otilde","odieresis","eth");
-addkernclassf("f");
-addkernclassf("j","u","uhungarumlaut","ugrave","uacute","ucircumflex","udieresis","ij","oslash");
-addkernclassf("k","x");
-addkernclassf("l","lacute","lcaron","lslash");
-addkernclassf("p");
-addkernclassf("thorn");
+addkernclassf("R","0154","0156","0158");
+addkernclassf("S","015A","015C","015E","0160","0218");
+addkernclassf("T","0162","0164","021A","0393","03A4");
+addkernclassf("V","W","0174","1E80","1E82","1E84");
+addkernclassf("Y","00DD","0176","0178","0232","038E","03A5","03A8",
+ "03AB","1EF2","1EF8","1F59","1F5B","1F5D","1F5F","1FE8","1FE9",
+ "1FEA","1FEB");
+addkernclassf("Z","0179","017B","017D","0396");
+addkernclassf("0394","039B","03E0"); % Delta, Lambda, ...
+addkernclassf("a","00E0","00E1","00E2","00E3","00E4","00E5","0101",
+ "0103","0105","03AC","03B1","03C9","03CE","1EA1","1F00","1F01",
+ "1F02","1F03","1F04","1F05","1F06","1F07","1F60","1F61","1F62",
+ "1F63","1F64","1F65","1F66","1F67","1F70","1F71","1F7C","1F7D",
+ "1F80","1F81","1F82","1F83","1F84","1F85","1F86","1F87","1FA0",
+ "1FA1","1FA2","1FA3","1FA4","1FA5","1FA6","1FA7","1FB0","1FB1",
+ "1FB2","1FB3","1FB4","1FB6","1FB7","1FF2","1FF3","1FF4","1FF6",
+ "1FF7");
+addkernclassf("b","00DF","03B2");
+addkernclassf("c","00E7","0109","010B","010D","03DB");
+addkernclassf("d","o","00F0","010F","0111","01DD","0259","03B8","03BF",
+ "03CC","03D9","1ECD","1F40","1F41","1F42","1F43","1F44","1F45",
+ "1F78","1F79");
+addkernclassf("f","FB00");
+addkernclassf("j","0075","00F9","00FA","00FB","00FC","0133","0135",
+ "016B","016D","016F","0171","0173","1EE5");
+addkernclassf("k","x","0137","0138","03BA","03BE","03C2","03C3","03C7");
+addkernclassf("l","013A","013C","013E","0140","0142","FB02","FB04");
+addkernclassf("p","03C1","1FE4","1FE5");
+addkernclassf("00FE"); % thorn
addkernclassf("q");
-addkernclassf("r","racute","rcaron");
-addkernclassf("s","scedilla","sacute","scaron");
-addkernclassf("t","tcaron","tcedilla");
-addkernclassf("v","w");
-addkernclassf("y","ydieresis","yacute");
-addkernclassf("zero","three","eight","nine");
-addkernclassf("two");
-addkernclassf("four");
-addkernclassf("five","six");
-addkernclassf("seven");
-
-addkernclasss("A","Abreve","Aogonek","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Germandbls");
-addkernclasss("C","G","O","Q","Cacute","Ccaron","Gbreve","Ohungarumlaut","Ccedilla","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","OE","Oslash");
+addkernclassf("r","0155","0157","0159");
+addkernclassf("s","015B","015D","015F","0161","0219");
+addkernclassf("t","0163","0165","021B","03B3","03C4");
+addkernclassf("v","w","0175","1E81","1E83","1E85");
+addkernclassf("y","00FD","0177","03B0","03C5","03C8","03CD","1F50",
+ "1F51","1F52","1F53","1F54","1F55","1F56","1F57","1FE0","1FE1",
+ "1FE2","1FE3");
+addkernclassf("z","017A","017C","017E","03B6");
+addkernclassf("03B4","03BB","03E1"); % delta, lambda, ...
+addkernclassf("0030","0033","0038","0039"); % 0,3,8,9
+addkernclassf("0032"); % 2
+addkernclassf("0034"); % 4
+addkernclassf("0035","0036"); % 5,6
+addkernclassf("0037"); % 7
+
+addkernclasss("A","00C0","00C1","00C2","00C3","00C4","00C5",
+ "00C6","00D8","0102","0104","01FE","0391","1E9E",
+ "1EA0","1FB8","1FB9","1FBC");
+addkernclasss("C","G","O","Q","00C7","00D2","00D3",
+ "00D4","00D5","00D6","0106","0108","010A","010C",
+ "011C","011E","0120","0121","0122","014C","014E",
+ "0150","0152","0398","039F","03D8","1ECC","E001");
addkernclasss("J");
-addkernclasss("S","Sacute","Scedilla","Scaron");
-addkernclasss("T","Tcaron","Tcedilla");
-addkernclasss("U","Uhungarumlaut","Ugrave","Uacute","Ucircumflex","Udieresis","IJ","Oslash");
-addkernclasss("V","W");
-addkernclasss("X");
-addkernclasss("Y","Ydieresis","Yacute");
-addkernclasss("a","aogonek","ae","germandbls");
-addkernclasss("abreve","agrave","aacute","acircumflex","atilde","adieresis","aring");
-addkernclasss("b","d","e","f","h","i","k","l","m","n","p","r","eogonek","lslash","lcaron","eng","thorn");
-addkernclasss("dcaron","ecaron","lacute","nacute","ncaron","racute","rcaron","egrave","eacute","edieresis","igrave","iacute","icircumflex","idieresis","ntilde");
-addkernclasss("c","g","o","q","ccedilla","oe","oslash");
-addkernclasss("cacute","ccaron","gbreve","ohungarumlaut","ograve","oacute","ocircumflex","otilde","odieresis");
-addkernclasss("j");
-addkernclasss("s","scedilla");
-addkernclasss("sacute","scaron");
-addkernclasss("t","tcedilla");
-addkernclasss("tcaron");
-addkernclasss("u");
-addkernclasss("uhungarumlaut","ugrave","uacute","ucircumflex","udieresis","ij");
+addkernclasss("S","015A","015C","015E","0160","0218");
+addkernclasss("T","0162","0164","021A","03A4");
+addkernclasss("U","00D9","00DA","00DB","00DC","016C","016E",
+ "0170","0172");
+addkernclasss("V","W","1E80","1E82","1E84");
+addkernclasss("X","039E","03A3","03A7");
+addkernclasss("Y","00DD","0176","0178","0232","03A5","03A8",
+ "03AB","1EF2","1EF8","1F59","1F5B","1F5D","1F5F",
+ "1FE8","1FE9");
+addkernclasss("0394","039B"); % Delta, Lambda
+addkernclasss("a","00DF","00E6","0105","03B1","1EA1","1FB3");
+addkernclasss("00E0","00E1","00E2","00E3","00E4","00E5","0101",
+ "0103","01FD","03AC","1F00","1F01","1F02","1F03",
+ "1F04","1F05","1F06","1F07","1F70","1F71","1F80",
+ "1F81","1F82","1F83","1F84","1F85","1F86","1F87",
+ "1FB2","1FB4","1FB6","1FB7");
+addkernclasss("b","d","e","f","h","i","k",
+ "l","m","n","p","r","00FE","0119",
+ "012F","0131","0137","0138","013C","013E","0140",
+ "0146","014B","0157","03B3","03B7","03B9","03BA",
+ "03BC","03BD","03C0","03C1","03DD","1EB9","1ECB",
+ "1FC3","FB00","FB01","FB02","FB03","FB04");
+addkernclasss("00E8","00E9","00EA","00EB","00F1","010F","0117",
+ "011B","0125","0129","012B","012D","013A","0144",
+ "0148","0155","0159","03AD","03AE","03CA","1EBD",
+ "1F10","1F11","1F12","1F13","1F14","1F15","1F20",
+ "1F21","1F22","1F23","1F24","1F25","1F26","1F27",
+ "1F30","1F31","1F32","1F33","1F34","1F35","1F36",
+ "1F37","1F72","1F73","1F74","1F75","1F76","1F77",
+ "1F90","1F91","1F92","1F93","1F94","1F95","1F96",
+ "1F97","1FC2","1FC4","1FC6","1FC7","1FD0","1FD1",
+ "1FD2","1FD3","1FD6","1FD7","1FE4","1FE5");
+addkernclasss("c","g","o","00E7","0123","0153","03B8",
+ "03BF","03D9","03DB","1ECD");
+addkernclasss("00F2","00F3","00F4","00F5","00F6","0107","0109",
+ "010B","010D","011D","011F","014D","014F","0151",
+ "03CC","1F40","1F41","1F42","1F43","1F44","1F45");
+addkernclasss("j","0237");
+addkernclasss("0135");
+addkernclasss("s","015F","0219");
+addkernclasss("015B","015D","0161");
+addkernclasss("t","0163","021B","03C4");
+addkernclasss("0165");
+addkernclasss("u","0173","1EE5");
+addkernclasss("00F9","00FA","00FB","00FC","0169","016B","016D",
+ "016F");
addkernclasss("v","w");
-addkernclasss("x");
-addkernclasss("y");
-addkernclasss("ydieresis","yacute");
-addkernclasss("z");
-addkernclasss("zacute","zcaron","zdotaccent");
-addkernclasss("period","comma");
-addkernclasss("zero","six","eight");
-addkernclasss("one");
-addkernclasss("two");
-addkernclasss("three");
-addkernclasss("four");
-addkernclasss("five");
-addkernclasss("seven");
-addkernclasss("nine");
+addkernclasss("1E81","1E83","1E85");
+addkernclasss("x","03BE","03C2","03C3","03C7");
+addkernclasss("y","03C5","03C8");
+addkernclasss("00FD","00FF","0177","0233","03B0","03CB","03CD",
+ "1EF3","1F50","1F51","1F52","1F53","1F54","1F55",
+ "1F56","1F57","1F7A","1F7B","1FE0","1FE1","1FE2",
+ "1FE3","1FE6","1FE7");
+addkernclasss("z","03B6");
+addkernclasss("017A","017C","017E");
+addkernclasss("03B4","03BB"); % delta, lambda
+addkernclasss("002C","002E"); % comma, period
+addkernclasss("0030","0036","0038"); % 0, 6, 8
+addkernclasss("0031"); % 1
+addkernclasss("0032"); % 2
+addkernclasss("0033"); % 3
+addkernclasss("0034"); % 4
+addkernclasss("0035"); % 5
+addkernclasss("0037"); % 7
+addkernclasss("0039"); % 9
addclasskern("A","T",-.5u#);
addclasskern("A","V",-.25u#);
-addclasskern("A","one",-.25u#);
-addclasskern("A","three",-.5u#);
-addclasskern("A","seven",-u#);
+addclasskern("A","0031",-.25u#);
+addclasskern("A","0033",-.5u#);
+addclasskern("A","0037",-u#);
addclasskern("B","C",.5u#);
addclasskern("B","T",-u#);
addclasskern("B","V",-.5u#);
addclasskern("B","c",.5u#);
-addclasskern("B","cacute",.5u#);
-addclasskern("B","zero",.5u#);
-addclasskern("B","seven",-u#);
+addclasskern("B","00F2",.5u#);
+addclasskern("B","0030",.5u#);
+addclasskern("B","0037",-u#);
addclasskern("C","C",-.5u#);
-addclasskern("C","zero",-.5u#);
-addclasskern("C","one",-u#);
-addclasskern("C","four",-u#);
+addclasskern("C","0030",-.5u#);
+addclasskern("C","0031",-u#);
+addclasskern("C","0034",-u#);
addclasskern("D","C",u#);
addclasskern("D","S",.5u#); % make compatible with METAPOST-logo
addclasskern("D","T",-.5u#);
addclasskern("D","X",-.5u#);
addclasskern("D","c",.5u#);
-addclasskern("D","cacute",.5u#);
+addclasskern("D","00F2",.5u#);
addclasskern("D","s",.5u#);
-addclasskern("D","period",-u#);
-addclasskern("D","zero",.5u#);
-addclasskern("D","one",.5u#);
-addclasskern("D","two",.5u#);
-addclasskern("D","four",.5u#);
-addclasskern("D","nine",u#);
+addclasskern("D","015B",.5u#);
+addclasskern("D","002C",-u#);
+addclasskern("D","0030",.5u#);
+addclasskern("D","0031",.5u#);
+addclasskern("D","0032",.5u#);
+addclasskern("D","0034",.5u#);
+addclasskern("D","0039",u#);
addclasskern("F","C",-u#); % original
addclasskern("F","J",-3u#);
addclasskern("F","c",-u#);
-addclasskern("F","cacute",-u#);
+addclasskern("F","00F2",-u#);
addclasskern("F","j",-3u#);
-addclasskern("F","period",-3u#);
-addclasskern("F","zero",-u#);
-addclasskern("F","one",-.5u#);
-addclasskern("F","two",-.5u#);
-addclasskern("F","three",-.5u#);
-addclasskern("F","four",-u#);
-addclasskern("F","seven",-.5u#);
-addclasskern("J","period",-u#);
-addclasskern("J","three",-.5u#);
-addclasskern("J","four",-.5u#);
-addclasskern("K","C",-.5u#);
+addclasskern("F","0135",-u#);
+addclasskern("F","002C",-3u#);
+addclasskern("F","0030",-u#);
+addclasskern("F","0031",-.5u#);
+addclasskern("F","0032",-.5u#);
+addclasskern("F","0033",-.5u#);
+addclasskern("F","0034",-u#);
+addclasskern("F","0037",-.5u#);
+addclasskern("J","002C",-u#);
+addclasskern("J","0033",-.5u#);
+addclasskern("J","0034",-.5u#);
+%addclasskern("K","C",-.5u#);
addclasskern("K","t",-u#);
-addclasskern("K","one",-.5u#);
-addclasskern("K","two",.5u#);
-addclasskern("K","three",.5u#);
-addclasskern("K","four",-.5u#);
+addclasskern("K","0031",-.5u#);
+addclasskern("K","0032",.5u#);
+addclasskern("K","0033",.5u#);
+addclasskern("K","0034",-.5u#);
addclasskern("L","T",-2.5u#);
addclasskern("L","V",-2u#);
addclasskern("L","Y",-2u#);
addclasskern("L","t",-2.5u#);
-addclasskern("L","tcaron",-2.5u#);
+addclasskern("L","0165",-2.5u#);
addclasskern("L","v",-1.5u#);
+addclasskern("L","1E81",-1.5u#);
addclasskern("L","y",-1.5u#);
-addclasskern("L","ydieresis",-1.5u#);
-addclasskern("L","zero",.5u#);
-addclasskern("L","one",-u#);
-addclasskern("L","two",.5u#);
-addclasskern("L","three",.5u#);
-addclasskern("L","seven",-u#);
+addclasskern("L","00FD",-1.5u#);
+addclasskern("L","0030",.5u#);
+addclasskern("L","0031",-u#);
+addclasskern("L","0032",.5u#);
+addclasskern("L","0033",.5u#);
+addclasskern("L","0037",-u#);
addclasskern("P","C",u#); % original
addclasskern("P","J",-2u#);
addclasskern("P","V",-.25u#);
addclasskern("P","c",u#);
-addclasskern("P","cacute",u#);
+addclasskern("P","00F2",u#);
addclasskern("P","j",-2u#);
-addclasskern("P","period",-3u#);
-addclasskern("P","zero",.5u#);
-addclasskern("P","one",.5u#);
-addclasskern("P","two",-.5u#);
-addclasskern("P","three",-.5u#);
-addclasskern("P","four",-.5u#);
-addclasskern("P","seven",-.25u#);
-addclasskern("P","nine",u#);
-addclasskern("Thorn","T",-.5u#);
-addclasskern("Thorn","V",-.25u#);
-addclasskern("Thorn","X",-u#);
-addclasskern("Thorn","period",-3u#);
-addclasskern("Thorn","one",.5u#);
-addclasskern("Thorn","three",-u#);
-addclasskern("Thorn","seven",-.5u#);
+addclasskern("P","002C",-3u#);
+addclasskern("P","0030",.5u#);
+addclasskern("P","0031",.5u#);
+addclasskern("P","0032",-.5u#);
+addclasskern("P","0033",-.5u#);
+addclasskern("P","0034",-.5u#);
+addclasskern("P","0037",-.25u#);
+addclasskern("P","0039",u#);
+addclasskern("00DE","T",-.5u#);
+addclasskern("00DE","V",-.25u#);
+addclasskern("00DE","X",-u#);
+addclasskern("00DE","002C",-3u#);
+addclasskern("00DE","0031",.5u#);
+addclasskern("00DE","0033",-u#);
+addclasskern("00DE","0037",-.5u#);
addclasskern("Q","C",u#);
addclasskern("Q","S",.5u#);
addclasskern("Q","T",-.5u#);
addclasskern("Q","c",.5u#);
-addclasskern("Q","cacute",.5u#);
+addclasskern("Q","00F2",.5u#);
addclasskern("Q","s",.5u#);
-addclasskern("Q","zero",u#);
-addclasskern("Q","one",.5u#);
-addclasskern("Q","two",u#);
-addclasskern("Q","three",.5u#);
-addclasskern("Q","four",.5u#);
-addclasskern("Q","five",.5u#);
-addclasskern("Q","nine",u#);
+addclasskern("Q","015B",.5u#);
+addclasskern("Q","0030",u#);
+addclasskern("Q","0031",.5u#);
+addclasskern("Q","0032",u#);
+addclasskern("Q","0033",.5u#);
+addclasskern("Q","0034",.5u#);
+addclasskern("Q","0035",.5u#);
+addclasskern("Q","0039",u#);
addclasskern("R","C",u#);
-addclasskern("R","zero",u#);
-addclasskern("R","one",.5u#);
-addclasskern("R","two",.5u#);
-addclasskern("R","five",.5u#);
-addclasskern("R","nine",u#);
+addclasskern("R","0030",u#);
+addclasskern("R","0031",.5u#);
+addclasskern("R","0032",.5u#);
+addclasskern("R","0035",.5u#);
+addclasskern("R","0039",u#);
addclasskern("S","C",u#);
addclasskern("S","T",-.5u#); % make compatible with METAPOST-logo
addclasskern("S","c",.5u#);
-addclasskern("S","cacute",.5u#);
-addclasskern("S","zero",.5u#);
-addclasskern("S","three",-.5u#);
-addclasskern("S","seven",-.5u#);
+addclasskern("S","00F2",.5u#);
+addclasskern("S","0030",.5u#);
+addclasskern("S","0033",-.5u#);
+addclasskern("S","0037",-.5u#);
addclasskern("T","A",-.5u#); % original
addclasskern("T","C",-.5u#);
addclasskern("T","J",-2.5u#);
addclasskern("T","T",u#);
+addclasskern("T","0394",-1.5u#);
addclasskern("T","a",-1.5u#);
-addclasskern("T","abreve",-u#);
+addclasskern("T","00E0",-u#);
addclasskern("T","b",-1.5u#);
-addclasskern("T","dcaron",-u#);
+addclasskern("T","00E8",-u#);
addclasskern("T","c",-1.5u#);
-addclasskern("T","cacute",-u#);
+addclasskern("T","00F2",-u#);
addclasskern("T","j",-u#);
addclasskern("T","s",-1.5u#);
-addclasskern("T","sacute",-u#);
+addclasskern("T","015B",-u#);
addclasskern("T","t",-1.5u#);
-addclasskern("T","tcaron",-u#);
+addclasskern("T","0165",-u#);
addclasskern("T","u",-1.5u#);
-addclasskern("T","uhungarumlaut",-u#);
+addclasskern("T","00F9",-u#);
addclasskern("T","v",-1.5u#);
+addclasskern("T","1E81",-u#);
addclasskern("T","x",-1.5u#);
addclasskern("T","y",-1.5u#);
-addclasskern("T","ydieresis",-u#);
+addclasskern("T","00FD",-u#);
addclasskern("T","z",-1.5u#);
-addclasskern("T","zacute",-u#);
-addclasskern("T","period",-3u#);
-addclasskern("T","one",-.5u#);
-addclasskern("T","two",.5u#);
-addclasskern("T","three",.5u#);
-addclasskern("T","four",-u#);
-addclasskern("T","seven",u#);
+addclasskern("T","03B4",-1.5u#);
+addclasskern("T","017A",-u#);
+addclasskern("T","002C",-3u#);
+addclasskern("T","0031",-.5u#);
+addclasskern("T","0032",.5u#);
+addclasskern("T","0033",.5u#);
+addclasskern("T","0034",-u#);
+addclasskern("T","0037",u#);
addclasskern("V","A",-.25u#);
addclasskern("V","C",-.25u#);
addclasskern("V","J",-u#);
addclasskern("V","V",u#);
addclasskern("V","a",-u#);
-addclasskern("V","abreve",-.5u#);
+addclasskern("V","00E0",-.5u#);
addclasskern("V","b",-.5u#);
addclasskern("V","c",-u#);
-addclasskern("V","cacute",-.5u#);
+addclasskern("V","00F2",-.5u#);
addclasskern("V","j",-u#);
+addclasskern("V","0135",-.5u#);
addclasskern("V","s",-u#);
-addclasskern("V","sacute",-.5u#);
+addclasskern("V","015B",-.5u#);
addclasskern("V","u",-.5u#);
addclasskern("V","x",-.5u#);
-addclasskern("V","ydieresis",.5u#);
+addclasskern("V","00FD",.5u#);
addclasskern("V","z",-.5u#);
-addclasskern("V","period",-3u#);
-addclasskern("V","zero",-.25u#);
-addclasskern("V","four",-u#);
+addclasskern("V","002C",-3u#);
+addclasskern("V","0030",-.25u#);
+addclasskern("V","0034",-u#);
addclasskern("Y","C",-.5u#);
addclasskern("Y","J",-u#);
addclasskern("Y","j",-u#);
-addclasskern("Y","period",-u#);
-addclasskern("Y","zero",-.5u#);
-addclasskern("Y","two",-u#);
-addclasskern("Y","three",-.5u#);
-addclasskern("Y","four",-u#);
-addclasskern("Y","five",-.5u#);
-addclasskern("Y","seven",-.5u#);
+addclasskern("Y","0135",-.5u#);
+addclasskern("Y","002C",-u#);
+addclasskern("Y","0030",-.5u#);
+addclasskern("Y","0032",-u#);
+addclasskern("Y","0033",-.5u#);
+addclasskern("Y","0034",-u#);
+addclasskern("Y","0035",-.5u#);
+addclasskern("Y","0037",-.5u#);
addclasskern("Z","C",-.5u#);
-addclasskern("Z","zero",-.5u#);
-addclasskern("Z","one",-u#);
-addclasskern("Z","two",-.5u#);
-addclasskern("Z","three",-.5u#);
-addclasskern("Z","four",-u#);
-addclasskern("Z","five",-.5u#);
-addclasskern("Z","seven",-.5u#);
-addclasskern("Z","nine",-.5u#);
+addclasskern("Z","0030",-.5u#);
+addclasskern("Z","0031",-u#);
+addclasskern("Z","0032",-.5u#);
+addclasskern("Z","0033",-.5u#);
+addclasskern("Z","0034",-u#);
+addclasskern("Z","0035",-.5u#);
+addclasskern("Z","0037",-.5u#);
+addclasskern("Z","0039",-.5u#);
+addclasskern("0394","T",-.75u#);
+addclasskern("0394","Y",-u#);
+addclasskern("0394","0031",-.5u#);
+addclasskern("0394","0033",-.5u#);
+addclasskern("0394","0037",-u#);
+addclasskern("0394","t",-.5u#);
+addclasskern("0394","y",-.75u#);
+addclasskern("0394","00FD",-.75u#);
+
addclasskern("a","t",-.5u#);
-addclasskern("a","tcaron",-.5u#);
+addclasskern("a","0165",-.5u#);
addclasskern("a","v",-.25u#);
+addclasskern("a","1E81",-.25u#);
addclasskern("b","c",.5u#);
-addclasskern("b","cacute",.5u#);
+addclasskern("b","00F2",.5u#);
addclasskern("b","t",-u#);
-addclasskern("b","tcaron",-u#);
+addclasskern("b","0165",-u#);
addclasskern("b","v",-.5u#);
+addclasskern("b","1E81",-.5u#);
addclasskern("c","c",-.5u#);
-addclasskern("c","cacute",-.5u#);
-addclasskern("c","four",-.5u#);
+addclasskern("c","00F2",-.5u#);
+addclasskern("c","0034",-.5u#);
addclasskern("d","c",u#);
-addclasskern("d","cacute",u#);
+addclasskern("d","00F2",u#);
addclasskern("d","s",.5u#); % make compatible with METAPOST-logo
+addclasskern("d","015B",.5u#);
addclasskern("d","t",-.5u#);
-addclasskern("d","tcaron",-.5u#);
+addclasskern("d","0165",-.5u#);
addclasskern("d","x",-.5u#);
-addclasskern("d","period",-u#);
-addclasskern("d","zero",.5u#);
-addclasskern("d","two",.5u#);
-addclasskern("d","four",.5u#);
+addclasskern("d","002C",-u#);
+addclasskern("d","0030",.5u#);
+addclasskern("d","0032",.5u#);
+addclasskern("d","0034",.5u#);
addclasskern("f","c",-u#);
-addclasskern("f","cacute",-u#);
+addclasskern("f","00F2",-u#);
addclasskern("f","j",-3u#);
-addclasskern("f","period",-3u#);
-addclasskern("f","two",-u#);
-addclasskern("f","four",-.5u#);
-addclasskern("j","period",-u#);
-addclasskern("k","c",-.5u#);
-addclasskern("k","cacute",-.5u#);
-addclasskern("k","zero",.5u#);
+addclasskern("f","0135",-3u#);
+addclasskern("f","002C",-3u#);
+addclasskern("f","0032",-u#);
+addclasskern("f","0034",-.5u#);
+addclasskern("j","002C",-u#);
+%addclasskern("k","c",-.5u#);
+%addclasskern("k","00F2",-.5u#);
+addclasskern("k","0030",.5u#);
addclasskern("l","t",-2.5u#);
-addclasskern("l","tcaron",-2.5u#);
+addclasskern("l","0165",-2.5u#);
addclasskern("l","v",-1.5u#);
+addclasskern("l","1E81",-1.5u#);
addclasskern("l","y",-1.5u#);
-addclasskern("l","ydieresis",-1.5u#);
+addclasskern("l","00FD",-1.5u#);
addclasskern("p","c",u#);
+addclasskern("p","00F2",u#);
addclasskern("p","j",-2u#);
+addclasskern("p","0135",-2u#);
addclasskern("p","v",-.25u#);
-addclasskern("p","period",-3u#);
-addclasskern("thorn","t",-.5u#);
-addclasskern("thorn","tcaron",-.5u#);
-addclasskern("thorn","v",-.25u#);
-addclasskern("thorn","x",-u#);
-addclasskern("thorn","period",-3u#);
+addclasskern("p","1E81",-.25u#);
+addclasskern("p","002C",-3u#);
+addclasskern("00FE","t",-.5u#);
+addclasskern("00FE","0165",-.5u#);
+addclasskern("00FE","v",-.25u#);
+addclasskern("00FE","0135",-.25u#);
+addclasskern("00FE","x",-u#);
+addclasskern("00FE","002C",-3u#);
addclasskern("q","t",-.5u#);
-addclasskern("q","period",-u#);
-addclasskern("q","zero",u#);
-addclasskern("q","two",u#);
-addclasskern("q","four",.5u#);
-addclasskern("q","five",.5u#);
+addclasskern("q","002C",-u#);
+addclasskern("q","0030",u#);
+addclasskern("q","0032",u#);
+addclasskern("q","0034",.5u#);
+addclasskern("q","0035",.5u#);
addclasskern("r","c",u#);
-addclasskern("r","cacute",u#);
+addclasskern("r","00F2",u#);
addclasskern("s","t",-.5u#); % make compatible with METAPOST-logo
+addclasskern("s","0165",-.5u#);
addclasskern("s","c",.5u#);
-addclasskern("s","cacute",.5u#);
+addclasskern("s","00F2",.5u#);
addclasskern("t","a",-.5u#); % original
-addclasskern("t","abreve",-.5u#);
+addclasskern("t","00E0",-.5u#);
addclasskern("t","c",-.5u#);
-addclasskern("t","cacute",-.5u#);
+addclasskern("t","00F2",-.5u#);
addclasskern("t","j",-2.5u#);
+addclasskern("t","0135",-2u#);
addclasskern("t","t",u#);
-addclasskern("t","tcaron",u#);
-addclasskern("t","period",-3u#);
-addclasskern("t","zero",.5u#);
+addclasskern("t","0165",u#);
+addclasskern("t","002C",-3u#);
+addclasskern("t","0030",.5u#);
addclasskern("v","a",-.25u#);
-addclasskern("v","abreve",-.25u#);
+addclasskern("v","00E0",-.25u#);
addclasskern("v","c",-.25u#);
-addclasskern("v","cacute",-.25u#);
+addclasskern("v","00F2",-.25u#);
addclasskern("v","j",-u#);
+addclasskern("v","0135",-u#);
addclasskern("v","v",u#);
-addclasskern("v","period",-3u#);
-addclasskern("v","zero",.5u#);
+addclasskern("v","1E81",u#);
+addclasskern("v","002C",-3u#);
+addclasskern("v","0030",.5u#);
addclasskern("y","j",-u#);
-addclasskern("y","period",-u#);
-addclasskern("y","zero",-.5u#);
-addclasskern("y","four",-.5u#);
-
-addclasskern("zero","C",.5u#);
-addclasskern("zero","S",.5u#);
-addclasskern("zero","V",-.5u#);
-addclasskern("zero","c",.5u#);
-addclasskern("zero","cacute",.5u#);
-addclasskern("zero","j",.5u#);
-addclasskern("zero","s",.5u#);
-addclasskern("zero","sacute",.5u#);
-addclasskern("zero","t",.5u#);
-addclasskern("zero","tcaron",.5u#);
-addclasskern("zero","v",.5u#);
-addclasskern("zero","x",.5u#);
-addclasskern("zero","y",-.5u#);
-addclasskern("zero","ydieresis",-.5u#);
-addclasskern("zero","period",-u#);
-addclasskern("two","U",-.25u#);
-addclasskern("two","V",-.5u#);
-addclasskern("two","Y",-.5u#);
-addclasskern("two","j",.5u#);
-addclasskern("two","t",.5u#);
-addclasskern("two","tcaron",.5u#);
-addclasskern("two","y",-.5u#);
-addclasskern("two","ydieresis",-.5u#);
-addclasskern("four","C",.5u#);
-addclasskern("four","V",-.5u#);
-addclasskern("four","Y",-.5u#);
-addclasskern("four","c",.5u#);
-addclasskern("four","cacute",.5u#);
-addclasskern("four","y",-.5u#);
-addclasskern("four","ydieresis",-.5u#);
-addclasskern("four","z",-.5u#);
-addclasskern("five","y",-.5u#);
-addclasskern("five","ydieresis",-.5u#);
-addclasskern("seven","t",.5u#);
-addclasskern("seven","tcaron",.5u#);
-
-%remember: ligatures will overwrite existing kerning pairs
-addlig("f","i","fi");
-addlig("f","f","ff");
-addlig("f","l","fl");
-addlig("ff","i","ffi");
-addlig("ff","l","ffl");
-addlig("quoteleft","quoteleft","quotedblleft");
-addlig("quoteright","quoteright","quotedblright");
-addlig("comma","comma","quotedblbase");
-addlig("hyphen","hyphen","endash");
-addlig("endash","hyphen","emdash");
-addlig("less","less","guillemotleft");
-addlig("greater","greater","guillemotright");
-addlig("exclam","quoteleft","exclamdown");
-addlig("question","quoteleft","questiondown");
-
-writeligtable;
+addclasskern("y","0135",-u#);
+addclasskern("y","002C",-u#);
+addclasskern("y","0030",-.5u#);
+addclasskern("y","0034",-.5u#);
+addclasskern("03B4","0031",-.25u#);
+addclasskern("03B4","0033",-.25u#);
+addclasskern("03B4","0037",-.5u#);
+addclasskern("03B4","t",-.25u#);
+addclasskern("03B4","y",-.5u#);
+addclasskern("03B4","00FD",-.5u#);
+
+addclasskern("0030","C",.5u#);
+addclasskern("0030","S",.5u#);
+addclasskern("0030","V",-.5u#);
+addclasskern("0030","c",.5u#);
+addclasskern("0030","00F2",.5u#);
+addclasskern("0030","j",.5u#);
+addclasskern("0030","s",.5u#);
+addclasskern("0030","015B",.5u#);
+addclasskern("0030","t",.5u#);
+addclasskern("0030","0165",.5u#);
+addclasskern("0030","v",.5u#);
+addclasskern("0030","x",.5u#);
+addclasskern("0030","y",-.5u#);
+addclasskern("0030","00FD",-.5u#);
+addclasskern("0030","002C",-u#);
+addclasskern("0032","U",-.25u#);
+addclasskern("0032","V",-.5u#);
+addclasskern("0032","Y",-.5u#);
+addclasskern("0032","j",.5u#);
+addclasskern("0032","0135",.5u#);
+addclasskern("0032","t",.5u#);
+addclasskern("0032","0165",.5u#);
+addclasskern("0032","y",-.5u#);
+addclasskern("0032","00FD",-.5u#);
+addclasskern("0034","C",.5u#);
+addclasskern("0034","V",-.5u#);
+addclasskern("0034","Y",-.5u#);
+addclasskern("0034","c",.5u#);
+addclasskern("0034","00F2",.5u#);
+addclasskern("0034","y",-.5u#);
+addclasskern("0034","00FD",-.5u#);
+addclasskern("0034","z",-.5u#);
+addclasskern("0035","y",-.5u#);
+addclasskern("0035","00FD",-.5u#);
+addclasskern("0037","t",.5u#);
+addclasskern("0037","0165",.5u#);
+
+%------ligatures-------
+addligature("FB00","f","f");
+addligature("FB01","f","i");
+addligature("FB02","f","l");
+addligature("FB03","f","f","i");
+addligature("FB03","FB00","i");
+addligature("FB04","f","f","l");
+addligature("FB03","FB00","l");
bye.
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbc40.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbc40.mf
index 641e8825fce..9a0a62edccd 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbc40.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbc40.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold condensed, 40pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldCondensed40";
+ font_fullname "Fetamont Bold Condensed40";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 3;
+ font_range(39.5,72,15);
+fi
font_identifier:="FFMBC";
font_size 40pt#; % the "design size" of this font
ht#:=250/9pt#; % height of characters (=4*cmssdc10)
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbco40.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbco40.mf
index 2407328f518..952e81b1d3e 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbco40.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbco40.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold condensed oblique, 40pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldCondensedOblique40";
+ font_fullname "Fetamont Bold Condensed Oblique40";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 3;
+ font_range(39.5,72,16);
+fi
font_identifier:="FFMBCO";
font_size 40pt#; % the "design size" of this font
ht#:=250/9pt#; % height of characters (=4*cmssdc10)
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo10.mf
index 968ed18d1ed..688182af4c0 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldOblique";
+ font_fullname "Fetamont Bold Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(9.5,72,6);
+fi
font_identifier:="FFMBO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo8.mf
index 0cf707753bf..af4fff298d6 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo8.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold oblique, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldOblique8";
+ font_fullname "Fetamont Bold Oblique 8";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(5,8.4,6);
+fi
font_identifier:="FFMBO";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo9.mf
index 3440d305359..857f762097b 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbo9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbo9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (bold oblique, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldOblique9";
+ font_fullname "Fetamont Bold Oblique 9";
+ font_familyname "Fetamont";
+ font_os_weight 700;
+ font_os_width 5;
+ font_range(8.5,9.4,6);
+fi
font_identifier:="FFMBO";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbw10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbw10.mf
index ad9d98fe2d7..20c9f2d5f3e 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbw10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbw10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (bold script, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldScript";
+ font_fullname "Fetamont Bold Script";
+ font_familyname "Fetamont Script";
+ font_os_weight 700;
+ font_os_width 5;
+fi
font_identifier:="FFMBW";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -17,7 +24,8 @@ py#:=.6px#; % vertical pen thickness
dotincr:=.4; % increasement of dot diameter
prot:=60; % rotation angle of the pen
slant:=0; % slanting amount
-craziness:=.1pt; % degree of haphazard variation
+craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmbwo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmbwo10.mf
index b2f72d554dd..2c250a82e48 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmbwo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmbwo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (bold script oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-BoldScriptOblique";
+ font_fullname "Fetamont Bold Script Oblique";
+ font_familyname "Fetamont Script";
+ font_os_weight 700;
+ font_os_width 5;
+fi
font_identifier:="FFMBWO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=1/4; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmc10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmc10.mf
index 5d91fd9b7bf..1b22cada7e0 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmc10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmc10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (condensed, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Condensed";
+ font_fullname "Fetamont Condensed";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 3;
+fi
font_identifier:="FFMC";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_nonscalable.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_nonscalable.mf
deleted file mode 100644
index 6be204d2fc6..00000000000
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_nonscalable.mf
+++ /dev/null
@@ -1,1167 +0,0 @@
-% accents
-
-ffmchar("acute",6,x_ht#+acc_ht#,0);
-lft x1=.2w+noise;
-rt x2=w+noise;
-bot y1=.2[x_ht,h]+noise;
-top y2=h+o+noise;
-draw z1--z2;
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2);
-endchar;
-
-ffmchar("grave",6,x_ht#+acc_ht#,0);
-lft x1=noise;
-rt x2=.8w+noise;
-top y1=h+o+noise;
-bot y2=.2[x_ht,h]+noise;
-draw z1--z2;
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2);
-endchar;
-
-ffmchar("dieresis",8,x_ht#+acc_ht#,0);
-x1=x2=.5w-max(1.8u,(1+dotincr)*.7px)+noise;
-x3=x4=.5w+max(1.8u,(1+dotincr)*.7px)+noise;
-bot y1=.3[x_ht,h]+noise;
-y2=y1+dotincr*py;
-bot y3=.3[x_ht,h]+noise;
-y4=y3+dotincr*py;
-draw dotcircle(z1,z2);
-draw dotcircle(z3,z4);
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("circumflex",7,x_ht#+acc_ht#,0);
-lft x1=noise;
-x2=.5w+noise;
-rt x3=w+noise;
-bot y1=.2[x_ht,h]+noise;
-bot y3=.2[x_ht,h]+noise;
-top y2=h+o+noise;
-draw z1--z2--z3;
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3);
-endchar;
-
-ffmchar("tilde",9,x_ht#+acc_ht#,0);
-lft x1=eps+noise;
-x2=.3w+noise;
-x4=.7w+noise;
-x3=.5w+noise;
-rt x5=w-eps+noise;
-bot y1=.2[x_ht,h]+noise;
-bot y4=.2[x_ht,h]+noise;
-top y2=h+noise;
-top y5=h+noise;
-y3=.6[x_ht,h]+noise;
-if (1.3px>(top y2-bot y1)) or (4.5px>w):
- draw z1{randup}..tension 2..z2{randrt}
- ..tension 2..z4{randrt}
- ..tension 2..z5{randup};
-else:
- draw z1{randup}...z2{randrt}...z3
- ...z4{randrt}...z5{randup};
-fi
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("hungarumlaut",11,x_ht#+acc_ht#,0);
-x2=.2w+noise;
-x3=.8w+noise;
-x1=.4w+noise;
-x4=.6w+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-bot y2=.2[x_ht,h]+noise;
-bot y4=.2[x_ht,h]+noise;
-draw z1--z2;
-draw z3--z4;
-charanchortops_[charcode]=(.4w,x_ht);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("ring",5,x_ht#+acc_ht#,0);
-lft x3=-o+noise;
-rt x1=w+o+noise;
-x2=.5w+noise;
-x4=.5w+noise;
-top y4=x_ht+o; %no noise because of Aring
-top y2=h+o+noise;
-y1=.5[y2,y4]+noise;
-y3=.5[y2,y4]+noise;
-draw full(z1,randup,z2,-randrt,z3,-randup,z4,randrt);
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("caron",7,x_ht#+acc_ht#,0);
-lft x1=noise;
-x2=.5w+noise;
-rt x3=w+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-bot y2=.2[x_ht,h]+noise;
-draw z1--z2--z3;
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3);
-endchar;
-
-ffmchar("breve",7,x_ht#+acc_ht#,0);
-lft x1=noise;
-x2=.5w+noise;
-rt x3=w+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-bot y2=.2[x_ht,h]+noise;
-draw half(z1,-randup,z2,randrt,z3,randup);
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2,3);
-endchar;
-
-ffmchar("macron",6,x_ht#+acc_ht#,0);
-lft x1=noise;
-rt x2=w+noise;
-y1=.5[x_ht,h]+noise;
-y2=.5[x_ht,h]+noise;
-draw z1--z2;
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2);
-endchar;
-
-ffmchar("dotaccent",4,x_ht#+acc_ht#,0);
-x1=x2=.5w+noise;
-bot y1=.5[x_ht,h]+noise;
-y2=y1+dotincr*py;
-draw dotcircle(z1,z2);
-charanchortops_[charcode]=(.5w,x_ht);
-labels(1,2);
-endchar;
-
-ffmchar("cedilla",4,x_ht#,acc_depth#);
-x1=.5w; %no noise!
-lft x2=.2w+.5noise;
-rt x3=w+o+.5noise;
-x4=x2;
-lft x5=0;
-bot y1=0; %no noise!
-y2=.4[y1,y4];
-y3=.7[y1,y4];
-bot y4=noise-d;
-z5=z4+whatever*randrt;
-draw z5--z4
- & half(z4,z4-z5,z3,randup,z2,-randrt)
- & z2--z1;
-charanchorbots_[charcode]=z1;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("ogonek",4,x_ht#,acc_depth#);
-x1=.6w; %no noise!
-lft x2=-o+.5noise;
-rt x4=w+.5noise;
-x3=x4-.5u;
-bot y1=0; %no noise!
-y2=.7[y1,y4];
-bot y3=noise-d;
-z4=z3+whatever*randrt;
-pair randir;
-randir:=-randup;
-draw z1..tension infinity and 1..z2{randir}
- & arc(z2,randir,z3,randrt)
- & z3--z4;
-charanchorbots_[charcode]=z1;
-labels(1,2,3,4,5);
-endchar;
-
-% digits
-
-ffmchar("zero",11,ht#,0);
-italcorr .6ht#*slant;
-x1=.5w+noise;
-x2=good.x(2u+s+noise);
-x3=.5w+noise;
-w-x4=good.x(2u+s+noise);
-top y1=h+o+noise;
-y2=barheight+noise;
-bot y3=noise-o;
-y4=barheight+noise;
-draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("one",11,ht#,0);
-italcorr .7ht#*slant;
-x1=leftstemloc+noise;
-w-x2=good.x(4.5u+s+noise);
-w-x3=good.x(4.5u+s+noise);
-y1=.618h+noise;
-top y2=h+o+noise;
-bot y3=noise-o;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("two",11,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc-ho+noise;
-x5=good.x(2u+s+noise);
-x2=.5[x1,x6]+noise;
-w-x3=leftstemloc+noise;
-x4=.5[x1,x6]+noise;
-w-x6=leftstemloc-ho+noise;
-top y2=h+noise;
-y3=.5[y4,y2]+noise;
-y4=barheight+noise;
-bot y5=noise;
-bot y6=noise;
-z1=z2+whatever*randrt;
-pair randir;
-randir:=-randrt;
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,randir)
- & arc(z4,randir,z5,-randup)
- & z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("three",11,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc-ho+noise;
-x8=leftstemloc-ho+noise;
-w-x3=good.x(2u+s+noise);
-w-x6=good.x(2.5u+s+noise);
-x5=.618[x2,x1]+noise;
-x2=.55w+noise;
-x4=.55w+noise;
-x7=.55w+noise;
-bot y1=noise;
-bot y2=noise;
-top y7=h+noise;
-top y8=h+noise;
-y4=barheight+.5noise;
-y5=barheight+.5noise;
-y3=.5[y2,y4]+noise;
-y6=.5[y4,y7]+noise;
-draw z1--z2
- & half(z2,z2-z1,z3,randup,z4,z5-z4)
- & z4--z5;
-draw half(z4,z4-z5,z6,randup,z7,z8-z7)
- & z7--z8;
-labels(1,2,3,4,5,6,7,8);
-endchar;
-
-ffmchar("four",11,ht#,0);
-italcorr .7ht#*slant;
-x2=good.x(1.5u+s+noise);
-w-rt x3=eps+noise;
-w-x4=good.x(3.5u+s+noise);
-w-x5=good.x(3.5u+s+noise);
-rt x1+.5u=lft x4+noise;
-y4=.618h+noise;
-top y1=h+o+noise;
-bot y5=noise-o;
-y2=.618[y4,y5]+noise;
-y3=.618[y4,y5]+noise;
-draw z1--z2--z3;
-draw z4--z5;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("five",11,ht#,0);
-italcorr .8ht#*slant;
-x5=leftstemloc+noise;
-x6=leftstemloc+noise;
-x7=w-x5+noise;
-x1=leftstemloc-ho+noise;
-w-x3=good.x(2u+s+noise);
-x2=.5[x5,x3]+noise;
-x4=.5[x5,x3]+noise;
-bot y1=noise;
-bot y2=noise;
-top y6=h+noise;
-top y7=h+noise;
-y4=barheight+.5noise;
-y5=barheight+.5noise;
-y3=.5[y2,y4]+noise;
-draw z1--z2
- & half(z2,z2-z1,z3,randup,z4,z5-z4)
- & z4--z5--z6--z7;
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("six",11,ht#,0);
-italcorr .8ht#*slant;
-x1=.5[x2,x4]+noise;
-x2=good.x(2u+s+noise);
-x3=.5[x2,x4]+noise;
-w-x4=good.x(1.75u+s+noise);
-x5=.618[x2,x4]+noise;
-w-x6=leftstemloc+noise;
-y1=barheight+noise;
-y2=.5[y1,y3]+noise;
-bot y3=noise-o;
-y4=.5[y1,y3]+noise;
-top y5=h+noise;
-z6=z5+whatever*randrt;
-pair randir;
-randir:=randup;
-draw full(z1,-randrt,z2,-randir,z3,randrt,z4,randup);
-draw arc(z2,randir,z5,z6-z5)
- & z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("seven",11,ht#,0);
-italcorr ht#*slant;
-x1=good.x(2u+s+noise);
-w-x2=good.x(2u+s+noise);
-x3=.618[x2,x1]+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y3=noise-o;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("eight",11,ht#,0);
-italcorr .7ht#*slant;
-x1=.5w+noise;
-x3=.5w+noise;
-x6=.5w+noise;
-x2=good.x(1.5u+s+noise);
-w-x4=good.x(1.5u+s+noise);
-x7=.2[x2,x1]+noise;
-w-x5=.2[x2,x1]+noise;
-y1=barheight+noise;
-bot y3=noise-o;
-top y6=h+o+noise;
-y2=.5[y1,y3]+noise;
-y4=.5[y1,y3]+noise;
-y7=.5[y1,y6]+noise;
-z5=z7+whatever*(z4-z2);
-pair randir;
-randir:=randrt;
-draw full(z1,-randir,z2,-randup,z3,randrt,z4,randup);
-draw full(z1,randir,z5,randup,z6,-randrt,z7,-randup);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("nine",11,ht#,0);
-italcorr .7ht#*slant;
-x1=.5[x2,x4]+noise;
-x2=good.x(1.75u+s+noise);
-x3=.5[x2,x4]+noise;
-w-x4=good.x(2u+s+noise);
-x5=.618[x4,x2]+noise;
-x6=leftstemloc+noise;
-top y1=h+o+noise;
-y2=.5[y1,y3]+noise;
-y4=.5[y1,y3]+noise;
-bot y5=noise;
-y3=barheight+noise;
-z6=z5+whatever*randrt;
-pair randir;
-randir:=randup;
-draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randir);
-draw arc(z4,-randir,z5,z6-z5)
- & z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-% punctation
-
-ffmchar("visiblespace",6,ht#,comma_depth#);
-lft x1=good.x(.5u+noise);
-lft x2=good.x(.5u+noise);
-rt x3=good.x(w-.5u+noise);
-rt x4=good.x(w-.5u+noise);
-top y1=o+noise;
-top y4=o+noise;
-bot y2=noise-d;
-bot y3=noise-d;
-draw z1--z2--z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("period",5,x_ht#,0);
-x1=x2=.5w+noise;
-bot y1=noise-o;
-y2=y1+dotincr*py;
-draw dotcircle(z1,z2);
-labels(1,2);
-endchar;
-
-ffmchar("colon",5,x_ht#,0);
-italcorr .8barheight#*slant;
-x1=x2=.5w+noise;
-x3=x4=.5w+noise;
-bot y1=noise-o;
-y2=y1+dotincr*py;
-y3=y4-dotincr*py=barheight+noise;
-draw dotcircle(z1,z2);
-draw dotcircle(z3,z4);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("comma",6,x_ht#,comma_depth#);
-x1=leftstemloc;
-x2=w-x1;
-top y2=.382barheight;
-bot y1=-d;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("semicolon",6,x_ht#,comma_depth#);
-italcorr barheight#*slant;
-x1=leftstemloc+noise;
-w-x2=leftstemloc+noise;
-w-x3=w-x4=leftstemloc+noise;
-y3=y4-dotincr*py=barheight;
-top y2=.382y3;
-bot y1=-d;
-draw z1--z2;
-draw dotcircle(z3,z4);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("exclam",5,ht#,0);
-italcorr .8ht#*slant;
-x1=x2=.5w+noise;
-x3=.5w+noise;
-x4=.5w+noise;
-bot y1=noise-o;
-y2=y1+dotincr*py;
-top y4=h+o+noise;
-bot y3=max(.618barheight,top y2+eps)+noise;
-draw dotcircle(z1,z2);
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("question",12,ht#,0);
-italcorr .8ht#*slant;
-x1=good.x(1.5u+s+noise);
-w-x3=good.x(2u+s+noise);
-x5=.618[x3,x1]+noise;
-x2=.618[x1,x3]+noise;
-x4=.618[x1,x3]+noise;
-x6=x7=.618[x3,x1]+noise;
-top y1=h+noise;
-top y2=h+noise;
-y4=barheight+noise;
-y3=.5[y2,y4]+noise;
-bot y6=noise-o;
-y7=y6+dotincr*py;
-bot y5=max(.618y4,top y7+eps)+noise;
-pair randir;
-randir:=-randrt;
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,randir)
- & arc(z4,randir,z5,-randup);
-draw dotcircle(z6,z7);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("parenleft",8,ht#,comma_depth#);
-italcorr .8ht#*slant;
-x2=good.x(1.5u+s+noise);
-w-x1=leftstemloc-ho+noise;
-w-x3=leftstemloc-ho+noise;
-top y1=h+o+noise;
-bot y3=noise-o-d;
-y2=.5[-d,h]+noise;
-draw half(z1,-randrt,z2,-randup,z3,randrt);
-labels(1,2,3);
-endchar;
-
-ffmchar("parenright",8,ht#,comma_depth#);
-italcorr .8ht#*slant;
-w-x2=good.x(1.5u+s+noise);
-x1=leftstemloc-ho+noise;
-x3=leftstemloc-ho+noise;
-top y1=h+o+noise;
-bot y3=noise-o-d;
-y2=.5[-d,h]+noise;
-draw half(z1,randrt,z2,-randup,z3,-randrt);
-labels(1,2,3);
-endchar;
-
-ffmchar("hyphen",6,x_ht#,0);
-italcorr .618x_ht#*slant;
-lft x1=noise;
-rt x2=w+noise;
-y1=.618h+noise;
-y2=.618h+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("emdash",18,x_ht#,0);
-italcorr .618x_ht#*slant;
-lft x1=noise;
-rt x2=w+noise;
-y1=.618h+noise;
-y2=.618h+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("endash",9,x_ht#,0);
-italcorr .618x_ht#*slant;
-lft x1=noise;
-rt x2=w+noise;
-y1=.618h+noise;
-y2=.618h+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("cwm",0,x_ht#,0);
-endchar;
-
-ffmchar("quotedbl",8,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=w-leftstemloc+noise;
-x4=w-leftstemloc+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-y2=.5[barheight,x_ht]+noise;
-y4=.5[barheight,x_ht]+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("quoteleft",5,ht#,0);
-italcorr ht#*slant;
-x1=.4w+noise;
-x2=.6w+noise;
-top y1=h+o+noise;
-y2=.5[barheight,x_ht]+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("quoteright",5,ht#,0);
-italcorr ht#*slant;
-x1=.4w+noise;
-x2=.6w+noise;
-top y2=h+o+noise;
-y1=.5[barheight,x_ht]+noise;
-draw z1--z2;
-charanchortoprights_[charcode]=(.5w,h);
-labels(1,2);
-endchar;
-
-ffmchar("quotedblleft",6,ht#,0);
-italcorr ht#*slant;
-x1=.2w+noise;
-x4=.8w+noise;
-x2=.3w+noise;
-x3=.7w+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-y2=.5[barheight,x_ht]+noise;
-y4=.5[barheight,x_ht]+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("quotedblright",6,ht#,0);
-italcorr ht#*slant;
-x2=.2w+noise;
-x3=.8w+noise;
-x1=.3w+noise;
-x4=.7w+noise;
-top y1=h+o+noise;
-top y3=h+o+noise;
-y2=.5[barheight,x_ht]+noise;
-y4=.5[barheight,x_ht]+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("quotesinglbase",3,x_ht#,comma_depth#);
-x1=.4w+noise;
-x2=.6w+noise;
-bot y1=noise-d-o;
-y2=-d+ht-.5[barheight,x_ht]+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("quotedblbase",6,x_ht#,comma_depth#);
-x2=.3w+noise;
-x3=.7w+noise;
-x1=.2w+noise;
-x4=.8w+noise;
-bot y1=noise-d-o;
-bot y3=noise-d-o;
-y2=-d+ht-.5[barheight,x_ht]+noise;
-y4=-d+ht-.5[barheight,x_ht]+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("guilsinglleft",7,x_ht#,0);
-italcorr x_ht#*slant;
-x1=good.x(w-2u-s+noise);
-x2=good.x(2u+s+noise);
-x3=good.x(w-2u-s+noise);
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("guilsinglright",7,x_ht#,0);
-italcorr .7x_ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-x3=good.x(2u+s+noise);
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("guillemotleft",10,x_ht#,0);
-italcorr x_ht#*slant;
-x1=.4w+noise;
-x2=good.x(2u+s+noise);
-x3=.4w+noise;
-x4=good.x(w-2u-s+noise);
-x5=.6w+noise;
-x6=good.x(w-2u-s+noise);
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-top y4=h+o+noise;
-bot y6=noise;
-y5=.5h+noise;
-draw z1--z2--z3;
-draw z4--z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("guillemotright",10,x_ht#,0);
-italcorr .7x_ht#*slant;
-x1=good.x(2u+s+noise);
-x2=.4w+noise;
-x3=good.x(2u+s+noise);
-x4=.6w+noise;
-x5=good.x(w-2u-s+noise);
-x6=.6w+noise;
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-top y4=h+o+noise;
-bot y6=noise;
-y5=.5h+noise;
-draw z1--z2--z3;
-draw z4--z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("percent",16,ht#,0);
-italcorr .8ht#*slant;
-x5=good.x(1.5u+s+noise);
-w-x7=good.x(1.5u+s+noise);
-x1=.2w+noise;
-x2=.8w+noise;
-x3=6.5u+s+noise;
-x4=4u+s+noise;
-x6=4u+s+noise;
-w-x8=4u+s+noise;
-w-x9=6.5u+s+noise;
-w-x10=4u+s+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-y3=.8h+noise;
-top y4=h+o+noise;
-y5=.8h+noise;
-bot y6=.6h-o+noise;
-y7=.2h+noise;
-top y8=.4h+o+noise;
-y9=.2h+noise;
-bot y10=noise-o;
-draw z1--z2;
-draw full(z3,randup,z4,-randrt,z5,-randup,z6,randrt);
-draw full(z7,randup,z8,-randrt,z9,-randup,z10,randrt);
-labels(1,2,3,4,5,6,7,8,9,10);
-endchar;
-
-ffmchar("perthousandzero",8,ht#,0);
-x3=good.x(1.5u+s+noise);
-w-x1=good.x(1.5u+s+noise);
-x2=.5w+noise;
-x4=.5w+noise;
-y1=.2h+noise;
-top y2=.4h+o+noise;
-y3=.2h+noise;
-bot y4=noise-o;
-draw full(z1,randup,z2,-randrt,z3,-randup,z4,randrt);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("slash",10,ht#,comma_depth#);
-italcorr ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-bot y1=noise-d-o;
-top y2=h+o+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("plus",15,x_ht#,0);
-italcorr .5x_ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-x3=.5w+noise;
-x4=.5w+noise;
-y1=.5h+noise;
-y2=.5h+noise;
-y3=noise-o;
-y4=h+o+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("equal",15,x_ht#,0);
-italcorr .8x_ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-x3=good.x(2u+s+noise);
-x4=good.x(w-2u-s+noise);
-y1=.3h+noise;
-y2=.3h+noise;
-y3=.8h+noise;
-y4=.8h+noise;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("numbersign",15,ht#,comma_depth#);
-italcorr .8ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-x3=good.x(2u+s+noise);
-x4=good.x(w-2u-s+noise);
-x5=.25w+noise;
-x6=.45w+noise;
-x7=.55w+noise;
-x8=.75w+noise;
-y1=.3x_ht+noise;
-y2=.3x_ht+noise;
-y3=.8x_ht+noise;
-y4=.8x_ht+noise;
-bot y5=1.1x_ht-h-o+noise;
-top y6=h+o+noise;
-bot y7=1.1x_ht-h-o+noise;
-top y8=h+o+noise;
-draw z1--z2;
-draw z3--z4;
-draw z5--z6;
-draw z7--z8;
-labels(1,2,3,4,5,6,7,8);
-endchar;
-
-ffmchar("dollar",11,ht#,0);
-italcorr .7ht#*slant;
-x3=good.x(1.5u+s+noise);
-x8=good.x(1.5u+s+noise);
-w-x1=leftstemloc+noise;
-w-x6=good.x(1.5u+s+noise);
-x2=.382[x3,x6]+noise;
-x4=.382[x3,x6]+noise;
-x5=.618[x3,x6]+noise;
-x7=.618[x3,x6]+noise;
-x9=.5w+noise;
-x10=.5w+noise;
-top y1=h+noise;
-top y2=h+noise;
-y3=.6[y2,y4]+noise;
-y4=barheight+noise;
-y5=barheight+noise;
-y6=.5[y5,y7]+noise;
-bot y7=noise;
-bot y8=noise;
-top y9=noise;
-bot y10=h+noise;
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,z5-z4)
- & z4--z5
- & half(z5,z5-z4,z6,-randup,z7,z8-z7)
- & z7--z8;
-draw z9--z10;
-labels(1,2,3,4,5,6,7,8,9,10);
-endchar;
-
-ffmchar("ampersand",15,ht#,0);
-italcorr ht#*slant;
-x3=good.x(1.5u+s+noise);
-x6=good.x(1.5u+s+noise);
-rt x12=w-eps;
-x1=.618w+noise;
-x11=.618w+noise;
-x10=.5[x11,x12]+noise;
-x9=.5[x11,x12]+noise;
-x2=.618[x9,x6]+noise;
-x4=.618[x9,x6]+noise;
-x7=.618[x9,x6]+noise;
-x8=.618[x7,x9]+noise;
-x5=x4+.1u;
-top y1=h+.5noise;
-top y2=h+.5noise;
-bot y7=.5noise;
-bot y8=.5noise;
-y4=barheight+noise;
-y11=barheight+noise;
-y12=barheight+noise;
-y3=.5[y2,y4]+noise;
-y6=.5[y4,y7]+noise;
-y9=.5[y4,y7]+noise;
-z5=z4+whatever*randrt;
-z10=whatever[z11,z12];
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,z5-z4)
- & z4--z5;
-draw half(z4,z4-z5,z6,-randup,z7,z8-z7)
- & z7--z8
- & arc(z8,z8-z7,z9,z10-z9)
- & z9--z10;
-draw z11--z12;
-labels(1,2,3,4,5,6,7,8,9,10,11,12);
-endchar;
-
-ffmchar("asterisk",12,ht#,0);
-numeric outerradius,innerradius;
-outerradius=.5w-2u-s;
-innerradius=px;
-path outercircle,innercircle;
-outercircle=(.5w,h+o+noise)..(.5w,h-2*outerradius)..cycle;
-innercircle=(.5w,h+o+noise-outerradius+innerradius)
- ..(.5w,h+o+noise-outerradius-innerradius)..cycle;
-z1=point 0 of outercircle+(noise,noise);
-z2=point 0 of innercircle;
-z3=point .4 of outercircle+(noise,noise);
-z4=point .4 of innercircle;
-z5=point .8 of outercircle+(noise,noise);
-z6=point .8 of innercircle;
-z7=point 1.2 of outercircle+(noise,noise);
-z8=point 1.2 of innercircle;
-z9=point 1.6 of outercircle+(noise,noise);
-z10=point 1.6 of innercircle;
-draw z1--z2;
-draw z3--z4;
-draw z5--z6;
-draw z7--z8;
-draw z9--z10;
-labels(1,2,3,4,5,6,7,8,9,10);
-endchar;
-
-ffmchar("less",12,x_ht#,0);
-italcorr x_ht#*slant;
-x1=good.x(w-2u-s+noise);
-x2=good.x(2u+s+noise);
-x3=good.x(w-2u-s+noise);
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("greater",12,x_ht#,0);
-italcorr .5x_ht#*slant;
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-x3=good.x(2u+s+noise);
-top y1=h+o+noise;
-bot y3=noise;
-y2=.5h+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("at",16,ht#,0);
-italcorr .8ht#*slant;
-x10=good.x(1.5u+s+noise);
-w-x8=good.x(1.5u+s+noise);
-w-x7=1.5u+s+noise;
-x2=.5w+noise;
-x4=.5w+.5noise;
-x9=.5w+noise;
-x11=.5w+noise;
-x1=.65w+noise;
-x5=.65w+.5noise;
-x3=.35w+noise;
-x6=.5[x1,x7];
-top y9=h+o+noise;
-bot y11=noise-o;
-y8=.5h+noise;
-y10=.5h+noise;
-y3=.5h+noise;
-y1=.33h+noise;
-y2=.33h+noise;
-y7=.33h+noise;
-y4=.67h+.5noise;
-y5=.67h+.5noise;
-y6=.15h+noise;
-pair randir;
-randir=-randup;
-draw z1--z2
- & half(z2,z2-z1,z3,randup,z4,z5-z4)
- & z4--z5--z1
- & half(z1,z1-z5,z6,randrt,z7,z8-z7)
- & z7--z8
- & half(z8,z8-z7,z9,-randrt,z10,randir)
- & arc(z10,randir,z11,randrt);
-labels(1,2,3,4,5,6,7,8,9,10,11);
-endchar;
-
-ffmchar("bracketleft",8,ht#,comma_depth#);
-italcorr ht#*slant;
-x2=leftstemloc+noise;
-x3=leftstemloc+noise;
-w-x1=leftstemloc-ho+noise;
-w-x4=leftstemloc-ho+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y3=noise-d;
-bot y4=noise-d;
-draw z1--z2--z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("backslash",10,ht#,comma_depth#);
-x1=good.x(2u+s+noise);
-x2=good.x(w-2u-s+noise);
-bot y2=noise-d-o;
-top y1=h+o+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("bracketright",8,ht#,comma_depth#);
-italcorr ht#*slant;
-w-x2=leftstemloc+noise;
-w-x3=leftstemloc+noise;
-x1=leftstemloc-ho+noise;
-x4=leftstemloc-ho+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y3=noise-d;
-bot y4=noise-d;
-draw z1--z2--z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("asciicircum",8,ht#,0);
-lft x1=eps+noise;
-x2=.5w+noise;
-rt x3=w-eps+noise;
-bot y1=x_ht+noise;
-bot y3=x_ht+noise;
-top y2=h+o+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("underscore",16,0,comma_depth#);
-x1=0;
-x2=w;
-bot y1=-.8d;
-bot y2=-.8d;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("braceleft",8,ht#,comma_depth#);
-italcorr ht#*slant;
-w-x1=leftstemloc-ho+noise;
-w-x5=leftstemloc-ho+noise;
-x2=leftstemloc+noise;
-x4=leftstemloc+noise;
-lft x3=eps+noise;
-top y1=h+o+noise;
-bot y5=noise-o-d;
-y3=.5[-d,h]+noise;
-y2=.75[-d,h]+noise;
-y4=.25[-d,h]+noise;
-pair randira;
-randira=randrt;
-draw half(z1,-randrt,z2,-randup,z3,-randira);
-draw half(z3,randira,z4,-randup,z5,randrt);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("bar",5,ht#,comma_depth#);
-x1=.5w+noise;
-x2=.5w+noise;
-top y1=h+o+noise;
-bot y2=noise-d-o;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("braceright",8,ht#,comma_depth#);
-italcorr .8ht#*slant;
-x1=leftstemloc-ho+noise;
-x5=leftstemloc-ho+noise;
-w-x2=leftstemloc+noise;
-w-x4=leftstemloc+noise;
-rt x3=w-eps+noise;
-top y1=h+o+noise;
-bot y5=noise-o-d;
-y3=.5[-d,h]+noise;
-y2=.75[-d,h]+noise;
-y4=.25[-d,h]+noise;
-pair randira;
-randira=randrt;
-draw half(z1,randrt,z2,-randup,z3,randira);
-draw half(z3,-randira,z4,-randup,z5,-randrt);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("asciitilde",11,x_ht#,0);
-lft x1=eps+noise;
-x2=.3w+noise;
-x4=.7w+noise;
-x3=.5w+noise;
-rt x5=w-eps+noise;
-bot y1=.5h+noise;
-bot y4=.5h+noise;
-top y2=h+noise;
-top y5=h+noise;
-y3=.75h+noise;
-if angle direction 1 of (z2{right}...z3...z4{right}) < -90:
- draw z1{randup}...z2{randrt}
- ...z3{-randup}...z4{randrt}...z5{randup};
-else:
- draw z1{randup}...z2{randrt}
- ...z3...z4{randrt}...z5{randup};
-fi
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("dash",6,x_ht#,0);
-italcorr .618x_ht#*slant;
-lft x1=noise;
-rt x2=w+noise;
-y1=.618h+noise;
-y2=.618h+noise;
-draw z1--z2;
-labels(1,2);
-endchar;
-
-ffmchar("section",10,ht#,comma_depth#);
-italcorr .5ht#*slant;
-x1=.5w+noise;
-x2=good.x(2u+s+noise);
-x3=.5w+noise;
-w-x4=good.x(2u+s+noise);
-x5=good.x(1.5u+s+noise);
-x6=.5w+noise;
-w-x7=leftstemloc+noise;
-w-x8=good.x(1.5u+s+noise);
-x9=.5w+noise;
-x10=leftstemloc+noise;
-y1=.65[-d,h]+noise;
-y2=.5[-d,h]+noise;
-y3=.35[-d,h]+noise;
-y4=.5[-d,h]+noise;
-y5=.5[y1,y6]+noise;
-top y6=h+noise;
-top y7=h+noise;
-y8=.5[y4,y9]+noise;
-bot y9=noise-d;
-bot y10=noise-d;
-pair randira,randirb;
-randira=-randrt;
-randirb=randrt;
-draw full(z1,randira,z2,-randup,z3,randirb,z4,randup);
-draw half(z1,randira,z5,randup,z6,z7-z6) & z6--z7;
-draw half(z3,randirb,z8,-randup,z9,z10-z9) & z9--z10;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6,7,8,9,10);
-endchar;
-
-ffmchar("exclamdown",5,ht#-comma_depth#,comma_depth#);
-italcorr .8(ht#-comma_depth#)*slant;
-x1=x2=.5w+noise;
-x3=.5w+noise;
-x4=.5w+noise;
-top y1=h+o+noise;
-y2=y1-dotincr*py;
-bot y4=noise-d-o;
-top y3=min(h-.618barheight,bot y2-eps)+noise;
-draw dotcircle(z1,z2);
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("questiondown",12,ht#-comma_depth#,comma_depth#);
-w-x1=good.x(1.5u+s+noise);
-x3=good.x(2u+s+noise);
-x5=.618[x3,x1]+noise;
-x2=.618[x1,x3]+noise;
-x4=.618[x1,x3]+noise;
-x6=x7=.618[x3,x1]+noise;
-bot y1=noise-d;
-bot y2=noise-d;
-top y6=h+o+noise;
-y7=y6-dotincr*py;
-top y5=min(h-.618barheight,bot y7-eps)+noise;
-y4=.8[y2,y5]+noise;
-y3=.5[y2,y4]+noise;
-pair randir;
-randir:=-randrt;
-draw arc(z5,-randup,z4,randir)
- & half(z4,randir,z3,-randup,z2,z1-z2)
- & z2--z1;
-draw dotcircle(z6,z7);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("sterling",11,ht#,0);
-italcorr .8ht#*slant;
-x5=good.x(1.5u+s+noise);
-x7=good.x(1.5u+s+noise);
-rt x6=w-eps+noise;
-x1=w-leftstemloc+o+noise;
-x8=w-leftstemloc+o-xgap+noise;
-x2=.618[x5,x1]+noise;
-x3=.618[x2,x5]+noise;
-x4=.618[x2,x5]+noise;
-top y1=h+noise;
-bot y5=noise;
-bot y6=noise;
-y7=barheight+noise;
-y8=barheight+noise;
-y4=barheight+noise;
-y3=.5[barheight,h]+noise;
-z2=z1+whatever*randir;
-draw z1--z2
- & arc(z2,z2-z1,z3,z4-z3)
- & z3--z4
- & arc(z4,z4-z3,z5,z5-z6);
-draw z5--z6;
-draw z7--z8;
-labels(1,2,3,4,5,6,7,8);
-endchar;
-
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_scalable.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_scalable.mf
deleted file mode 100644
index 66a18d1629d..00000000000
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_scalable.mf
+++ /dev/null
@@ -1,807 +0,0 @@
-% uppercase letters
-
-ffmchar("A",15,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.5w+noise;
-w-x4=leftstemloc+noise;
-w-x5=leftstemloc+noise;
-bot y1=noise-o;
-y2=barheight+noise;
-top y3=h+o; %no noise because of Aring
-y4=barheight+noise;
-bot y5=noise-o;
-bot y6=0; %no noise
-z6=whatever[z4,z5];
-draw z1--z2--z4--z5;
-draw half(z2,z2-z1,z3,randrt,z4,z5-z4);
-charanchortops_[charcode]=(.5w,h);
-charanchorbots_[charcode]=z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("AE",22,ht#,0);
-italcorr .9ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.5w+noise;
-x4=.5w+noise;
-x5=w-leftstemloc+o+noise;
-x6=w-leftstemloc+o-xgap+noise;
-x7=w-leftstemloc+o+noise;
-bot y1=noise-o;
-y2=barheight+noise;
-top y3=h+noise;
-bot y4=noise;
-top y5=h+noise;
-y6=barheight+noise;
-bot y7=noise;
-draw z1--z2--z6;
-draw arc(z2,z2-z1,z3,z5-z3);
-draw z5--z3--z4--z7;
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("B",14,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x3=leftstemloc+noise;
-x7=.5[w-x1,lft w]+noise;
-x5=.85[x1,x7]+noise;
-x8=.5[x1,x5]+noise;
-x4=.4[x1,x5]+noise;
-x6=.4[x1,x5]+noise;
-bot y1=noise;
-y2=barheight+noise;
-top y3=h+noise;
-y4=y3+noise;
-y6=y2+noise;
-bot y8=noise;
-y5=.5[y4,y6]+noise;
-y7=.5[y6,y8]+noise;
-z2=whatever[z1,z3];
-z9=whatever[z2,z6];
-draw z1--z3--z4
- & half(z4,z4-z3,z5,-randup,z6,z2-z6)
- & z6--z2;
-draw half(z6,z6-z2,z7,-randup,z8,z1-z8)
- & z8--z1;
-labels(1,2,3,4,5,6,7,8);
-endchar;
-
-ffmchar("C",14,ht#,0);
-italcorr ht#*slant;
-x1=w-leftstemloc+ho+noise;
-x2=.55w+noise;
-x3=good.x(1.5u+s+noise);
-x4=.55w+noise;
-x5=w-leftstemloc+ho+noise;
-top y1=h+noise;
-top y2=h+noise;
-y3=barheight+noise;
-bot y4=0; %no noise!
-z5=z4+whatever*randrt;
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,z5-z4)
- & z4--z5;
-charanchortops_[charcode]=(.5w,h);
-charanchorbots_[charcode]=z4;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("D",14,ht#,0);
-italcorr .9ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.45w+noise;
-x5=.45w+noise;
-w-x4=good.x(1.5u+s+noise);
-bot y1=noise;
-bot y5=noise;
-top y2=h+noise;
-top y3=h+noise;
-y4=barheight+noise;
-draw z1--z2--z3
- & half(z3,z3-z2,z4,-randup,z5,z1-z5)
- & z5--cycle;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("Eth",14,ht#,0);
-italcorr .9ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.5w+noise;
-x5=.5w+noise;
-w-x4=good.x(1.5u+s+noise);
-x6=eps+noise;
-x7=.5w+noise;
-bot y1=noise;
-bot y5=noise;
-top y2=h+noise;
-top y3=h+noise;
-y4=barheight+noise;
-y6=barheight+noise;
-y7=barheight+noise;
-draw z1--z2--z3
- & half(z3,z3-z2,z4,-randup,z5,z1-z5)
- & z5--cycle;
-draw z6--z7;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("E",14,ht#,0);
-italcorr .9ht#*slant;
-x1=leftstemloc+noise;
-x3=leftstemloc+noise;
-x4=w-leftstemloc+ho+noise;
-x5=w-leftstemloc+ho-xgap+noise;
-x6=w-leftstemloc+ho+noise;
-x7=.9[x1,x6];
-bot y1=noise;
-y2=barheight+noise;
-top y3=h+noise;
-top y4=h+noise;
-y5=barheight+noise;
-bot y7=0;
-z2=whatever[z1,z3];
-z6=whatever[z1,z7];
-draw z6--z1--z2--z5;
-draw z2--z3--z4;
-charanchortops_[charcode]=(.5[leftstemloc,w-leftstemloc+o],h);
-charanchorbots_[charcode]=z7;
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("F",14,ht#,0);
-italcorr .9ht#*slant;
-x1=leftstemloc+noise;
-x3=leftstemloc+noise;
-x4=w-leftstemloc+ho+noise;
-x5=w-leftstemloc+ho-xgap+noise;
-bot y1=noise-o;
-y2=barheight+noise;
-top y3=h+noise;
-top y4=h+noise;
-y5=barheight+noise;
-bot y6=noise;
-z2=whatever[z1,z3];
-draw z1--z2--z5;
-draw z2--z3--z4;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("G",14,ht#,0);
-italcorr ht#*slant;
-x3=good.x(1.5u+s+noise);
-x1=w-leftstemloc+noise;
-x5=w-leftstemloc+noise;
-x6=w-leftstemloc+noise;
-x2=.55w+noise;
-x4=.55w+noise;
-x7=.55w+noise;
-y3=barheight+noise;
-y6=barheight+noise;
-y7=barheight+noise;
-top y2=h+noise;
-top y1=h+noise;
-bot y4=noise;
-bot y5=noise;
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,z5-z4)
- & z4--z5--z6--z7;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("H",15,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-w-x3=leftstemloc+noise;
-w-x4=leftstemloc+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-bot y3=noise-o;
-top y4=h+o+noise;
-y5=barheight+noise;
-y6=barheight+noise;
-z5=whatever[z1,z2];
-z6=whatever[z3,z4];
-draw z1--z5--z6--z3;
-draw z5--z2;
-draw z6--z4;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("I",6,ht#,0);
-italcorr .8ht#*slant;
-x1=.5w+noise;
-x2=.5w+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-draw z1--z2;
-charanchortops_[charcode]=(.5w+noise,h);
-labels(1,2);
-endchar;
-
-ffmchar("J",9,ht#,0);
-italcorr .8ht#*slant;
-lft x1=noise-eps;
-x2=x1+.5u;
-w-x3=leftstemloc+noise;
-w-x4=leftstemloc+noise;
-bot y1=noise-o;
-y3=barheight+noise;
-top y4=h+noise;
-z2=z1+whatever*randrt;
-draw z1--z2
- & arc(z2,randrt,z3,z4-z3)
- & z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("K",13,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-w-x5=good.x(1.5u+s+noise);
-w-x6=good.x(1.5u+s+noise);
-bot y1=noise-o;
-bot y6=noise-o;
-top y2=h+o+noise;
-top y5=h+o+noise;
-y3=.618[y2,y1]+noise;
-z3=whatever[z1,z2];
-z4=whatever[z3,z5]=whatever[z2,z6];
-draw z1--z2;
-draw z3--z5;
-draw z4--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("L",12,ht#,0);
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-rt x3=w-eps+noise;
-bot y1=noise;
-bot y3=noise;
-top y2=h+noise;
-draw z3--z1--z2;
-charanchortops_[charcode]=(leftstemloc,h);
-charanchortoprights_[charcode]=(.618w,h);
-labels(1,2,3);
-endchar;
-
-ffmchar("Lslash",13,ht#,0);
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-w-x3=leftstemloc-ho+noise;
-lft x4=eps+noise;
-x5=.45w+noise;
-bot y1=noise;
-bot y3=noise;
-top y2=h+noise;
-y4=.4h+noise;
-z5=z4+whatever*dir(40);
-draw z3--z1--z2;
-draw z4--z5;
-charanchortops_[charcode]=(leftstemloc,h);
-charanchortoprights_[charcode]=(.5w,h);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("M",18,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.5w+noise;
-x4=w-leftstemloc+noise;
-x5=w-leftstemloc+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-bot y3=ygap-o+noise;
-top y4=h+o+noise;
-bot y5=noise-o;
-draw z1--z2--z3--z4--z5;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("N",15,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x4=w-leftstemloc+noise;
-x5=w-leftstemloc+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-y3=y4+ygap+noise;
-bot y4=noise-o;
-top y5=h+o+noise;
-z3=whatever[z4,z5];
-draw z1--z2--z3;
-draw z4--z5;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("Eng",15,ht#,acc_depth#);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x4=w-leftstemloc+noise;
-x5=w-leftstemloc+noise;
-x6=.5w+noise;
-x7=.382w+noise;
-bot y1=noise-o;
-top y2=h+o+noise;
-y3=y4+ygap+noise;
-bot y4=noise-o;
-top y5=h+o+noise;
-bot y6=noise-d;
-bot y7=noise-d;
-z3=whatever[z4,z5];
-draw z1--z2--z3;
-draw z7--z6
- & arc(z6,z6-z7,z4,z5-z4)
- & z4--z5;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("O",15,ht#,0);
-italcorr .8ht#*slant;
-x1=.5w+noise;
-x2=good.x(1.5u+s+noise);
-x3=.5w+noise;
-w-x4=good.x(1.5u+s+noise);
-top y1=h+o+noise;
-y2=barheight+noise;
-bot y3=noise-o;
-y4=barheight+noise;
-draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("Oslash",15,ht#,0);
-italcorr ht#*slant;
-x1=.5w+noise;
-x2=good.x(1.5u+s+noise);
-x3=.5w+noise;
-w-x4=good.x(1.5u+s+noise);
-x5=good.x(1.5u+s+noise);
-w-x6=good.x(1.5u+s+noise);
-top y1=h+o+noise;
-y2=barheight+noise;
-bot y3=noise-o;
-y4=barheight+noise;
-bot y5=noise-o;
-top y6=h+o+noise;
-draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
-draw z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("OE",22,ht#,0);
-italcorr .9ht#*slant;
-x2=.5w+noise;
-x4=good.x(1.5u+s+noise);
-x6=.5w+noise;
-x7=w-leftstemloc+o+noise;
-x9=w-leftstemloc+o-xgap+noise;
-x1=w-leftstemloc+o+noise;
-x3=.382w+noise;
-x5=.382w+noise;
-y4=barheight+noise;
-y8=barheight+noise;
-top y7=h+noise;
-y9=barheight+noise;
-bot y1=noise;
-bot y3=noise;
-top y5=h+noise;
-z2=whatever[z1,z3];
-z6=whatever[z5,z7];
-z8=whatever[z2,z6];
-draw z1--z3
- & half(z3,z3-z1,z4,randup,z5,z7-z5)
- & z5--z7;
-draw z2--z8--z9;
-draw z6--z8;
-labels(1,2,3,4,5,6,7,8,9);
-endchar;
-
-ffmchar("P",14,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x3=leftstemloc+noise;
-x4=.618[x1,w-x1]+noise;
-x5=.618[x1,w-x1]+noise;
-x6=.5[w-x1,lft w]+noise;
-y2=barheight+noise;
-y5=barheight+noise;
-bot y1=noise-o;
-top y3=h+noise;
-top y4=h+noise;
-y6=.5[y4,y5]+noise;
-z2=whatever[z1,z3];
-draw z1--z3--z4
- & half(z4,z4-z3,z6,-randup,z5,z2-z5)
- & z5 -- z2;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("Thorn",14,ht#,0);
-italcorr .7ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x4=.618[x1,w-x1]+noise;
-x5=.618[x1,w-x1]+noise;
-x6=.5[w-x1,lft w]+noise;
-bot y1=noise-o;
-top y2=h+noise;
-y3=.764h+noise;
-y4=.764h+noise;
-y6=.5[y4,y5]+noise;
-y5=.382h+noise;
-y7=.382h+noise;
-z3=whatever[z1,z2];
-z7=whatever[z1,z2];
-draw z1--z2;
-draw z3--z4
- & half(z4,z4-z3,z6,-randup,z5,z7-z5)
- & z5--z7;
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("Q",15,ht#,0);
-italcorr .8ht#*slant;
-x1=.5w+noise;
-x2=good.x(1.5u+s+noise);
-x3=.5w+noise;
-w-x4=good.x(1.5u+s+noise);
-x5=min(.618[x4,x3],x4-2px)+noise;
-w-x6=good.x(1.5u+s+noise);
-top y1=h+o+noise;
-y2=barheight+noise;
-bot y3=noise-o;
-y4=barheight+noise;
-y5=.618[y3,y4]+noise;
-bot y6=noise-o;
-draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
-draw z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("R",14,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x3=leftstemloc+noise;
-x4=.618[x1,w-x1]+noise;
-x6=.618[x1,w-x1]+noise;
-x5=.5[w-x1,lft w]+noise;
-x7=.5[w-x1,lft w]+noise;
-y2=barheight+noise;
-y6=barheight+noise;
-bot y1=noise-o;
-bot y7=noise-o;
-top y3=h+noise;
-top y4=h+noise;
-y5=.5[y4,y6]+noise;
-z2=whatever[z1,z3];
-draw z1--z3--z4
- & half(z4,z4-z3,z5,-randup,z6,z2-z6)
- & z6--z2;
-draw z6--z7;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6,7);
-endchar;
-
-ffmchar("S",14,ht#,0);
-italcorr .8ht#*slant;
-x3=good.x(2u+s+noise);
-x8=good.x(2u+s+noise);
-w-x1=good.x(3u+s+noise);
-x2=.382[x3,x1]+noise;
-x4=.382[x3,x1]+noise;
-x5=.9[x3,x1]+noise;
-x7=.9[x3,x1]+noise;
-w-x6=good.x(1.75u+.5s+noise);
-x9=.618[x8,x7];
-top y1=h+noise;
-top y2=h+noise;
-y3=.6[y2,y4]+noise;
-y4=barheight+noise;
-y5=barheight+noise;
-y6=.3[y5,y7]+noise;
-bot y9=0;
-z7=z9+whatever*randrt;
-z8=whatever[z7,z9];
-draw z1--z2
- & half(z2,z2-z1,z3,-randup,z4,z5-z4)
- & z4--z5
- & half(z5,z5-z4,z6,-randup,z7,z8-z7)
- & z7--z8;
-charanchortops_[charcode]=(.5w,h);
-charanchorbots_[charcode]=z9;
-labels(1,2,3,4,5,6,7,8,9);
-endchar;
-
-ffmchar("Germandbls",15,ht#,0);
-italcorr .8ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-x3=.5w+noise;
-x5=.5w+noise;
-x7=.5w+noise;
-w-x4=leftstemloc+noise;
-w-x6=good.x(1.5u+s+noise);
-x8=.4w+noise;
-bot y1=noise-o;
-bot y8=noise;
-y2=barheight+noise;
-top y3=h+o+noise;
-y5=barheight+noise;
-y4=.5[y5,y3]+noise;
-y6=.5[y7,y5]+noise;
-z7=z8+whatever*randrt;
-pair randira,randirb;
-randira:=randrt;
-randirb:=randrt;
-draw z1--z2
- & arc(z2,randup,z3,randira)
- & half(z3,randira,z4,-randup,z5,-randirb);
-draw half(z5,randirb,z6,-randup,z7,z8-z7)
- & z7--z8;
-labels(1,2,3,4,5,6,7,8);
-endchar;
-
-ffmchar("T",13,ht#,0);
-italcorr ht#*slant+.5u#;
-if .5w<>good.x .5w: change_width; fi
-lft x1=noise-eps;
-rt x2=w+noise;
-x3=.5w+noise;
-x4=.5w+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y4=noise-o;
-z3=whatever[z1,z2];
-draw z1--z2;
-draw z3--z4;
-charanchortops_[charcode]=(.5w,h);
-charanchorbots_[charcode]=(x4,0);
-labels(1,2,3,4);
-endchar;
-
-ffmchar("Tcedilla",13,ht#,acc_depth#);
-italcorr ht#*slant+.5u#;
-if .5w<>good.x .5w: change_width; fi
-lft x1=noise-eps;
-rt x2=w+noise;
-x3=.5w+noise;
-x4=.5w+noise;
-x5=.55w+noise;
-x6=.45w+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y4=noise-o;
-top y5=noise-.2d;
-bot y6=noise-d;
-z3=whatever[z1,z2];
-draw z1--z2;
-draw z3--z4;
-draw z5--z6;
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("U",15,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+noise;
-w-x4=leftstemloc+noise;
-w-x5=leftstemloc+noise;
-x3=.5[x1,x4]+noise;
-top y1=h+o+noise;
-y2=barheight+noise;
-bot y3=noise-o;
-y4=barheight+noise;
-top y5=h+o+noise;
-draw z1--z2
- & half(z2,z2-z1,z3,randrt,z4,z5-z4)
- & z4--z5;
-charanchortops_[charcode]=(x3,h);
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("V",13,ht#,0);
-italcorr ht#*slant;
-x1=good.x(1.5u+s+noise)-ho;
-w-x3=good.x(1.5u+s+noise)-ho;
-x2=.5[x1,x3]+noise;
-top y1=h+o+noise;
-bot y2=noise-o;
-top y3=h+o+noise;
-draw z1--z2--z3;
-labels(1,2,3);
-endchar;
-
-ffmchar("W",20,ht#,0);
-italcorr ht#*slant;
-x1=good.x(1.5u+s+noise)-ho;
-w-x5=good.x(1.5u+s+noise)-ho;
-x3=.5[x1,x5]+noise;
-top y1=h+o+noise;
-bot y2=noise-o;
-y3=y1-ygap+noise;
-bot y4=noise-o;
-top y5=h+o+noise;
-z4=z5+whatever*(x5-x1,4*(y1-y2)-2ygap);
-z2=z1+whatever*(x1-x5,4*(y1-y2)-2ygap);
-draw z1--z2--z3;
-draw z3--z4--z5;
-labels(1,2,3,4,5);
-endchar;
-
-ffmchar("X",13,ht#,0);
-italcorr ht#*slant;
-x1=good.x(1.5u+s+noise);
-x3=good.x(1.5u+s+noise);
-w-x2=good.x(1.5u+s+noise);
-w-x4=good.x(1.5u+s+noise);
-top y1=h+o+noise;
-top y4=h+o+noise;
-bot y3=noise-o;
-bot y2=noise-o;
-draw z1--z2;
-draw z3--z4;
-labels(1,2,3,4);
-endchar;
-
-ffmchar("Y",15.5,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-x2=leftstemloc+.5noise;
-w-x4=leftstemloc+.5noise;
-w-x5=leftstemloc+noise;
-x3=.5[x1,x5]+noise;
-x6=.5[x1,x5]+noise;
-top y1=h+o+noise;
-top y5=h+o+noise;
-bot y6=noise-o;
-y3=barheight+noise;
-y2=.618[y3,y5]+noise;
-y4=.618[y3,y5]+noise;
-draw z1--z2
- & half(z2,z2-z1,z3,randrt,z4,z5-z4)
- & z4--z5;
-draw z6--z3;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4,5,6);
-endchar;
-
-ffmchar("Z",15,ht#,0);
-italcorr ht#*slant;
-x1=leftstemloc+noise;
-w-x2=leftstemloc+noise;
-x3=leftstemloc+noise;
-w-x4=leftstemloc+noise;
-top y1=h+noise;
-top y2=h+noise;
-bot y3=noise;
-bot y4=noise;
-draw z1--z2--z3--z4;
-charanchortops_[charcode]=(.5w,h);
-labels(1,2,3,4);
-endchar;
-
-% chained uppercase letters
-
-ffmchainedchar("IJ","I","J");
-
-% combined uppercase letters
-
-ffmcombinedchar("Aacute","A","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Agrave","A","grave","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Adieresis","A","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Acircumflex","A","circumflex","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Atilde","A","tilde","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Aring","A","ring","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Abreve","A","breve","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Aogonek","A","ogonek","bot",ht#,comma_depth#);
-
-ffmcombinedchar("Cacute","C","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ccaron","C","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ccedilla","C","cedilla","bot",ht#,acc_depth#);
-
-ffmcombinedchar("Dcaron","D","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Eacute","E","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Egrave","E","grave","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Edieresis","E","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ecircumflex","E","circumflex","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ecaron","E","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Eogonek","E","ogonek","bot",ht#,comma_depth#);
-
-ffmcombinedchar("Gbreve","G","breve","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Iacute","I","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Igrave","I","grave","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Idieresis","I","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Icircumflex","I","circumflex","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Lacute","L","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Lcaron","L","quoteright","topright",ht#+acc_ht#,0);
-
-ffmcombinedchar("Nacute","N","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ntilde","N","tilde","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ncaron","N","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Oacute","O","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ograve","O","grave","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Odieresis","O","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ocircumflex","O","circumflex","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Otilde","O","tilde","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ohungarumlaut","O","hungarumlaut","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Racute","R","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Rcaron","R","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Sacute","S","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Scaron","S","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Scedilla","S","cedilla","bot",ht#,comma_depth#);
-
-ffmcombinedchar("Tcaron","T","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Uacute","U","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ugrave","U","grave","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Udieresis","U","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ucircumflex","U","circumflex","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Uhungarumlaut","U","hungarumlaut","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Uring","U","ring","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Yacute","Y","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Ydieresis","Y","dieresis","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Zacute","Z","acute","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Zcaron","Z","caron","top",ht#+acc_ht#,0);
-
-ffmcombinedchar("Zdotaccent","Z","dotaccent","top",ht#+acc_ht#,0);
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_uni.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_uni.mf
new file mode 100644
index 00000000000..e5ab10e20ef
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmchars_uni.mf
@@ -0,0 +1,5316 @@
+% unicode encoded characters of fetamont
+
+%------accents-------
+
+% acute
+ffmchar("00B4",6,x_ht#+acc_ht#,0);
+lft x1=.2w+noise;
+rt x2=w+noise;
+bot y1=.2[x_ht,h]+noise;
+top y2=h+o+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2);
+endchar;
+
+% grave
+ffmchar("0060",6,x_ht#+acc_ht#,0);
+lft x1=noise;
+rt x2=.8w+noise;
+top y1=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2);
+endchar;
+
+% dieresis
+ffmchar("00A8",8,x_ht#+acc_ht#,0);
+x1=x2=.5w-max(1.8u,(1+dotincr)*.7px)+noise;
+x3=x4=.5w+max(1.8u,(1+dotincr)*.7px)+noise;
+bot y1=.3[x_ht,h]+noise;
+y2=y1+dotincr*py;
+bot y3=.3[x_ht,h]+noise;
+y4=y3+dotincr*py;
+draw dotcircle(z1,z2);
+draw dotcircle(z3,z4);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4);
+endchar;
+
+% circumflex
+ffmchar("02C6",7,x_ht#+acc_ht#,0);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+bot y1=.2[x_ht,h]+noise;
+bot y3=.2[x_ht,h]+noise;
+top y2=h+o+noise;
+draw z1--z2--z3;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3);
+endchar;
+
+%tilde
+ffmchar("02DC",9,x_ht#+acc_ht#,0);
+lft x1=eps+noise;
+x2=.3w+noise;
+x4=.7w+noise;
+x3=.5w+noise;
+rt x5=w-eps+noise;
+bot y1=.2[x_ht,h]+noise;
+bot y4=.2[x_ht,h]+noise;
+top y2=h+noise;
+top y5=h+noise;
+y3=.6[x_ht,h]+noise;
+if (1.3px>(top y2-bot y1)) or (4.5px>w):
+ draw z1{randup}..tension 2..z2{randrt}
+ ..tension 2..z4{randrt}
+ ..tension 2..z5{randup};
+else:
+ draw z1{randup}...z2{randrt}...z3
+ ...z4{randrt}...z5{randup};
+fi
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5);
+endchar;
+
+% hungarumlaut
+ffmchar("02DD",11,x_ht#+acc_ht#,0);
+x2=.2w+noise;
+x3=.8w+noise;
+x1=.4w+noise;
+x4=.6w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+bot y4=.2[x_ht,h]+noise;
+draw z1--z2;
+draw z3--z4;
+charanchortops_[charepscode]=(.4w,x_ht);
+labels(1,2,3,4);
+endchar;
+
+% ring
+ffmchar("02DA",5,x_ht#+acc_ht#,0);
+lft x3=-o+noise;
+rt x1=w+o+noise;
+x2=.5w+noise;
+x4=.5w+noise;
+top y4=x_ht+o; %no noise because of Aring
+top y2=h+o+noise;
+y1=.5[y2,y4]+noise;
+y3=.5[y2,y4]+noise;
+draw full(z1,randup,z2,-randrt,z3,-randup,z4,randrt);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4);
+endchar;
+
+% caron
+ffmchar("02C7",7,x_ht#+acc_ht#,0);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+draw z1--z2--z3;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3);
+endchar;
+
+% breve
+ffmchar("02D8",7,x_ht#+acc_ht#,0);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+draw half(z1,-randup,z2,randrt,z3,randup);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3);
+endchar;
+
+% macron
+ffmchar("00AF",6,x_ht#+acc_ht#,0);
+lft x1=noise;
+rt x2=w+noise;
+y1=.5[x_ht,h]+noise;
+y2=.5[x_ht,h]+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2);
+endchar;
+
+% dotaccent
+ffmchar("02D9",4,x_ht#+acc_ht#,0);
+x1=x2=.5w+noise;
+bot y1=.5[x_ht,h]+noise;
+y2=y1+dotincr*py;
+draw dotcircle(z1,z2);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2);
+endchar;
+
+% combining dot below
+ffmchar("0323",4,x_ht#,acc_depth#);
+x1=x2=.5w+noise;
+bot y1=noise-d;
+y2=y1+dotincr*py;
+draw dotcircle(z1,z2);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2);
+endchar;
+
+% combining comma below (commaaccent)
+ffmchar("0326",4,x_ht#,acc_depth#);
+lft x1=.2w+noise;
+rt x2=.8w+noise;
+bot y1=noise-d;
+top y2=noise-.2d;
+draw z1--z2;
+charanchorbots_[charepscode]=(x2,0);
+labels(1,2);
+endchar;
+
+% cedilla
+ffmchar("00B8",4,x_ht#,acc_depth#);
+x1=.5w; %no noise!
+lft x2=.2w+.5noise;
+rt x3=w+o+.5noise;
+x4=x2;
+lft x5=0;
+bot y1=0; %no noise!
+y2=.4[y1,y4];
+y3=.7[y1,y4];
+bot y4=noise-d;
+z5=z4+whatever*randrt;
+draw z5--z4
+ & half(z4,z4-z5,z3,randup,z2,-randrt)
+ & z2--z1;
+charanchorcedillas_[charepscode]=z1;
+labels(1,2,3,4,5);
+endchar;
+
+% ogonek
+ffmchar("02DB",4,x_ht#,acc_depth#);
+x1=.6w; %no noise!
+lft x2=-o+.5noise;
+rt x4=w+.5noise;
+x3=x4-.5u;
+bot y1=0; %no noise!
+y2=.7[y1,y4];
+bot y3=noise-d;
+z4=z3+whatever*randrt;
+pair randir;
+randir:=-randup;
+draw z1..tension infinity and 1..z2{randir}
+ & arc(z2,randir,z3,randrt)
+ & z3--z4;
+charanchorcedillas_[charepscode]=z1;
+labels(1,2,3,4,5);
+endchar;
+
+% tonos
+ffmchar("0384",3,x_ht#+acc_gr#,0);
+lft x1=noise;
+rt x2=w+noise;
+bot y1=.2[x_ht,h]+noise;
+top y2=h+o+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.4w,x_ht);
+labels(1,2);
+endchar;
+
+% low acute accent (low tonos)
+ffmchar("02CF",3,x_ht#,comma_depth#);
+lft x1=noise;
+rt x2=w+noise;
+bot y1=noise-d-o;
+top y2=-.2d+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.4w,0);
+labels(1,2);
+endchar;
+
+% varia
+ffmchar("1FEF",3,x_ht#+acc_gr#,0);
+lft x1=noise;
+rt x2=w+noise;
+top y1=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.6w,x_ht);
+labels(1,2);
+endchar;
+
+% low grave accent (low varia)
+ffmchar("02CE",3,x_ht#,comma_depth#);
+lft x1=noise;
+rt x2=w+noise;
+top y1=-.2d+noise;
+bot y2=noise-d-o;
+draw z1--z2;
+charanchortops_[charepscode]=(.6w,0);
+labels(1,2);
+endchar;
+
+% dasia
+ffmchar("1FFE",2.5,x_ht#+acc_gr#,0);
+rt x1=w+noise;
+lft x2=noise;
+rt x3=w+noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(0,1,2,3);
+endchar;
+
+% dasia and varia
+ffmchar("1FDD",6,x_ht#+acc_gr#,0);
+rt x1=.4w+noise;
+lft x2=noise;
+rt x3=.4w+noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+rt x4=w+noise;
+lft x5=.5w+noise;
+top y5=h+o+noise;
+bot y4=.2[x_ht,h]+noise;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4);
+endchar;
+
+% dasia and oxia
+ffmchar("1FDE",6,x_ht#+acc_gr#,0);
+rt x1=.4w+noise;
+lft x2=noise;
+rt x3=.4w+noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+rt x4=w+noise;
+lft x5=.5w+noise;
+top y4=h+o+noise;
+bot y5=.2[x_ht,h]+noise;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4);
+endchar;
+
+% psili
+ffmchar("1FBF",2.5,x_ht#+acc_gr#,0);
+lft x1=noise;
+rt x2=w+noise;
+lft x3=noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(0,1,2,3);
+endchar;
+
+% psili and oxia
+ffmchar("1FCE",6,x_ht#+acc_gr#,0);
+lft x1=noise;
+rt x2=.4w+noise;
+lft x3=noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+rt x4=w+noise;
+lft x5=.5w+noise;
+top y4=h+o+noise;
+bot y5=.2[x_ht,h]+noise;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(0,1,2,3,4,5);
+endchar;
+
+% psili and varia
+ffmchar("1FCD",6,x_ht#+acc_gr#,0);
+lft x1=noise;
+rt x2=.4w+noise;
+lft x3=noise;
+x0=1.8[x1,x2];
+top y1=h+o+noise;
+bot y3=.2[x_ht,h]+noise;
+y2=y0=.5[y1,y3];
+draw z1{z0-z1}...z2{down}...z3{z3-z0};
+rt x4=w+noise;
+lft x5=.5w+noise;
+top y5=h+o+noise;
+bot y4=.2[x_ht,h]+noise;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(0,1,2,3,4,5);
+endchar;
+
+% prosgegrammeni
+ffmchar("1FBE",4,x_ht#,comma_depth#);
+x1=.5w+noise;
+x2=.5w+noise;
+top y2=.1[-o,-d]+noise;
+bot y1=noise-d;
+draw z1--z2;
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2);
+endchar;
+
+% ypogegrammeni
+ffmchar("037A",4,x_ht#,comma_depth#);
+x1=.5w+noise;
+x2=.5w+noise;
+top y2=.1[-o,-d]+noise;
+bot y1=noise-d;
+draw z1--z2;
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2);
+endchar;
+
+% dialytika and varia
+ffmchar("1FED",8,x_ht#+acc_gr#,0);
+x1=x2=.5w-max(1.8u,(1+dotincr)*.7px)+noise;
+x3=x4=.5w+max(1.8u,(1+dotincr)*.7px)+noise;
+bot y1=.3[x_ht,x_ht+acc_ht]+noise;
+y2=y1+dotincr*py;
+bot y3=.3[x_ht,x_ht+acc_ht]+noise;
+y4=y3+dotincr*py;
+draw dotcircle(z1,z2);
+draw dotcircle(z3,z4);
+charanchortops_[charepscode]=(.5w,x_ht);
+% varia
+rt x5=.6w+noise;
+lft x6=noise;
+bot y5=.5[x_ht,h]+noise;
+top y6=h+o+noise;
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5,6);
+endchar;
+
+% dieresistonos
+ffmchar("0385",8,x_ht#+acc_gr#,0);
+x1=x2=.5w-max(1.8u,(1+dotincr)*.7px)+noise;
+x3=x4=.5w+max(1.8u,(1+dotincr)*.7px)+noise;
+bot y1=.3[x_ht,x_ht+acc_ht]+noise;
+y2=y1+dotincr*py;
+bot y3=.3[x_ht,x_ht+acc_ht]+noise;
+y4=y3+dotincr*py;
+draw dotcircle(z1,z2);
+draw dotcircle(z3,z4);
+charanchortops_[charepscode]=(.5w,x_ht);
+% tonos
+lft x5=.4w+noise;
+rt x6=w+noise;
+bot y5=.5[x_ht,h]+noise;
+top y6=h+o+noise;
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5,6);
+endchar;
+
+% dialytika and oxia
+ffmcopiedchar("1FEE","0385");
+
+% dialytika and perispomeni
+ffmchar("1FC1",9,x_ht#+acc_gr#,0);
+x1=x2=.5w-max(1.8u,(1+dotincr)*.7px)+noise;
+x3=x4=.5w+max(1.8u,(1+dotincr)*.7px)+noise;
+bot y1=.3[x_ht,x_ht+acc_ht]+noise;
+y2=y1+dotincr*py;
+bot y3=.3[x_ht,x_ht+acc_ht]+noise;
+y4=y3+dotincr*py;
+draw dotcircle(z1,z2);
+draw dotcircle(z3,z4);
+charanchortops_[charepscode]=(.5w,x_ht);
+% perispomeni
+lft x5=eps+noise;
+x6=.3w+noise;
+x8=.7w+noise;
+x7=.5w+noise;
+rt x9=w-eps+noise;
+bot y5=.55[x_ht,h]+noise;
+bot y8=.55[x_ht,h]+noise;
+top y6=h+o+noise;
+top y9=h+o+noise;
+y7=.5[y6,y8];
+if (1.3px>(top y6-bot y5)) or (4.5px>w):
+ draw z5{randup}..tension 2..z6{randrt}
+ ..tension 2..z8{randrt}
+ ..tension 2..z9{randup};
+else:
+ draw z5{randup}...z6{randrt}...z7
+ ...z8{randrt}...z9{randup};
+fi
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% wide breve
+ffmchar("E002",10,x_ht#+acc_ht#,0);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+bot y2=.2[x_ht,h]+noise;
+draw half(z1,-randup,z2,randrt,z3,randup);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3);
+endchar;
+
+% combining breve below
+ffmchar("032E",7,x_ht#,comma_depth#);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+top y1=-.2d+noise;
+top y3=-.2d+noise;
+bot y2=noise-d-o;
+draw half(z1,-randup,z2,randrt,z3,randup);
+charanchortops_[charepscode]=(.5w,0);
+labels(1,2,3);
+endchar;
+
+% combining inverted breve below
+ffmchar("032F",7,x_ht#,comma_depth#);
+lft x1=noise;
+x2=.5w+noise;
+rt x3=w+noise;
+bot y1=noise-d-o;
+bot y3=noise-d-o;
+top y2=-.2d+noise;
+draw half(z1,randup,z2,randrt,z3,-randup);
+charanchortops_[charepscode]=(.5w,0);
+labels(1,2,3);
+endchar;
+
+% perispomeni
+ffmchar("1FC0",9,x_ht#+acc_gr#,0);
+lft x1=eps+noise;
+x2=.3w+noise;
+x4=.7w+noise;
+x3=.5w+noise;
+rt x5=w-eps+noise;
+bot y1=.2[x_ht,h]+noise;
+bot y4=.2[x_ht,h]+noise;
+top y2=.7[x_ht,h]+noise;
+top y5=.7[x_ht,h]+noise;
+y3=.5[y2,y4];
+if (1.3px>(top y2-bot y1)) or (4.5px>w):
+ draw z1{randup}..tension 2..z2{randrt}
+ ..tension 2..z4{randrt}
+ ..tension 2..z5{randup};
+else:
+ draw z1{randup}...z2{randrt}...z3
+ ...z4{randrt}...z5{randup};
+fi
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5);
+endchar;
+
+% dasia and perispomeni
+ffmchar("1FDF",9,x_ht#+acc_gr#,0);
+lft x1=eps+noise;
+x2=.3w+noise;
+x4=.7w+noise;
+x3=.5w+noise;
+rt x5=w-eps+noise;
+x6=.35w+noise;
+x7=.35w+noise;
+bot y1=.6[x_ht,h]+noise;
+bot y4=.6[x_ht,h]+noise;
+top y2=h+o+noise;
+y3=.5[y2,y4];
+top y5=h+o+noise;
+y6=.6[x_ht,h]+noise;
+bot y7=.1[x_ht,h]+noise;
+if (1.3px>(top y2-bot y1)) or (4.5px>w):
+ draw z1{randup}..tension 2..z2{randrt}
+ ..tension 2..z4{randrt}
+ ..tension 2..z5{randup};
+else:
+ draw z1{randup}...z2{randrt}...z3
+ ...z4{randrt}...z5{randup};
+fi
+draw arc(z6,-randrt-randup,z7,randrt-randup);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% psili and perispomeni
+ffmchar("1FCF",9,x_ht#+acc_gr#,0);
+lft x1=eps+noise;
+x2=.3w+noise;
+x4=.7w+noise;
+x3=.5w+noise;
+rt x5=w-eps+noise;
+x6=.35w+noise;
+x7=.35w+noise;
+bot y1=.6[x_ht,h]+noise;
+bot y4=.6[x_ht,h]+noise;
+top y2=h+o+noise;
+y3=.5[y2,y4];
+top y5=h+o+noise;
+y6=.6[x_ht,h]+noise;
+bot y7=.1[x_ht,h]+noise;
+if (1.3px>(top y2-bot y1)) or (4.5px>w):
+ draw z1{randup}..tension 2..z2{randrt}
+ ..tension 2..z4{randrt}
+ ..tension 2..z5{randup};
+else:
+ draw z1{randup}...z2{randrt}...z3
+ ...z4{randrt}...z5{randup};
+fi
+draw arc(z6,randrt-randup,z7,-randrt-randup);
+charanchortops_[charepscode]=(.5w,x_ht);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+%------digits-------
+
+% zero
+ffmchar("0030",11,ht#,0);
+italcorr .6ht#*slant;
+x1=.5w+noise;
+x2=good.x(2u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(2u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+labels(1,2,3,4);
+endchar;
+
+% one
+ffmchar("0031",11,ht#,0);
+italcorr .7ht#*slant;
+x1=leftstemloc+noise;
+w-x2=good.x(4.5u+s+noise);
+w-x3=good.x(4.5u+s+noise);
+y1=.618h+noise;
+top y2=h+o+noise;
+bot y3=noise-o;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% two
+ffmchar("0032",11,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc-ho+noise;
+x5=good.x(2u+s+noise);
+x2=.5[x1,x6]+noise;
+w-x3=leftstemloc+noise;
+x4=.5[x1,x6]+noise;
+w-x6=leftstemloc-ho+noise;
+top y2=h+noise;
+y3=.5[y4,y2]+noise;
+y4=barheight+noise;
+bot y5=noise;
+bot y6=noise;
+z1=z2+whatever*randrt;
+pair randir;
+randir:=-randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,randir)
+ & arc(z4,randir,z5,-randup)
+ & z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% three
+ffmchar("0033",11,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc-ho+noise;
+x8=leftstemloc-ho+noise;
+w-x3=good.x(2u+s+noise);
+w-x6=good.x(2.5u+s+noise);
+x5=.618[x2,x1]+noise;
+x2=.55w+noise;
+x4=.55w+noise;
+x7=.55w+noise;
+bot y1=noise;
+bot y2=noise;
+top y7=h+noise;
+top y8=h+noise;
+y4=barheight+.5noise;
+y5=barheight+.5noise;
+y3=.5[y2,y4]+noise;
+y6=.5[y4,y7]+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randup,z4,z5-z4)
+ & z4--z5;
+draw half(z4,z4-z5,z6,randup,z7,z8-z7)
+ & z7--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+% four
+ffmchar("0034",11,ht#,0);
+italcorr .7ht#*slant;
+x2=good.x(1.5u+s+noise);
+w-rt x3=eps+noise;
+w-x4=good.x(3.5u+s+noise);
+w-x5=good.x(3.5u+s+noise);
+rt x1+.5u=lft x4+noise;
+y4=.618h+noise;
+top y1=h+o+noise;
+bot y5=noise-o;
+y2=.618[y4,y5]+noise;
+y3=.618[y4,y5]+noise;
+draw z1--z2--z3;
+draw z4--z5;
+labels(1,2,3,4,5);
+endchar;
+
+% five
+ffmchar("0035",11,ht#,0);
+italcorr .8ht#*slant;
+x5=leftstemloc+noise;
+x6=leftstemloc+noise;
+x7=w-x5+noise;
+x1=leftstemloc-ho+noise;
+w-x3=good.x(2u+s+noise);
+x2=.5[x5,x3]+noise;
+x4=.5[x5,x3]+noise;
+bot y1=noise;
+bot y2=noise;
+top y6=h+noise;
+top y7=h+noise;
+y4=barheight+.5noise;
+y5=barheight+.5noise;
+y3=.5[y2,y4]+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randup,z4,z5-z4)
+ & z4--z5--z6--z7;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% six
+ffmchar("0036",11,ht#,0);
+italcorr .8ht#*slant;
+x1=.5[x2,x4]+noise;
+x2=good.x(2u+s+noise);
+x3=.5[x2,x4]+noise;
+w-x4=good.x(1.75u+s+noise);
+x5=.618[x2,x4]+noise;
+w-x6=leftstemloc+noise;
+y1=barheight+noise;
+y2=.5[y1,y3]+noise;
+bot y3=noise-o;
+y4=.5[y1,y3]+noise;
+top y5=h+noise;
+z6=z5+whatever*randrt;
+pair randir;
+randir:=randup;
+draw full(z1,-randrt,z2,-randir,z3,randrt,z4,randup);
+draw arc(z2,randir,z5,z6-z5)
+ & z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% seven
+ffmchar("0037",11,ht#,0);
+italcorr ht#*slant;
+x1=good.x(2u+s+noise);
+w-x2=good.x(2u+s+noise);
+x3=.618[x2,x1]+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y3=noise-o;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% eight
+ffmchar("0038",11,ht#,0);
+italcorr .7ht#*slant;
+x1=.5w+noise;
+x3=.5w+noise;
+x6=.5w+noise;
+x2=good.x(1.5u+s+noise);
+w-x4=good.x(1.5u+s+noise);
+x7=.2[x2,x1]+noise;
+w-x5=.2[x2,x1]+noise;
+y1=barheight+noise;
+bot y3=noise-o;
+top y6=h+o+noise;
+y2=.5[y1,y3]+noise;
+y4=.5[y1,y3]+noise;
+y7=.5[y1,y6]+noise;
+z5=z7+whatever*(z4-z2);
+pair randir;
+randir:=randrt;
+draw full(z1,-randir,z2,-randup,z3,randrt,z4,randup);
+draw full(z1,randir,z5,randup,z6,-randrt,z7,-randup);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% nine
+ffmchar("0039",11,ht#,0);
+italcorr .7ht#*slant;
+x1=.5[x2,x4]+noise;
+x2=good.x(1.75u+s+noise);
+x3=.5[x2,x4]+noise;
+w-x4=good.x(2u+s+noise);
+x5=.618[x4,x2]+noise;
+x6=leftstemloc+noise;
+top y1=h+o+noise;
+y2=.5[y1,y3]+noise;
+y4=.5[y1,y3]+noise;
+bot y5=noise;
+y3=barheight+noise;
+z6=z5+whatever*randrt;
+pair randir;
+randir:=randup;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randir);
+draw arc(z4,-randir,z5,z6-z5)
+ & z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+%------punctation-------
+
+% space
+ffmchar("0020",6,x_ht#,0);
+endchar;
+
+% visiblespace
+ffmchar("2420",6,ht#,comma_depth#);
+lft x1=good.x(.5u+noise);
+lft x2=good.x(.5u+noise);
+rt x3=good.x(w-.5u+noise);
+rt x4=good.x(w-.5u+noise);
+top y1=o+noise;
+top y4=o+noise;
+bot y2=noise-d;
+bot y3=noise-d;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% period
+ffmchar("002E",5,x_ht#,0);
+x1=x2=.5w+noise;
+bot y1=noise-o;
+y2=y1+dotincr*py;
+draw dotcircle(z1,z2);
+labels(1,2);
+endchar;
+
+% periodcentered
+ffmchar("00B7",5,x_ht#,0);
+x1=x2=.5w+noise;
+y1=barheight+noise;
+y2=y1+dotincr*py;
+draw dotcircle(z1,z2);
+labels(1,2);
+endchar;
+
+% anoteleia
+ffmchar("0387",5,x_ht#,0);
+x1=x2=.5w+noise;
+y1=barheight+noise;
+y2=y1+dotincr*py;
+draw dotcircle(z1,z2);
+labels(1,2);
+endchar;
+
+% colon
+ffmchar("003A",5,x_ht#,0);
+italcorr .8barheight#*slant;
+x1=x2=.5w+noise;
+x3=x4=.5w+noise;
+bot y1=noise-o;
+y2=y1+dotincr*py;
+y3=y4-dotincr*py=barheight+noise;
+draw dotcircle(z1,z2);
+draw dotcircle(z3,z4);
+labels(1,2,3,4);
+endchar;
+
+% comma
+ffmchar("002C",6,x_ht#,comma_depth#);
+x1=leftstemloc;
+x2=w-x1;
+top y2=.382barheight;
+bot y1=-d;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% semicolon
+ffmchar("003B",6,x_ht#,comma_depth#);
+italcorr barheight#*slant;
+x1=leftstemloc+noise;
+w-x2=leftstemloc+noise;
+w-x3=w-x4=leftstemloc+noise;
+y3=y4-dotincr*py=barheight;
+top y2=.382y3;
+bot y1=-d;
+draw z1--z2;
+draw dotcircle(z3,z4);
+labels(1,2,3,4);
+endchar;
+
+% exclam
+ffmchar("0021",5,ht#,0);
+italcorr .8ht#*slant;
+x1=x2=.5w+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+bot y1=noise-o;
+y2=y1+dotincr*py;
+top y4=h+o+noise;
+bot y3=max(.618barheight,top y2+eps)+noise;
+draw dotcircle(z1,z2);
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% question
+ffmchar("003F",12,ht#,0);
+italcorr .8ht#*slant;
+x1=good.x(1.5u+s+noise);
+w-x3=good.x(2u+s+noise);
+x5=.618[x3,x1]+noise;
+x2=.618[x1,x3]+noise;
+x4=.618[x1,x3]+noise;
+x6=x7=.618[x3,x1]+noise;
+top y1=h+noise;
+top y2=h+noise;
+y4=barheight+noise;
+y3=.5[y2,y4]+noise;
+bot y6=noise-o;
+y7=y6+dotincr*py;
+bot y5=max(.618y4,top y7+eps)+noise;
+pair randir;
+randir:=-randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,randir)
+ & arc(z4,randir,z5,-randup);
+draw dotcircle(z6,z7);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% parenleft
+ffmchar("0028",8,ht#,comma_depth#);
+italcorr .8ht#*slant;
+x2=good.x(1.5u+s+noise);
+w-x1=leftstemloc-ho+noise;
+w-x3=leftstemloc-ho+noise;
+top y1=h+o+noise;
+bot y3=noise-o-d;
+y2=.5[-d,h]+noise;
+draw half(z1,-randrt,z2,-randup,z3,randrt);
+labels(1,2,3);
+endchar;
+
+% parenright
+ffmchar("0029",8,ht#,comma_depth#);
+italcorr .8ht#*slant;
+w-x2=good.x(1.5u+s+noise);
+x1=leftstemloc-ho+noise;
+x3=leftstemloc-ho+noise;
+top y1=h+o+noise;
+bot y3=noise-o-d;
+y2=.5[-d,h]+noise;
+draw half(z1,randrt,z2,-randup,z3,-randrt);
+labels(1,2,3);
+endchar;
+
+% hyphen
+ffmchar("002D",6,x_ht#,0);
+italcorr .618x_ht#*slant;
+lft x1=noise;
+rt x2=w+noise;
+y1=.618h+noise;
+y2=.618h+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% emdash
+ffmchar("2014",18,x_ht#,0);
+italcorr .618x_ht#*slant;
+lft x1=noise;
+rt x2=w+noise;
+y1=.618h+noise;
+y2=.618h+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% endash
+ffmchar("2013",9,x_ht#,0);
+italcorr .618x_ht#*slant;
+lft x1=noise;
+rt x2=w+noise;
+y1=.618h+noise;
+y2=.618h+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% zero width space
+ffmchar("200B",0,x_ht#,0);
+endchar;
+
+% quotedbl
+ffmchar("0022",8,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+noise;
+x4=w-leftstemloc+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+y2=.5[barheight,x_ht]+noise;
+y4=.5[barheight,x_ht]+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% quotesingle
+ffmchar("0027",4,ht#,0);
+italcorr ht#*slant;
+x1=.5w+noise;
+x2=.5w+noise;
+top y1=h+o+noise;
+y2=.5[barheight,x_ht]+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% quoteleft
+ffmchar("2018",5,ht#,0);
+italcorr ht#*slant;
+x1=.4w+noise;
+x2=.6w+noise;
+top y1=h+o+noise;
+y2=.5[barheight,x_ht]+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% quoteright
+ffmchar("2019",5,ht#,0);
+italcorr ht#*slant;
+x1=.4w+noise;
+x2=.6w+noise;
+top y2=h+o+noise;
+y1=.5[barheight,x_ht]+noise;
+draw z1--z2;
+charanchortoprights_[charepscode]=(.5w,h);
+labels(1,2);
+endchar;
+
+% quotedblleft
+ffmchar("201C",6,ht#,0);
+italcorr ht#*slant;
+x1=.2w+noise;
+x4=.8w+noise;
+x2=.3w+noise;
+x3=.7w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+y2=.5[barheight,x_ht]+noise;
+y4=.5[barheight,x_ht]+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% quotedblright
+ffmchar("201D",6,ht#,0);
+italcorr ht#*slant;
+x2=.2w+noise;
+x3=.8w+noise;
+x1=.3w+noise;
+x4=.7w+noise;
+top y1=h+o+noise;
+top y3=h+o+noise;
+y2=.5[barheight,x_ht]+noise;
+y4=.5[barheight,x_ht]+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% quotesinglbase
+ffmchar("201A",3,x_ht#,comma_depth#);
+x1=.4w+noise;
+x2=.6w+noise;
+bot y1=noise-d-o;
+y2=-d+ht-.5[barheight,x_ht]+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% quotedblbase
+ffmchar("201E",6,x_ht#,comma_depth#);
+x2=.3w+noise;
+x3=.7w+noise;
+x1=.2w+noise;
+x4=.8w+noise;
+bot y1=noise-d-o;
+bot y3=noise-d-o;
+y2=-d+ht-.5[barheight,x_ht]+noise;
+y4=-d+ht-.5[barheight,x_ht]+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% guilsinglleft
+ffmchar("2039",7,x_ht#,0);
+italcorr x_ht#*slant;
+x1=good.x(w-2u-s+noise);
+x2=good.x(2u+s+noise);
+x3=good.x(w-2u-s+noise);
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% guilsinglright
+ffmchar("203A",7,x_ht#,0);
+italcorr .7x_ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+x3=good.x(2u+s+noise);
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% guillemotleft
+ffmchar("00AB",10,x_ht#,0);
+italcorr x_ht#*slant;
+x1=.4w+noise;
+x2=good.x(2u+s+noise);
+x3=.4w+noise;
+x4=good.x(w-2u-s+noise);
+x5=.6w+noise;
+x6=good.x(w-2u-s+noise);
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+top y4=h+o+noise;
+bot y6=noise;
+y5=.5h+noise;
+draw z1--z2--z3;
+draw z4--z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% guillemotright
+ffmchar("00BB",10,x_ht#,0);
+italcorr .7x_ht#*slant;
+x1=good.x(2u+s+noise);
+x2=.4w+noise;
+x3=good.x(2u+s+noise);
+x4=.6w+noise;
+x5=good.x(w-2u-s+noise);
+x6=.6w+noise;
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+top y4=h+o+noise;
+bot y6=noise;
+y5=.5h+noise;
+draw z1--z2--z3;
+draw z4--z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% percent
+ffmchar("0025",16,ht#,0);
+italcorr .8ht#*slant;
+x5=good.x(1.5u+s+noise);
+w-x7=good.x(1.5u+s+noise);
+x1=.2w+noise;
+x2=.8w+noise;
+x3=6.5u+s+noise;
+x4=4u+s+noise;
+x6=4u+s+noise;
+w-x8=4u+s+noise;
+w-x9=6.5u+s+noise;
+w-x10=4u+s+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+y3=.8h+noise;
+top y4=h+o+noise;
+y5=.8h+noise;
+bot y6=.6h-o+noise;
+y7=.2h+noise;
+top y8=.4h+o+noise;
+y9=.2h+noise;
+bot y10=noise-o;
+draw z1--z2;
+draw full(z3,randup,z4,-randrt,z5,-randup,z6,randrt);
+draw full(z7,randup,z8,-randrt,z9,-randup,z10,randrt);
+labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+% perthousandzero
+ffmchar("E000",8,ht#,0);
+x3=good.x(1.5u+s+noise);
+w-x1=good.x(1.5u+s+noise);
+x2=.5w+noise;
+x4=.5w+noise;
+y1=.2h+noise;
+top y2=.4h+o+noise;
+y3=.2h+noise;
+bot y4=noise-o;
+draw full(z1,randup,z2,-randrt,z3,-randup,z4,randrt);
+labels(1,2,3,4);
+endchar;
+
+% perthousand
+ffmchainedchar("2030","0025","E000",0);
+
+% pertenthousand
+ffmchainedchar("2031","2030","E000",0);
+
+% degree
+ffmchar("00B0",8,ht#,0);
+x3=good.x(1.5u+s+noise);
+w-x1=good.x(1.5u+s+noise);
+x2=.5w+noise;
+x4=.5w+noise;
+y1=.8h+noise;
+top y2=h+o+noise;
+y3=.8h+noise;
+bot y4=.6h-o+noise;
+draw full(z1,randup,z2,-randrt,z3,-randup,z4,randrt);
+labels(1,2,3,4);
+endchar;
+
+% slash
+ffmchar("002F",10,ht#,comma_depth#);
+italcorr ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+bot y1=noise-d-o;
+top y2=h+o+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% plus
+ffmchar("002B",15,x_ht#,0);
+italcorr .5x_ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+x3=.5w+noise;
+x4=.5w+noise;
+y1=.5h+noise;
+y2=.5h+noise;
+y3=noise-o;
+y4=h+o+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% equal
+ffmchar("003D",15,x_ht#,0);
+italcorr .8x_ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+x3=good.x(2u+s+noise);
+x4=good.x(w-2u-s+noise);
+y1=.3h+noise;
+y2=.3h+noise;
+y3=.8h+noise;
+y4=.8h+noise;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% numbersign
+ffmchar("0023",15,ht#,comma_depth#);
+italcorr .8ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+x3=good.x(2u+s+noise);
+x4=good.x(w-2u-s+noise);
+x5=.25w+noise;
+x6=.45w+noise;
+x7=.55w+noise;
+x8=.75w+noise;
+y1=.3x_ht+noise;
+y2=.3x_ht+noise;
+y3=.8x_ht+noise;
+y4=.8x_ht+noise;
+bot y5=1.1x_ht-h-o+noise;
+top y6=h+o+noise;
+bot y7=1.1x_ht-h-o+noise;
+top y8=h+o+noise;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+draw z7--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+% dollar
+ffmchar("0024",11,ht#,0);
+italcorr .7ht#*slant;
+x3=good.x(1.5u+s+noise);
+x8=good.x(1.5u+s+noise);
+w-x1=leftstemloc+noise;
+w-x6=good.x(1.5u+s+noise);
+x2=.382[x3,x6]+noise;
+x4=.382[x3,x6]+noise;
+x5=.618[x3,x6]+noise;
+x7=.618[x3,x6]+noise;
+x9=.5w+noise;
+x10=.5w+noise;
+top y1=h+noise;
+top y2=h+noise;
+y3=.6[y2,y4]+noise;
+y4=barheight+noise;
+y5=barheight+noise;
+y6=.5[y5,y7]+noise;
+bot y7=noise;
+bot y8=noise;
+top y9=noise;
+bot y10=h+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5
+ & half(z5,z5-z4,z6,-randup,z7,z8-z7)
+ & z7--z8;
+draw z9--z10;
+labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+% Euro
+ffmchar("20AC",11,ht#,0);
+italcorr ht#*slant;
+x1=w-leftstemloc+ho+noise;
+x2=min(x1-.1w,.75w)+noise;
+x3=.3w;
+x5=w-leftstemloc+ho+noise;
+x4=min(x5-.1w,.75w)+noise;
+x6=leftstemloc-ho+noise;
+x7=.7w+noise;
+x8=leftstemloc-ho+noise;
+x9=.7w+noise;
+top y2=h+noise;
+y3=barheight+noise;
+bot y4=0; %no noise!
+y6=barheight+.1h+noise;
+y7=barheight+.1h+noise;
+y8=barheight-.1h+noise;
+y9=barheight-.1h+noise;
+z5=z4+whatever*randrt;
+z1=z2+whatever*randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5;
+draw z6--z7;
+draw z8--z9;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=z4;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% ampersand
+ffmchar("0026",15,ht#,0);
+italcorr ht#*slant;
+x3=good.x(1.5u+s+noise);
+x6=good.x(1.5u+s+noise);
+rt x12=w-eps;
+x1=.618w+noise;
+x11=.618w+noise;
+x10=.5[x11,x12]+noise;
+x9=.5[x11,x12]+noise;
+x2=.618[x9,x6]+noise;
+x4=.618[x9,x6]+noise;
+x7=.618[x9,x6]+noise;
+x8=.618[x7,x9]+noise;
+x5=x4+.1u;
+top y1=h+.5noise;
+top y2=h+.5noise;
+bot y7=.5noise;
+bot y8=.5noise;
+y4=barheight+noise;
+y11=barheight+noise;
+y12=barheight+noise;
+y3=.5[y2,y4]+noise;
+y6=.5[y4,y7]+noise;
+y9=.5[y4,y7]+noise;
+z5=z4+whatever*randrt;
+z10=whatever[z11,z12];
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5;
+draw half(z4,z4-z5,z6,-randup,z7,z8-z7)
+ & z7--z8
+ & arc(z8,z8-z7,z9,z10-z9)
+ & z9--z10;
+draw z11--z12;
+labels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+
+% asterisk
+ffmchar("002A",12,ht#,0);
+numeric outerradius,innerradius;
+outerradius=.5w-2u-s;
+innerradius=px;
+path outercircle,innercircle;
+outercircle=(.5w,h+o+noise)..(.5w,h-2*outerradius)..cycle;
+innercircle=(.5w,h+o+noise-outerradius+innerradius)
+ ..(.5w,h+o+noise-outerradius-innerradius)..cycle;
+z1=point 0 of outercircle+(noise,noise);
+z2=point 0 of innercircle;
+z3=point .4 of outercircle+(noise,noise);
+z4=point .4 of innercircle;
+z5=point .8 of outercircle+(noise,noise);
+z6=point .8 of innercircle;
+z7=point 1.2 of outercircle+(noise,noise);
+z8=point 1.2 of innercircle;
+z9=point 1.6 of outercircle+(noise,noise);
+z10=point 1.6 of innercircle;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+draw z7--z8;
+draw z9--z10;
+labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+% less
+ffmchar("003C",12,x_ht#,0);
+italcorr x_ht#*slant;
+x1=good.x(w-2u-s+noise);
+x2=good.x(2u+s+noise);
+x3=good.x(w-2u-s+noise);
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% greater
+ffmchar("003E",12,x_ht#,0);
+italcorr .5x_ht#*slant;
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+x3=good.x(2u+s+noise);
+top y1=h+o+noise;
+bot y3=noise;
+y2=.5h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% at
+ffmchar("0040",16,ht#,0);
+italcorr .8ht#*slant;
+x10=good.x(1.5u+s+noise);
+w-x8=good.x(1.5u+s+noise);
+w-x7=1.5u+s+noise;
+x2=.5w+noise;
+x4=.5w+.5noise;
+x9=.5w+noise;
+x11=.5w+noise;
+x1=.65w+noise;
+x5=.65w+.5noise;
+x3=.35w+noise;
+x6=.5[x1,x7];
+top y9=h+o+noise;
+bot y11=noise-o;
+y8=.5h+noise;
+y10=.5h+noise;
+y3=.5h+noise;
+y1=.33h+noise;
+y2=.33h+noise;
+y7=.33h+noise;
+y4=.67h+.5noise;
+y5=.67h+.5noise;
+y6=.15h+noise;
+pair randir;
+randir=-randup;
+draw z1--z2
+ & half(z2,z2-z1,z3,randup,z4,z5-z4)
+ & z4--z5--z1
+ & half(z1,z1-z5,z6,randrt,z7,z8-z7)
+ & z7--z8
+ & half(z8,z8-z7,z9,-randrt,z10,randir)
+ & arc(z10,randir,z11,randrt);
+labels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+% bracketleft
+ffmchar("005B",8,ht#,comma_depth#);
+italcorr ht#*slant;
+x2=leftstemloc+noise;
+x3=leftstemloc+noise;
+w-x1=leftstemloc-ho+noise;
+w-x4=leftstemloc-ho+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y3=noise-d;
+bot y4=noise-d;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% backslash
+ffmchar("005C",10,ht#,comma_depth#);
+x1=good.x(2u+s+noise);
+x2=good.x(w-2u-s+noise);
+bot y2=noise-d-o;
+top y1=h+o+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% bracketright
+ffmchar("005D",8,ht#,comma_depth#);
+italcorr ht#*slant;
+w-x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+x1=leftstemloc-ho+noise;
+x4=leftstemloc-ho+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y3=noise-d;
+bot y4=noise-d;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% asciicircum
+ffmchar("005E",8,ht#,0);
+lft x1=eps+noise;
+x2=.5w+noise;
+rt x3=w-eps+noise;
+bot y1=x_ht+noise;
+bot y3=x_ht+noise;
+top y2=h+o+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% underscore
+ffmchar("005F",9,0,comma_depth#);
+x1=0;
+x2=w;
+bot y1=-.8d;
+bot y2=-.8d;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% braceleft
+ffmchar("007B",8,ht#,comma_depth#);
+italcorr ht#*slant;
+w-x1=leftstemloc-ho+noise;
+w-x5=leftstemloc-ho+noise;
+x2=leftstemloc+noise;
+x4=leftstemloc+noise;
+lft x3=eps+noise;
+top y1=h+o+noise;
+bot y5=noise-o-d;
+y3=.5[-d,h]+noise;
+y2=.75[-d,h]+noise;
+y4=.25[-d,h]+noise;
+pair randira;
+randira=randrt;
+draw half(z1,-randrt,z2,-randup,z3,-randira);
+draw half(z3,randira,z4,-randup,z5,randrt);
+labels(1,2,3,4,5);
+endchar;
+
+% bar
+ffmchar("007C",5,ht#,comma_depth#);
+x1=.5w+noise;
+x2=.5w+noise;
+top y1=h+o+noise;
+bot y2=noise-d-o;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% braceright
+ffmchar("007D",8,ht#,comma_depth#);
+italcorr .8ht#*slant;
+x1=leftstemloc-ho+noise;
+x5=leftstemloc-ho+noise;
+w-x2=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+rt x3=w-eps+noise;
+top y1=h+o+noise;
+bot y5=noise-o-d;
+y3=.5[-d,h]+noise;
+y2=.75[-d,h]+noise;
+y4=.25[-d,h]+noise;
+pair randira;
+randira=randrt;
+draw half(z1,randrt,z2,-randup,z3,randira);
+draw half(z3,-randira,z4,-randup,z5,-randrt);
+labels(1,2,3,4,5);
+endchar;
+
+% asciitilde
+ffmchar("007E",11,x_ht#,0);
+lft x1=eps+noise;
+x2=.3w+noise;
+x4=.7w+noise;
+x3=.5w+noise;
+rt x5=w-eps+noise;
+bot y1=.5h+noise;
+bot y4=.5h+noise;
+top y2=h+noise;
+top y5=h+noise;
+y3=.75h+noise;
+if angle direction 1 of (z2{right}...z3...z4{right}) < -90:
+ draw z1{randup}...z2{randrt}
+ ...z3{-randup}...z4{randrt}...z5{randup};
+else:
+ draw z1{randup}...z2{randrt}
+ ...z3...z4{randrt}...z5{randup};
+fi
+labels(1,2,3,4,5);
+endchar;
+
+% dash
+ffmchar("2010",6,x_ht#,0);
+italcorr .618x_ht#*slant;
+lft x1=noise;
+rt x2=w+noise;
+y1=.618h+noise;
+y2=.618h+noise;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+% section
+ffmchar("00A7",10,ht#,comma_depth#);
+italcorr .5ht#*slant;
+x1=.5w+noise;
+x2=good.x(2u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(2u+s+noise);
+x5=good.x(1.5u+s+noise);
+x6=.5w+noise;
+w-x7=leftstemloc+noise;
+w-x8=good.x(1.5u+s+noise);
+x9=.5w+noise;
+x10=leftstemloc+noise;
+y1=.65[-d,h]+noise;
+y2=.5[-d,h]+noise;
+y3=.35[-d,h]+noise;
+y4=.5[-d,h]+noise;
+y5=.5[y1,y6]+noise;
+top y6=h+noise;
+top y7=h+noise;
+y8=.5[y4,y9]+noise;
+bot y9=noise-d;
+bot y10=noise-d;
+pair randira,randirb;
+randira=-randrt;
+randirb=randrt;
+draw full(z1,randira,z2,-randup,z3,randirb,z4,randup);
+draw half(z1,randira,z5,randup,z6,z7-z6) & z6--z7;
+draw half(z3,randirb,z8,-randup,z9,z10-z9) & z9--z10;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+% exclamdown
+ffmchar("00A1",5,ht#-comma_depth#,comma_depth#);
+italcorr .8(ht#-comma_depth#)*slant;
+x1=x2=.5w+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+top y1=h+o+noise;
+y2=y1-dotincr*py;
+bot y4=noise-d-o;
+top y3=min(h-.618barheight,bot y2-eps)+noise;
+draw dotcircle(z1,z2);
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% questiondown
+ffmchar("00BF",12,ht#-comma_depth#,comma_depth#);
+w-x1=good.x(1.5u+s+noise);
+x3=good.x(2u+s+noise);
+x5=.618[x3,x1]+noise;
+x2=.618[x1,x3]+noise;
+x4=.618[x1,x3]+noise;
+x6=x7=.618[x3,x1]+noise;
+bot y1=noise-d;
+bot y2=noise-d;
+top y6=h+o+noise;
+y7=y6-dotincr*py;
+top y5=min(h-.618barheight,bot y7-eps)+noise;
+y4=.8[y2,y5]+noise;
+y3=.5[y2,y4]+noise;
+pair randir;
+randir:=-randrt;
+draw arc(z5,-randup,z4,randir)
+ & half(z4,randir,z3,-randup,z2,z1-z2)
+ & z2--z1;
+draw dotcircle(z6,z7);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% sterling
+ffmchar("00A3",11,ht#,0);
+italcorr .8ht#*slant;
+x5=good.x(1.5u+s+noise);
+x7=good.x(1.5u+s+noise);
+rt x6=w-eps+noise;
+x1=w-leftstemloc+o+noise;
+x8=w-leftstemloc+o-xgap+noise;
+x2=.618[x5,x1]+noise;
+x3=.618[x2,x5]+noise;
+x4=.618[x2,x5]+noise;
+top y1=h+noise;
+bot y5=noise;
+bot y6=noise;
+y7=barheight+noise;
+y8=barheight+noise;
+y4=barheight+noise;
+y3=.5[barheight,h]+noise;
+z2=z1+whatever*randir;
+draw z1--z2
+ & arc(z2,z2-z1,z3,z4-z3)
+ & z3--z4
+ & arc(z4,z4-z3,z5,z5-z6);
+draw z5--z6;
+draw z7--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+% greek numeral sign
+ffmchar("0374",5,ht#,0);
+italcorr ht#*slant;
+x1=.4w+noise;
+x2=.6w+noise;
+top y2=h+o+noise;
+y1=.8[barheight,x_ht]+noise;
+draw z1--z2;
+charanchortoprights_[charepscode]=(.5w,h);
+labels(1,2);
+endchar;
+
+% greek lower numeral sign
+ffmchar("0375",5,x_ht#,comma_depth#);
+x1=.4w+noise;
+x2=.6w+noise;
+top y2=noise+o;
+bot y1=noise-o-d;
+draw z1--z2;
+labels(1,2);
+endchar;
+
+%------uppercase-------
+
+ffmchar("A",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+w-x4=leftstemloc+noise;
+w-x5=leftstemloc+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+o; %no noise because of Aring
+y4=barheight+noise;
+bot y5=noise-o;
+bot y6=0; %no noise
+z6=whatever[z4,z5];
+draw z1--z2--z4--z5;
+draw half(z2,z2-z1,z3,randrt,z4,z5-z4);
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% AE
+ffmchar("00C6",22,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+x5=w-leftstemloc+o+noise;
+x6=w-leftstemloc+o-xgap+noise;
+x7=w-leftstemloc+o+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+bot y4=noise;
+top y5=h+noise;
+y6=barheight+noise;
+bot y7=noise;
+draw z1--z2--z6;
+draw arc(z2,z2-z1,z3,z5-z3);
+draw z5--z3--z4--z7;
+charanchortops_[charepscode]=(x3,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("B",14,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x7=.5[w-x1,lft w]+noise;
+x5=.85[x1,x7]+noise;
+x8=.5[x1,x5]+noise;
+x4=.4[x1,x5]+noise;
+x6=.4[x1,x5]+noise;
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+y4=y3+noise;
+y6=y2+.5noise;
+bot y8=noise;
+y5=.5[y4,y6]+noise;
+y7=.5[y6,y8]+noise;
+z2=whatever[z1,z3];
+z9=whatever[z2,z6];
+draw z1--z3--z4
+ & half(z4,z4-z3,z5,-randup,z6,z2-z6)
+ & z6--z2;
+draw half(z6,z6-z2,z7,-randup,z8,z1-z8)
+ & z8--z1;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+ffmchar("C",14,ht#,0);
+italcorr ht#*slant;
+x1=w-leftstemloc+ho+noise;
+x2=.55w+noise;
+x3=good.x(1.5u+s+noise);
+x4=.55w+noise;
+x5=w-leftstemloc+ho+noise;
+top y1=h+noise;
+top y2=h+noise;
+y3=barheight+noise;
+bot y4=0; %no noise!
+z5=z4+whatever*randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z4;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("D",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.45w+noise;
+x5=.45w+noise;
+w-x4=good.x(1.5u+s+noise);
+bot y1=noise;
+bot y5=noise;
+top y2=h+noise;
+top y3=h+noise;
+y4=barheight+noise;
+draw z1--z2--z3
+ & half(z3,z3-z2,z4,-randup,z5,z1-z5)
+ & z5--cycle;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+% Eth
+ffmchar("00D0",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x5=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x6=eps+noise;
+x7=.5w+noise;
+bot y1=noise;
+bot y5=noise;
+top y2=h+noise;
+top y3=h+noise;
+y4=barheight+noise;
+y6=barheight+noise;
+y7=barheight+noise;
+draw z1--z2--z3
+ & half(z3,z3-z2,z4,-randup,z5,z1-z5)
+ & z5--cycle;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("E",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+x6=w-leftstemloc+ho+noise;
+x7=.9[x1,x6];
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+bot y7=0;
+z2=whatever[z1,z3];
+z6=whatever[z1,z7];
+draw z6--z1--z2--z5;
+draw z2--z3--z4;
+charanchortops_[charepscode]=(.5[leftstemloc,w-leftstemloc+o],h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z7;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("F",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+z2=whatever[z1,z3];
+draw z1--z2--z5;
+draw z2--z3--z4;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("G",14,ht#,0);
+italcorr ht#*slant;
+x3=good.x(1.5u+s+noise);
+x1=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+x6=w-leftstemloc+noise;
+x2=.55w+noise;
+x4=.55w+noise;
+x7=.55w+noise;
+y3=barheight+noise;
+y6=barheight+noise;
+y7=barheight+noise;
+top y2=h+noise;
+top y1=h+noise;
+bot y4=noise;
+bot y5=noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5--z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+charanchorcedillas_[charepscode]=z4;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("H",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+bot y3=noise-o;
+top y4=h+o+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+z5=whatever[z1,z2];
+z6=whatever[z3,z4];
+draw z1--z5--z6--z3;
+draw z5--z2;
+draw z6--z4;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("I",6,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=.5w+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.5w+noise,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z1;
+labels(1,2);
+endchar;
+
+ffmchar("J",9,ht#,0);
+italcorr .8ht#*slant;
+lft x1=noise-eps;
+x2=x1+.5u;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+bot y1=noise-o;
+y3=barheight+noise;
+top y4=h+noise;
+z2=z1+whatever*randrt;
+draw z1--z2
+ & arc(z2,randrt,z3,z4-z3)
+ & z3--z4;
+charanchortops_[charepscode]=(x4,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4);
+endchar;
+
+ffmchar("K",13,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x5=good.x(1.5u+s+noise);
+w-x6=good.x(1.5u+s+noise);
+bot y1=noise-o;
+bot y6=noise-o;
+top y2=h+o+noise;
+top y5=h+o+noise;
+y3=.618[y2,y1]+noise;
+z3=whatever[z1,z2];
+z4=whatever[z3,z5]=whatever[z2,z6];
+draw z1--z2;
+draw z3--z5;
+draw z4--z6;
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("L",12,ht#,0);
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+rt x3=w-eps+noise;
+bot y1=noise;
+bot y3=noise;
+top y2=h+noise;
+draw z3--z1--z2;
+charanchortops_[charepscode]=(leftstemloc,h);
+charanchortoprights_[charepscode]=(.618w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3);
+endchar;
+
+% Lslash
+ffmchar("0141",13,ht#,0);
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc-ho+noise;
+lft x4=eps+noise;
+x5=.45w+noise;
+bot y1=noise;
+bot y3=noise;
+top y2=h+noise;
+y4=.4h+noise;
+z5=z4+whatever*dir(40);
+draw z3--z1--z2;
+draw z4--z5;
+charanchortops_[charepscode]=(leftstemloc,h);
+charanchortoprights_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("M",18,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+bot y3=ygap-o+noise;
+top y4=h+o+noise;
+bot y5=noise-o;
+draw z1--z2--z3--z4--z5;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("N",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+y3=y4+ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+z3=whatever[z4,z5];
+draw z1--z2--z3;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5);
+endchar;
+
+% Eng
+ffmchar("014A",15,ht#,acc_depth#);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+x6=.5w+noise;
+x7=.382w+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+y3=y4+ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+bot y6=noise-d;
+z7=z6+whatever*randrt;
+z3=whatever[z4,z5];
+draw z1--z2--z3;
+draw z7--z6
+ & arc(z6,z6-z7,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("O",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4);
+endchar;
+
+% Oslash
+ffmchar("00D8",15,ht#,0);
+italcorr ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=good.x(1.5u+s+noise);
+w-x6=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+bot y5=noise-o;
+top y6=h+o+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% OE
+ffmchar("0152",22,ht#,0);
+italcorr .9ht#*slant;
+x2=.5w+noise;
+x4=good.x(1.5u+s+noise);
+x6=.5w+noise;
+x7=w-leftstemloc+o+noise;
+x9=w-leftstemloc+o-xgap+noise;
+x1=w-leftstemloc+o+noise;
+x3=.382w+noise;
+x5=.382w+noise;
+y4=barheight+noise;
+y8=barheight+noise;
+top y7=h+noise;
+y9=barheight+noise;
+bot y1=noise;
+bot y3=noise;
+top y5=h+noise;
+z2=whatever[z1,z3];
+z6=whatever[z5,z7];
+z8=whatever[z2,z6];
+draw z1--z3
+ & half(z3,z3-z1,z4,randup,z5,z7-z5)
+ & z5--z7;
+draw z2--z8--z9;
+draw z6--z8;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+ffmchar("P",14,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x5=.618[x1,w-x1]+noise;
+x6=.5[w-x1,lft w]+noise;
+y2=barheight+noise;
+y5=barheight+noise;
+bot y1=noise-o;
+top y3=h+noise;
+top y4=h+noise;
+y6=.5[y4,y5]+noise;
+z2=whatever[z1,z3];
+draw z1--z3--z4
+ & half(z4,z4-z3,z6,-randup,z5,z2-z5)
+ & z5 -- z2;
+labels(1,2,3,4,5,6);
+endchar;
+
+% Thorn
+ffmchar("00DE",14,ht#,0);
+italcorr .7ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x5=.618[x1,w-x1]+noise;
+x6=.5[w-x1,lft w]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+y3=.764h+noise;
+y4=.764h+noise;
+y6=.5[y4,y5]+noise;
+y5=.382h+noise;
+y7=.382h+noise;
+z3=whatever[z1,z2];
+z7=whatever[z1,z2];
+draw z1--z2;
+draw z3--z4
+ & half(z4,z4-z3,z6,-randup,z5,z7-z5)
+ & z5--z7;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("Q",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=min(.618[x4,x3],x4-2px)+noise;
+w-x6=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+y5=.618[y3,y4]+noise;
+bot y6=noise-o;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("R",14,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x6=.618[x1,w-x1]+noise;
+x5=.5[w-x1,lft w]+noise;
+x7=.5[w-x1,lft w]+noise;
+y2=barheight+noise;
+y6=barheight+noise;
+bot y1=noise-o;
+bot y7=noise-o;
+top y3=h+noise;
+top y4=h+noise;
+y5=.5[y4,y6]+noise;
+z2=whatever[z1,z3];
+draw z1--z3--z4
+ & half(z4,z4-z3,z5,-randup,z6,z2-z6)
+ & z6--z2;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("S",14,ht#,0);
+italcorr .8ht#*slant;
+x3=good.x(2u+s+noise);
+x8=good.x(2u+s+noise);
+w-x1=good.x(3u+s+noise);
+x2=.382[x3,x1]+noise;
+x4=.382[x3,x1]+noise;
+x5=.9[x3,x1]+noise;
+x7=.9[x3,x1]+noise;
+w-x6=good.x(1.75u+.5s+noise);
+x9=.618[x8,x7];
+top y1=h+noise;
+top y2=h+noise;
+y3=.6[y2,y4]+noise;
+y4=barheight+noise;
+y5=barheight+noise;
+y6=.3[y5,y7]+noise;
+bot y9=0;
+z7=z9+whatever*randrt;
+z8=whatever[z7,z9];
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5
+ & half(z5,z5-z4,z6,-randup,z7,z8-z7)
+ & z7--z8;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z9;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% Germandbls
+ffmchar("1E9E",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x5=.5w+noise;
+x7=.5w+noise;
+w-x4=leftstemloc+noise;
+w-x6=good.x(1.5u+s+noise);
+x8=.4w+noise;
+bot y1=noise-o;
+bot y8=noise;
+y2=barheight+noise;
+top y3=h+o+noise;
+y5=barheight+noise;
+y4=.5[y5,y3]+noise;
+y6=.5[y7,y5]+noise;
+z7=z8+whatever*randrt;
+pair randira,randirb;
+randira:=randrt;
+randirb:=randrt;
+draw z1--z2
+ & arc(z2,randup,z3,randira)
+ & half(z3,randira,z4,-randup,z5,-randirb);
+draw half(z5,randirb,z6,-randup,z7,z8-z7)
+ & z7--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+ffmchar("T",13,ht#,0);
+italcorr ht#*slant+.5u#;
+if .5w<>good.x .5w: change_width; fi
+lft x1=noise-eps;
+rt x2=w+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y4=noise-o;
+z3=whatever[z1,z2];
+draw z1--z2;
+draw z3--z4;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(x4,0);
+labels(1,2,3,4);
+endchar;
+
+ffmchar("U",15,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x4]+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+top y5=h+o+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z3;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("V",13,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise)-ho;
+w-x3=good.x(1.5u+s+noise)-ho;
+x2=.5[x1,x3]+noise;
+top y1=h+o+noise;
+bot y2=noise-o;
+top y3=h+o+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+ffmchar("W",20,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise)-ho;
+w-x5=good.x(1.5u+s+noise)-ho;
+x3=.5[x1,x5]+noise;
+top y1=h+o+noise;
+bot y2=noise-o;
+y3=y1-ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+z4=z5+whatever*(x5-x1,4*(y1-y2)-2ygap);
+z2=z1+whatever*(x1-x5,4*(y1-y2)-2ygap);
+draw z1--z2--z3;
+draw z3--z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("X",13,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise);
+x3=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+w-x4=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+top y4=h+o+noise;
+bot y3=noise-o;
+bot y2=noise-o;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+ffmchar("Y",15.5,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+.5noise;
+w-x4=leftstemloc+.5noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x5]+noise;
+x6=.5[x1,x5]+noise;
+top y1=h+o+noise;
+top y5=h+o+noise;
+bot y6=noise-o;
+y3=barheight+noise;
+y2=.618[y3,y5]+noise;
+y4=.618[y3,y5]+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+draw z6--z3;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("Z",15,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+w-x2=leftstemloc+noise;
+x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y3=noise;
+bot y4=noise;
+draw z1--z2--z3--z4;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4);
+endchar;
+
+%IJ
+ffmchainedchar("0132","I","J",0);
+
+% Aacute
+ffmcombinedchar("00C1","A","00B4","top",ht#+acc_ht#,0);
+
+% Agrave
+ffmcombinedchar("00C0","A","0060","top",ht#+acc_ht#,0);
+
+% Adieresis
+ffmcombinedchar("00C4","A","00A8","top",ht#+acc_ht#,0);
+
+% Acircumflex
+ffmcombinedchar("00C2","A","02C6","top",ht#+acc_ht#,0);
+
+% Atilde
+ffmcombinedchar("00C3","A","02DC","top",ht#+acc_ht#,0);
+
+% Aring
+ffmcombinedchar("00C5","A","02DA","top",ht#+acc_ht#,0);
+
+% Amacron
+ffmcombinedchar("0100","A","00AF","top",ht#+acc_ht#,0);
+
+% Abreve
+ffmcombinedchar("0102","A","02D8","top",ht#+acc_ht#,0);
+
+% Aogonek
+ffmcombinedchar("0104","A","02DB","cedilla",ht#,acc_depth#);
+
+% Adotbelow
+ffmcombinedchar("1EA0","A","0323","bot",ht#,acc_depth#);
+
+% AEacute
+ffmcombinedchar("01FC","00C6","00B4","top",ht#+acc_ht#,0);
+
+% Cacute
+ffmcombinedchar("0106","C","00B4","top",ht#+acc_ht#,0);
+
+% Ccaron
+ffmcombinedchar("010C","C","02C7","top",ht#+acc_ht#,0);
+
+% Ccedilla
+ffmcombinedchar("00C7","C","00B8","cedilla",ht#,acc_depth#);
+
+% Ccircumflex
+ffmcombinedchar("0108","C","02C6","top",ht#+acc_ht#,0);
+
+% Cdotaccent
+ffmcombinedchar("010A","C","02D9","top",ht#+acc_ht#,0);
+
+% Dcaron
+ffmcombinedchar("010E","D","02C7","top",ht#+acc_ht#,0);
+
+% Dcroat
+ffmcopiedchar("0110","00D0");
+
+% Eacute
+ffmcombinedchar("00C9","E","00B4","top",ht#+acc_ht#,0);
+
+% Egrave
+ffmcombinedchar("00C8","E","0060","top",ht#+acc_ht#,0);
+
+% Edieresis
+ffmcombinedchar("00CB","E","00A8","top",ht#+acc_ht#,0);
+
+% Ecircumflex
+ffmcombinedchar("00Ca","E","02C6","top",ht#+acc_ht#,0);
+
+% Ecaron
+ffmcombinedchar("011A","E","02C7","top",ht#+acc_ht#,0);
+
+% Eogonek
+ffmcombinedchar("0118","E","02DB","cedilla",ht#,acc_depth#);
+
+% Emacron
+ffmcombinedchar("0112","E","00AF","top",ht#+acc_ht#,0);
+
+% Ebreve
+ffmcombinedchar("0114","E","02D8","top",ht#+acc_ht#,0);
+
+% Edotaccent
+ffmcombinedchar("0116","E","02D9","top",ht#+acc_ht#,0);
+
+% Etilde
+ffmcombinedchar("1EBC","E","02DC","top",ht#+acc_ht#,0);
+
+% Edotbelow
+ffmcombinedchar("1EB8","E","0323","bot",ht#,acc_depth#);
+
+% Gcircumflex
+ffmcombinedchar("011C","G","02C6","top",ht#+acc_ht#,0);
+
+% Gbreve
+ffmcombinedchar("011E","G","02D8","top",ht#+acc_ht#,0);
+
+% Gdotaccent
+ffmcombinedchar("0120","G","02D9","top",ht#+acc_ht#,0);
+
+% Gcedilla
+ffmcombinedchar("0122","G","00B8","cedilla",ht#,acc_depth#);
+
+% Gcaron
+ffmcombinedchar("01E6","G","02C7","top",ht#+acc_ht#,0);
+
+% Hcircumflex
+ffmcombinedchar("0124","H","02C6","top",ht#+acc_ht#,0);
+
+% Iacute
+ffmcombinedchar("00CD","I","00B4","top",ht#+acc_ht#,0);
+
+% Igrave
+ffmcombinedchar("00CC","I","0060","top",ht#+acc_ht#,0);
+
+% Idieresis
+ffmcombinedchar("00CF","I","00A8","top",ht#+acc_ht#,0);
+
+% Icircumflex
+ffmcombinedchar("00CE","I","02C6","top",ht#+acc_ht#,0);
+
+% Idotaccent
+ffmcombinedchar("0130","I","02D9","top",ht#+acc_ht#,0);
+
+% Itilde
+ffmcombinedchar("0128","I","02DC","top",ht#+acc_ht#,0);
+
+% Imacron
+ffmcombinedchar("012A","I","00AF","top",ht#+acc_ht#,0);
+
+% Ibreve
+ffmcombinedchar("012C","I","02D8","top",ht#+acc_ht#,0);
+
+% Iogonek
+ffmcombinedchar("012E","I","02DB","cedilla",ht#,acc_depth#);
+
+% Idotbelow
+ffmcombinedchar("1ECA","I","0323","bot",ht#,acc_depth#);
+
+% Jcircumflex
+ffmcombinedchar("0134","J","02C6","top",ht#+acc_ht#,0);
+
+% Kcedilla
+ffmcombinedchar("0136","K","0326","bot",ht#,acc_depth#);
+
+% Lacute
+ffmcombinedchar("0139","L","00B4","top",ht#+acc_ht#,0);
+
+% Lcaron
+ffmcombinedchar("013D","L","2019","topright",ht#+acc_ht#,0);
+
+% Lcedilla
+ffmcombinedchar("013B","L","0326","bot",ht#,acc_depth#);
+
+% Ldot
+ffmchainedchar("013F","L","00B7",-5);
+
+% Nacute
+ffmcombinedchar("0143","N","00B4","top",ht#+acc_ht#,0);
+
+% Ntilde
+ffmcombinedchar("00D1","N","02DC","top",ht#+acc_ht#,0);
+
+% Ncaron
+ffmcombinedchar("0147","N","02C7","top",ht#+acc_ht#,0);
+
+% Ncedilla
+ffmcombinedchar("0145","N","0326","bot",ht#,acc_depth#);
+
+% Oacute
+ffmcombinedchar("00D3","O","00B4","top",ht#+acc_ht#,0);
+
+% Ograve
+ffmcombinedchar("00D2","O","0060","top",ht#+acc_ht#,0);
+
+% Odieresis
+ffmcombinedchar("00D6","O","00A8","top",ht#+acc_ht#,0);
+
+% Ocircumflex
+ffmcombinedchar("00D4","O","02C6","top",ht#+acc_ht#,0);
+
+% Otilde
+ffmcombinedchar("00D5","O","02DC","top",ht#+acc_ht#,0);
+
+% Ohungarumlaut
+ffmcombinedchar("0150","O","02DD","top",ht#+acc_ht#,0);
+
+% Omacron
+ffmcombinedchar("014C","O","00AF","top",ht#+acc_ht#,0);
+
+% Obreve
+ffmcombinedchar("014E","O","02D8","top",ht#+acc_ht#,0);
+
+% Odotbelow
+ffmcombinedchar("1ECC","O","0323","bot",ht#,acc_depth#);
+
+% Oslashacute
+ffmcombinedchar("01FE","00D8","00B4","top",ht#+acc_ht#,0);
+
+% Racute
+ffmcombinedchar("0154","R","00B4","top",ht#+acc_ht#,0);
+
+% Rcaron
+ffmcombinedchar("0158","R","02C7","top",ht#+acc_ht#,0);
+
+% Rcedilla
+ffmcombinedchar("0156","R","0326","bot",ht#,acc_depth#);
+
+% Sacute
+ffmcombinedchar("015A","S","00B4","top",ht#+acc_ht#,0);
+
+% Scaron
+ffmcombinedchar("0160","S","02C7","top",ht#+acc_ht#,0);
+
+% Scedilla
+ffmcombinedchar("015E","S","00B8","cedilla",ht#,acc_depth#);
+
+% Scircumflex
+ffmcombinedchar("015C","S","02C6","top",ht#+acc_ht#,0);
+
+% Scommaaccent
+ffmcombinedchar("0218","S","0326","bot",ht#,acc_depth#);
+
+% Tcaron
+ffmcombinedchar("0164","T","02C7","top",ht#+acc_ht#,0);
+
+% Tcommaaccent
+ffmcombinedchar("021A","T","0326","bot",ht#,acc_depth#);
+
+% Tcedilla
+ffmcopiedchar("0162","021A");
+
+% Uacute
+ffmcombinedchar("00DA","U","00B4","top",ht#+acc_ht#,0);
+
+% Ugrave
+ffmcombinedchar("00D9","U","0060","top",ht#+acc_ht#,0);
+
+% Udieresis
+ffmcombinedchar("00DC","U","00A8","top",ht#+acc_ht#,0);
+
+% Ucircumflex
+ffmcombinedchar("00DB","U","02C6","top",ht#+acc_ht#,0);
+
+% Uhungarumlaut
+ffmcombinedchar("0170","U","02DD","top",ht#+acc_ht#,0);
+
+% Uring
+ffmcombinedchar("016E","U","02DA","top",ht#+acc_ht#,0);
+
+% Utilde
+ffmcombinedchar("0168","U","02DC","top",ht#+acc_ht#,0);
+
+% Umacron
+ffmcombinedchar("016A","U","00AF","top",ht#+acc_ht#,0);
+
+% Ubreve
+ffmcombinedchar("016C","U","02D8","top",ht#+acc_ht#,0);
+
+% Uogonek
+ffmcombinedchar("0172","U","02DB","cedilla",ht#,acc_depth#);
+
+% Udotbelow
+ffmcombinedchar("1EE4","U","0323","bot",ht#,acc_depth#);
+
+% Wcircumflex
+ffmcombinedchar("0174","W","02C6","top",ht#+acc_ht#,0);
+
+% Wgrave
+ffmcombinedchar("1E80","W","0060","top",ht#+acc_ht#,0);
+
+% Wacute
+ffmcombinedchar("1E82","W","00B4","top",ht#+acc_ht#,0);
+
+% Wdieresis
+ffmcombinedchar("1E84","W","00A8","top",ht#+acc_ht#,0);
+
+% Yacute
+ffmcombinedchar("00DD","Y","00B4","top",ht#+acc_ht#,0);
+
+% Ydieresis
+ffmcombinedchar("0178","Y","00A8","top",ht#+acc_ht#,0);
+
+% Ycircumflex
+ffmcombinedchar("0176","Y","02C6","top",ht#+acc_ht#,0);
+
+% Ygrave
+ffmcombinedchar("1EF2","Y","0060","top",ht#+acc_ht#,0);
+
+% Ytilde
+ffmcombinedchar("1EF8","Y","02DC","top",ht#+acc_ht#,0);
+
+% Ymacron
+ffmcombinedchar("0232","Y","00AF","top",ht#+acc_ht#,0);
+
+% Zacute
+ffmcombinedchar("0179","Z","00B4","top",ht#+acc_ht#,0);
+
+% Zcaron
+ffmcombinedchar("017D","Z","02C7","top",ht#+acc_ht#,0);
+
+% Zdotaccent
+ffmcombinedchar("017B","Z","02D9","top",ht#+acc_ht#,0);
+
+%------Greek uppercase-------
+
+% Alpha
+ffmcopiedchar("0391","A");
+
+% Beta
+ffmcopiedchar("0392","B");
+
+% Gamma
+ffmchar("0393",12,ht#,0);
+italcorr ht#*slant+.5u#;
+if .5w<>good.x .5w: change_width; fi
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+rt x3=w+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% Delta
+ffmchar("0394",15,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+bot y1=noise;
+bot y2=noise;
+top y3=h+o+noise;
+draw z1--z2--z3--cycle;
+labels(1,2,3);
+endchar;
+
+% Epsilon
+ffmcopiedchar("0395","E");
+
+% Zeta
+ffmcopiedchar("0396","Z");
+
+% Eta
+ffmcopiedchar("0397","H");
+
+% Theta
+ffmchar("0398",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+lft x5=max(rt x2+2u,.35w)+noise;
+rt x6=min(lft x4-2u,.65w)+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% Iota
+ffmcopiedchar("0399","I");
+
+% Kappa
+ffmcopiedchar("039A","K");
+
+% Lambda
+ffmchar("039B",13,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+bot y1=noise-o;
+bot y2=noise-o;
+top y3=h+o+noise;
+draw z1--z3--z2;
+labels(1,2,3);
+endchar;
+
+% Mu
+ffmcopiedchar("039C","M");
+
+% Nu
+ffmcopiedchar("039D","N");
+
+% Xi
+ffmchar("039E",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+x5=.3w+noise;
+x6=.7w+noise;
+bot y1=noise;
+top y2=h+noise;
+bot y3=noise;
+top y4=h+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+draw z1--z3;
+draw z2--z4;
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% Omicron
+ffmcopiedchar("039F","O");
+
+% Pi
+ffmchar("03A0",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+bot y4=noise-o;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% Rho
+ffmcopiedchar("03A1","P");
+
+% Sigma
+ffmchar("03A3",14,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+x2=.5[x1,x5];
+x3=good.x(1.5u+s+noise);
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho+noise;
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+bot y5=0;
+draw z5--z1--z2--z3--z4;
+charanchortops_[charepscode]=(.5[leftstemloc,w-leftstemloc+o],h);
+labels(1,2,3,4,5);
+endchar;
+
+% Tau
+ffmcopiedchar("03A4","T");
+
+% Upsilon
+ffmcopiedchar("03A5","Y");
+
+% Phi
+ffmchar("03A6",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+top y1=.85h+o+noise;
+y2=barheight+noise;
+bot y3=.15h-o+noise;
+y4=barheight+noise;
+bot y5=noise-o;
+top y6=h+o+noise;
+z5=whatever[z1,z3];
+z6=whatever[z1,z3];
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% Xi
+ffmcopiedchar("03A7","X");
+
+% Psi
+ffmchar("03A8",18,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+.5noise;
+w-x4=leftstemloc+.5noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x5]+noise;
+x6=.5[x1,x5]+noise;
+top y1=h+o+noise;
+top y5=h+o+noise;
+bot y6=noise-o;
+top y7=h+o+noise;
+y3=barheight+noise;
+y2=.618[y3,y5]+noise;
+y4=.618[y3,y5]+noise;
+z7=whatever[z6,z3];
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% Omega
+ffmchar("03A9",15,ht#,0);
+italcorr .8ht#*slant;
+x1=good.x(1.5u+s+noise);
+lft x8-rt x2=2.5u+noise;
+.5[x2,x8]=.5w;
+x4=good.x(1.5u+s+noise);
+x5=.5w+noise;
+w-x6=good.x(1.5u+s+noise);
+w-x9=good.x(1.5u+s+noise);
+lft x7-rt x3=2.5u+noise;
+.5[x3,x7]=.5w;
+bot y1=noise;
+bot y2=noise;
+bot y3=max(top y2+eps,.15h+noise);
+top y5=h+o+noise;
+y4=.4[y3,y5]+noise;
+y6=.4[y7,y5]+noise;
+bot y8=noise;
+bot y7=max(top y8+eps,.15h+noise);
+bot y9=noise;
+pair randdir;
+randdir:=randrt;
+draw z1--z2--z3
+ & half(z3,-randrt,z4,randup,z5,randdir)
+ & half(z5,randdir,z6,-randup,z7,-randrt)
+ & z7--z8--z9;
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% Digamma
+ffmchar("03DC",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+z2=whatever[z1,z3];
+draw z1--z2--z5;
+draw z2--z3--z4;
+labels(1,2,3,4,5);
+endchar;
+
+% Schwa
+ffmchar("018F",13,ht#,0);
+italcorr .8ht#*slant;
+w-x1=good.x(1.5u+s+noise);
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+x4=.5w+noise;
+x5=.2[x2,x1];
+y1=barheight+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+top y4=h+noise;
+top y5=h+noise;
+pair randir;
+randir:=randup;
+draw z1--z2
+ & half(z2,-randup,z3,randrt,z1,randir)
+ & arc(z1,randir,z4,z5-z4)
+ & z4--z5;
+labels(1,2,3,4,5);
+endchar;
+
+% Archaic Koppa
+ffmchar("03D8",15,ht#,acc_depth#);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=.5w+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+bot y5=noise-d;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z3--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+% Sampi
+ffmchar("03E0",14,ht#,0);
+italcorr ht#*slant;
+lft x1=rt x3+noise;
+w-x2=good.x(1.5u+s-ho)+noise;
+x3=good.x(1.5u+s-ho)+noise;
+x5=.4[x3,x2];
+top y1=h+o+noise;
+bot y2=noise-o;
+bot y3=noise-o;
+y4=.8h;
+bot y5=noise-o;
+z4=whatever[z1,z2];
+z6=whatever[z1,z2]=z5+(noise,noise)+whatever*(z4-z3);
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% Stigma variant
+ffmchar("E001",20,ht#,0);
+italcorr ht#*slant+.5u#;
+x1=w-leftstemloc+ho+noise;
+x2=.4w+noise;
+x3=good.x(1.5u+s+noise);
+x4=.4w+noise;
+x5=.6w+noise;
+x6=.6w+noise;
+top y1=h+noise;
+top y2=h+noise;
+y3=barheight+noise;
+bot y4=0; %no noise!
+z5=z4+whatever*randrt;
+z6=whatever[z1,z2];
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=z4;
+labels(1,2,3,4,5,6);
+endchar;
+
+% acrophonic attic fifty
+ffmchar("10144",17,ht#,0);
+%message decimal(hex("10144"));
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+x5=.5[x2,x3]+noise;
+lft x6=.1[rt x2,lft x3]+noise;
+rt x7=.9[rt x2,lft x3]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+y4=.3h+noise;
+top y5=bot y2-.1h+noise;
+y6=.3h+noise;
+y7=.3h+noise;
+draw z1--z2--z3--z4;
+draw z5--z6--z7--cycle;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% acrophonic attic five hundred
+ffmchar("10145",17,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+lft x5=.15[rt x2,lft x3]+noise;
+lft x6=.15[rt x2,lft x3]+noise;
+rt x7=.85[rt x2,lft x3]+noise;
+rt x8=.85[rt x2,lft x3]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+y4=.3h+noise;
+y5=.3h+noise;
+top y6=bot y2-.1h+noise;
+top y7=bot y2-.1h+noise;
+y8=.3h+noise;
+y9=.5[y5,y6];
+y10=.5[y9,y10];
+z9=whatever[z5,z6];
+z10=whatever[z7,z8];
+draw z1--z2--z3--z4;
+draw z5--z6;
+draw z7--z8;
+draw z9--z10;
+labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+% acrophonic attic five thousand
+ffmchar("10146",17,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+lft x5=.15[rt x2,lft x3]+noise;
+lft x6=.15[rt x2,lft x3]+noise;
+rt x7=.85[rt x2,lft x3]+noise;
+rt x8=.85[rt x2,lft x3]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+y4=.3h+noise;
+y5=.3h+noise;
+top y6=bot y2-.1h+noise;
+top y7=bot y2-.1h+noise;
+y8=.3h+noise;
+draw z1--z2--z3--z4;
+draw z5--z7;
+draw z6--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+% acrophonic attic fifty thousand
+ffmchar("10147",17,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+lft x5=.1[rt x2,lft x3]+noise;
+lft x6=.1[rt x2,lft x3]+noise;
+x7=.5[x6,x8]+noise;
+rt x8=.9[rt x2,lft x3]+noise;
+rt x9=.9[rt x2,lft x3]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+y4=.3h+noise;
+y5=.3h+noise;
+top y6=bot y2-.1h+noise;
+y7=.3[y5,y6]+noise;
+top y8=bot y2-.1h+noise;
+y9=.3h+noise;
+draw z1--z2--z3--z4;
+draw z5--z6--z7--z8--z9;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% Alpha with prosgegrammeni
+ffmcombinedchar("1FBC","0391","1FBE","bot",ht#,comma_depth#);
+
+% Alpha with tonos
+ffmchainedchar("0386","0384","0391",-2);
+
+% Alpha with psili
+ffmchainedchar("1F08","1FBF","0391",-2);
+
+% Alpha with dasia
+ffmchainedchar("1F09","1FFE","0391",-1);
+
+% Alpha with psili and varia
+ffmchainedchar("1F0A","1FCD","0391",-1);
+
+% Alpha with dasia and varia
+ffmchainedchar("1F0B","1FDD","0391",-1);
+
+% Alpha with psili and oxia
+ffmchainedchar("1F0C","1FCE","0391",-2);
+
+% Alpha with dasia and oxia
+ffmchainedchar("1F0D","1FDE","0391",-2);
+
+% Alpha with psili and perispomeni
+ffmchainedchar("1F0E","1FCF","0391",-4);
+
+% Alpha with dasia and perispomeni
+ffmchainedchar("1F0F","1FDF","0391",-4);
+
+% Alpha with psili and prosgegrammeni
+ffmchainedchar("1F88","1FBF","1FBC",-2);
+
+% Alpha with dasia and prosgegrammeni
+ffmchainedchar("1F89","1FFE","1FBC",-1);
+
+% Alpha with psili and varia and prosgegrammeni
+ffmchainedchar("1F8A","1FCD","1FBC",-1);
+
+% Alpha with dasia and varia and prosgegrammeni
+ffmchainedchar("1F8B","1FDD","1FBC",-1);
+
+% Alpha with psili and oxia and prosgegrammeni
+ffmchainedchar("1F8C","1FCE","1FBC",-2);
+
+% Alpha with dasia and oxia and prosgegrammeni
+ffmchainedchar("1F8D","1FDE","1FBC",-2);
+
+% Alpha with psili and perispomeni and prosgegrammeni
+ffmchainedchar("1F8E","1FCF","1FBC",-4);
+
+% Alpha with dasia and perispomeni and prosgegrammeni
+ffmchainedchar("1F8F","1FDF","1FBC",-4);
+
+% Alpha with vrachy
+ffmcombinedchar("1FB8","0391","02D8","top",ht#+acc_ht#,0);
+
+% Alpha with macron
+ffmcombinedchar("1FB9","0391","00AF","top",ht#+acc_ht#,0);
+
+% Alpha with varia
+ffmchainedchar("1FBA","1FEF","0391",-1);
+
+% Alpha with oxia
+ffmcopiedchar("1FBB","0386");
+
+% Eta with ypogegrammeni
+ffmcombinedchar("1FCC","0397","1FBE","bot",ht#,comma_depth#);
+
+% Eta with tonos
+ffmchainedchar("0389","0384","0397",-1);
+
+% Eta with psili
+ffmchainedchar("1F28","1FBF","0397",0);
+
+% Eta with dasia
+ffmchainedchar("1F29","1FFE","0397",0);
+
+% Eta with psili and varia
+ffmchainedchar("1F2A","1FCD","0397",0);
+
+% Eta with dasia and varia
+ffmchainedchar("1F2B","1FDD","0397",0);
+
+% Eta with psili and oxia
+ffmchainedchar("1F2C","1FCE","0397",-1);
+
+% Eta with dasia and oxia
+ffmchainedchar("1F2D","1FDE","0397",-1);
+
+% Eta with psili and perispomeni
+ffmchainedchar("1F2E","1FCF","0397",-2);
+
+% Eta with dasia and perispomeni
+ffmchainedchar("1F2F","1FDF","0397",-2);
+
+% Eta with psili and prosgegrammeni
+ffmchainedchar("1F98","1FBF","1FCC",0);
+
+% Eta with dasia and prosgegrammeni
+ffmchainedchar("1F99","1FFE","1FCC",0);
+
+% Eta with psili and varia and prosgegrammeni
+ffmchainedchar("1F9A","1FCD","1FCC",0);
+
+% Eta with dasia and varia and prosgegrammeni
+ffmchainedchar("1F9B","1FDD","1FCC",0);
+
+% Eta with psili and oxia and prosgegrammeni
+ffmchainedchar("1F9C","1FCE","1FCC",-1);
+
+% Eta with dasia and oxia and prosgegrammeni
+ffmchainedchar("1F9D","1FDE","1FCC",-1);
+
+% Eta with psili and perispomeni and prosgegrammeni
+ffmchainedchar("1F9E","1FCF","1FCC",-2);
+
+% Eta with dasia and perispomeni and prosgegrammeni
+ffmchainedchar("1F9F","1FDF","1FCC",-2);
+
+% Eta with varia
+ffmchainedchar("1FCA","1FEF","0397",0);
+
+% Eta with oxia
+ffmcopiedchar("1FCB","0389");
+
+% Omega with ypogegrammeni
+ffmcombinedchar("1FFC","03A9","1FBE","bot",ht#,comma_depth#);
+
+% Omega with tonos
+ffmchainedchar("038F","0384","03A9",-1);
+
+% Omega with psili
+ffmchainedchar("1F68","1FBF","03A9",-1);
+
+% Omega with dasia
+ffmchainedchar("1F69","1FFE","03A9",0);
+
+% Omega with psili and varia
+ffmchainedchar("1F6A","1FCD","03A9",0);
+
+% Omega with dasia and varia
+ffmchainedchar("1F6B","1FDD","03A9",0);
+
+% Omega with psili and oxia
+ffmchainedchar("1F6C","1FCE","03A9",-1);
+
+% Omega with dasia and oxia
+ffmchainedchar("1F6D","1FDE","03A9",-1);
+
+% Omega with psili and perispomeni
+ffmchainedchar("1F6E","1FCF","03A9",-3);
+
+% Omega with dasia and perispomeni
+ffmchainedchar("1F6F","1FDF","03A9",-3);
+
+% Omega with psili and prosgegrammeni
+ffmchainedchar("1FA8","1FBF","1FFC",-1);
+
+% Omega with dasia and prosgegrammeni
+ffmchainedchar("1FA9","1FFE","1FFC",0);
+
+% Omega with psili and varia and prosgegrammeni
+ffmchainedchar("1FAA","1FCD","1FFC",0);
+
+% Omega with dasia and varia and prosgegrammeni
+ffmchainedchar("1FAB","1FDD","1FFC",0);
+
+% Omega with psili and oxia and prosgegrammeni
+ffmchainedchar("1FAC","1FCE","1FFC",-1);
+
+% Omega with dasia and oxia and prosgegrammeni
+ffmchainedchar("1FAD","1FDE","1FFC",-1);
+
+% Omega with psili and perispomeni and prosgegrammeni
+ffmchainedchar("1FAE","1FCF","1FFC",-3);
+
+% Omega with dasia and perispomeni and prosgegrammeni
+ffmchainedchar("1FAF","1FDF","1FFC",-3);
+
+% Omega with varia
+ffmchainedchar("1FFA","1FEF","03A9",0);
+
+% Omega with oxia
+ffmcopiedchar("1FFB","038F");
+
+% Upsilon with dieresis
+ffmcombinedchar("03AB","03A5","00A8","top",ht#+acc_ht#,0);
+
+% Upsilon with tonos
+ffmchainedchar("038E","0384","03A5",-1);
+
+% Upsilon with dasia
+ffmchainedchar("1F59","1FFE","03A5",0);
+
+% Upsilon with dasia and varia
+ffmchainedchar("1F5B","1FDD","03A5",0);
+
+% Upsilon with dasia and oxia
+ffmchainedchar("1F5D","1FDE","03A5",-1);
+
+% Upsilon with dasia and perispomeni
+ffmchainedchar("1F5F","1FDF","03A5",-2);
+
+% Upsilon with vrachy
+ffmcombinedchar("1FE8","03A5","02D8","top",ht#+acc_ht#,0);
+
+% Upsilon with macron
+ffmcombinedchar("1FE9","03A5","00AF","top",ht#+acc_ht#,0);
+
+% Upsilon with varia
+ffmchainedchar("1FEA","1FEF","03A5",0);
+
+% Upsilon with oxia
+ffmcopiedchar("1FEB","038E");
+
+% Iota with dialytika
+ffmcombinedchar("03AA","0399","00A8","top",ht#+acc_ht#,0);
+
+% Iota with tonos
+ffmchainedchar("038A","0384","0399",-1.5);
+
+% Iota with psili
+ffmchainedchar("1F38","1FBF","0399",0);
+
+% Iota with dasia
+ffmchainedchar("1F39","1FFE","0399",0);
+
+% Iota with psili and varia
+ffmchainedchar("1F3A","1FCD","0399",0);
+
+% Iota with dasia and varia
+ffmchainedchar("1F3B","1FDD","0399",0);
+
+% Iota with psili and oxia
+ffmchainedchar("1F3C","1FCE","0399",-1);
+
+% Iota with dasia and oxia
+ffmchainedchar("1F3D","1FDE","0399",-1);
+
+% Iota with psili and perispomeni
+ffmchainedchar("1F3E","1FCF","0399",-2);
+
+% Iota with dasia and perispomeni
+ffmchainedchar("1F3F","1FDF","0399",-2);
+
+% Iota with varia
+ffmchainedchar("1FDA","1FEF","0399",0);
+
+% Iota with vrachy
+ffmcombinedchar("1FD8","0399","02D8","top",ht#+acc_ht#,0);
+
+% Iota with macron
+ffmcombinedchar("1FD9","0399","00AF","top",ht#+acc_ht#,0);
+
+% Iota with oxia
+ffmcopiedchar("1FDB","038A");
+
+% Epsilon with tonos
+ffmchainedchar("0388","0384","0395",-1);
+
+% Epsilon with psili
+ffmchainedchar("1F18","1FBF","0395",0);
+
+% Epsilon with dasia
+ffmchainedchar("1F19","1FFE","0395",0);
+
+% Epsilon with psili and varia
+ffmchainedchar("1F1A","1FCD","0395",0);
+
+% Epsilon with dasia and varia
+ffmchainedchar("1F1B","1FDD","0395",0);
+
+% Epsilon with psili and oxia
+ffmchainedchar("1F1C","1FCE","0395",-1);
+
+% Epsilon with dasia and oxia
+ffmchainedchar("1F1D","1FDE","0395",-1);
+
+% Epsilon with varia
+ffmchainedchar("1FC8","1FEF","0395",0);
+
+% Epsilon with oxia
+ffmcopiedchar("1FC9","0388");
+
+% Omicron with tonos
+ffmchainedchar("038C","0384","039F",-1);
+
+% Omicron with psili
+ffmchainedchar("1F48","1FBF","039F",-1);
+
+% Omicron with dasia
+ffmchainedchar("1F49","1FFE","039F",0);
+
+% Omicron with psili and varia
+ffmchainedchar("1F4A","1FCD","039F",0);
+
+% Omicron with dasia and varia
+ffmchainedchar("1F4B","1FDD","039F",0);
+
+% Omicron with psili and oxia
+ffmchainedchar("1F4C","1FCE","039F",-1);
+
+% Omicron with dasia and oxia
+ffmchainedchar("1F4D","1FDE","039F",-1);
+
+% Omicron with varia
+ffmchainedchar("1FF8","1FEF","039F",0);
+
+% Omicron with oxia
+ffmcopiedchar("1FF9","038C");
+
+% Rho with dasia
+ffmchainedchar("1FEC","1FFE","03A1",0);
+
+%------lowercase-------
+old_ht#:=ht#;
+old_barheight#:=barheight#;
+ht#:=x_ht#; % new characters height (for lowercase)
+u#:=.9u#; % new unit width
+barheight#:=.5x_ht#; % new height of bar lines (for lowercase)
+define_pixels(u);
+define_good_y_pixels(barheight);
+
+ffmchar("a",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+w-x4=leftstemloc+noise;
+w-x5=leftstemloc+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+o; %no noise because of Aring
+y4=barheight+noise;
+bot y5=noise-o;
+bot y6=0; %no noise
+z6=whatever[z4,z5];
+draw z1--z2--z4--z5;
+draw half(z2,z2-z1,z3,randrt,z4,z5-z4);
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% ae
+ffmchar("00E6",22,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+x5=w-leftstemloc+o+noise;
+x6=w-leftstemloc+o-xgap+noise;
+x7=w-leftstemloc+o+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+bot y4=noise;
+top y5=h+noise;
+y6=barheight+noise;
+bot y7=noise;
+draw z1--z2--z6;
+draw arc(z2,z2-z1,z3,z5-z3);
+draw z5--z3--z4--z7;
+charanchortops_[charepscode]=(x3,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("b",14,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x7=.5[w-x1,lft w]+noise;
+x5=.85[x1,x7]+noise;
+x8=.5[x1,x5]+noise;
+x4=.4[x1,x5]+noise;
+x6=.4[x1,x5]+noise;
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+y4=y3+noise;
+y6=y2+.5noise;
+bot y8=noise;
+y5=.5[y4,y6]+noise;
+y7=.5[y6,y8]+noise;
+z2=whatever[z1,z3];
+z9=whatever[z2,z6];
+draw z1--z3--z4
+ & half(z4,z4-z3,z5,-randup,z6,z2-z6)
+ & z6--z2;
+draw half(z6,z6-z2,z7,-randup,z8,z1-z8)
+ & z8--z1;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+ffmchar("c",14,ht#,0);
+italcorr ht#*slant;
+x1=w-leftstemloc+ho+noise;
+x2=.55w+noise;
+x3=good.x(1.5u+s+noise);
+x4=.55w+noise;
+x5=w-leftstemloc+ho+noise;
+top y1=h+noise;
+top y2=h+noise;
+y3=barheight+noise;
+bot y4=0; %no noise!
+z5=z4+whatever*randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z4;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("d",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.45w+noise;
+x5=.45w+noise;
+w-x4=good.x(1.5u+s+noise);
+bot y1=noise;
+bot y5=noise;
+top y2=h+noise;
+top y3=h+noise;
+y4=barheight+noise;
+draw z1--z2--z3
+ & half(z3,z3-z2,z4,-randup,z5,z1-z5)
+ & z5--cycle;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+% eth
+ffmchar("00F0",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x5=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x6=eps+noise;
+x7=.5w+noise;
+bot y1=noise;
+bot y5=noise;
+top y2=h+noise;
+top y3=h+noise;
+y4=barheight+noise;
+y6=barheight+noise;
+y7=barheight+noise;
+draw z1--z2--z3
+ & half(z3,z3-z2,z4,-randup,z5,z1-z5)
+ & z5--cycle;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("e",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+x6=w-leftstemloc+ho+noise;
+x7=.9[x1,x6];
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+bot y7=0;
+z2=whatever[z1,z3];
+z6=whatever[z1,z7];
+draw z6--z1--z2--z5;
+draw z2--z3--z4;
+charanchortops_[charepscode]=(.5[leftstemloc,w-leftstemloc+o],h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z7;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("f",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+z2=whatever[z1,z3];
+draw z1--z2--z5;
+draw z2--z3--z4;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("g",14,ht#,0);
+italcorr ht#*slant;
+x3=good.x(1.5u+s+noise);
+x1=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+x6=w-leftstemloc+noise;
+x2=.55w+noise;
+x4=.55w+noise;
+x7=.55w+noise;
+y3=barheight+noise;
+y6=barheight+noise;
+y7=barheight+noise;
+top y2=h+noise;
+top y1=h+noise;
+bot y4=noise;
+bot y5=noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5--z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+charanchorcedillas_[charepscode]=z4;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("h",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+bot y3=noise-o;
+top y4=h+o+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+z5=whatever[z1,z2];
+z6=whatever[z3,z4];
+draw z1--z5--z6--z3;
+draw z5--z2;
+draw z6--z4;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("i",6,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=.5w+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+draw z1--z2;
+charanchortops_[charepscode]=(.5w+noise,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z1;
+labels(1,2);
+endchar;
+
+ffmchar("j",9,ht#,0);
+italcorr .8ht#*slant;
+lft x1=noise-eps;
+x2=x1+.5u;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+bot y1=noise-o;
+y3=barheight+noise;
+top y4=h+noise;
+z2=z1+whatever*randrt;
+draw z1--z2
+ & arc(z2,randrt,z3,z4-z3)
+ & z3--z4;
+charanchortops_[charepscode]=(x4,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4);
+endchar;
+
+ffmchar("k",13,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x5=good.x(1.5u+s+noise);
+w-x6=good.x(1.5u+s+noise);
+bot y1=noise-o;
+bot y6=noise-o;
+top y2=h+o+noise;
+top y5=h+o+noise;
+y3=.618[y2,y1]+noise;
+z3=whatever[z1,z2];
+z4=whatever[z3,z5]=whatever[z2,z6];
+draw z1--z2;
+draw z3--z5;
+draw z4--z6;
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("l",12,ht#,0);
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+rt x3=w-eps+noise;
+bot y1=noise;
+bot y3=noise;
+top y2=h+noise;
+draw z3--z1--z2;
+charanchortops_[charepscode]=(leftstemloc,h);
+charanchortoprights_[charepscode]=(.618w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3);
+endchar;
+
+% lslash
+ffmchar("0142",13,ht#,0);
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc-ho+noise;
+lft x4=eps+noise;
+x5=.45w+noise;
+bot y1=noise;
+bot y3=noise;
+top y2=h+noise;
+y4=.4h+noise;
+z5=z4+whatever*dir(40);
+draw z3--z1--z2;
+draw z4--z5;
+charanchortops_[charepscode]=(leftstemloc,h);
+charanchortoprights_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("m",18,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+bot y3=ygap-o+noise;
+top y4=h+o+noise;
+bot y5=noise-o;
+draw z1--z2--z3--z4--z5;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("n",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+y3=y4+ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+z3=whatever[z4,z5];
+draw z1--z2--z3;
+draw z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5);
+endchar;
+
+% eng
+ffmchar("014B",15,ht#,acc_depth#);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=w-leftstemloc+noise;
+x5=w-leftstemloc+noise;
+x6=.5w+noise;
+x7=.382w+noise;
+bot y1=noise-o;
+top y2=h+o+noise;
+y3=y4+ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+bot y6=noise-d;
+z7=z6+whatever*randrt;
+z3=whatever[z4,z5];
+draw z1--z2--z3;
+draw z7--z6
+ & arc(z6,z6-z7,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("o",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4);
+endchar;
+
+% oslash
+ffmchar("00F8",15,ht#,0);
+italcorr ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=good.x(1.5u+s+noise);
+w-x6=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+bot y5=noise-o;
+top y6=h+o+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% oe
+ffmchar("0153",22,ht#,0);
+italcorr .9ht#*slant;
+x2=.5w+noise;
+x4=good.x(1.5u+s+noise);
+x6=.5w+noise;
+x7=w-leftstemloc+o+noise;
+x9=w-leftstemloc+o-xgap+noise;
+x1=w-leftstemloc+o+noise;
+x3=.382w+noise;
+x5=.382w+noise;
+y4=barheight+noise;
+y8=barheight+noise;
+top y7=h+noise;
+y9=barheight+noise;
+bot y1=noise;
+bot y3=noise;
+top y5=h+noise;
+z2=whatever[z1,z3];
+z6=whatever[z5,z7];
+z8=whatever[z2,z6];
+draw z1--z3
+ & half(z3,z3-z1,z4,randup,z5,z7-z5)
+ & z5--z7;
+draw z2--z8--z9;
+draw z6--z8;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+ffmchar("p",14,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x5=.618[x1,w-x1]+noise;
+x6=.5[w-x1,lft w]+noise;
+y2=barheight+noise;
+y5=barheight+noise;
+bot y1=noise-o;
+top y3=h+noise;
+top y4=h+noise;
+y6=.5[y4,y5]+noise;
+z2=whatever[z1,z3];
+draw z1--z3--z4
+ & half(z4,z4-z3,z6,-randup,z5,z2-z5)
+ & z5 -- z2;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% thorn
+ffmchar("00FE",14,ht#,0);
+italcorr .7ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x5=.618[x1,w-x1]+noise;
+x6=.5[w-x1,lft w]+noise;
+bot y1=noise-o;
+top y2=h+noise;
+y3=.764h+noise;
+y4=.764h+noise;
+y6=.5[y4,y5]+noise;
+y5=.382h+noise;
+y7=.382h+noise;
+z3=whatever[z1,z2];
+z7=whatever[z1,z2];
+draw z1--z2;
+draw z3--z4
+ & half(z4,z4-z3,z6,-randup,z5,z7-z5)
+ & z5--z7;
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("q",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=min(.618[x4,x3],x4-2px)+noise;
+w-x6=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+y5=.618[y3,y4]+noise;
+bot y6=noise-o;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("r",14,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=.618[x1,w-x1]+noise;
+x6=.618[x1,w-x1]+noise;
+x5=.5[w-x1,lft w]+noise;
+x7=.5[w-x1,lft w]+noise;
+y2=barheight+noise;
+y6=barheight+noise;
+bot y1=noise-o;
+bot y7=noise-o;
+top y3=h+noise;
+top y4=h+noise;
+y5=.5[y4,y6]+noise;
+z2=whatever[z1,z3];
+draw z1--z3--z4
+ & half(z4,z4-z3,z5,-randup,z6,z2-z6)
+ & z6--z2;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+ffmchar("s",14,ht#,0);
+italcorr .8ht#*slant;
+x3=good.x(2u+s+noise);
+x8=good.x(2u+s+noise);
+w-x1=good.x(3u+s+noise);
+x2=.382[x3,x1]+noise;
+x4=.382[x3,x1]+noise;
+x5=.9[x3,x1]+noise;
+x7=.9[x3,x1]+noise;
+w-x6=good.x(1.75u+.5s+noise);
+x9=.618[x8,x7];
+top y1=h+noise;
+top y2=h+noise;
+y3=.6[y2,y4]+noise;
+y4=barheight+noise;
+y5=barheight+noise;
+y6=.3[y5,y7]+noise;
+bot y9=0;
+z7=z9+whatever*randrt;
+z8=whatever[z7,z9];
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,z5-z4)
+ & z4--z5
+ & half(z5,z5-z4,z6,-randup,z7,z8-z7)
+ & z7--z8;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z9;
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% germandbls
+ffmchar("00DF",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=.5w+noise;
+x5=.5w+noise;
+x7=.5w+noise;
+w-x4=leftstemloc+noise;
+w-x6=good.x(1.5u+s+noise);
+x8=.4w+noise;
+bot y1=noise-o;
+bot y8=noise;
+y2=barheight+noise;
+top y3=h+o+noise;
+y5=barheight+noise;
+y4=.5[y5,y3]+noise;
+y6=.5[y7,y5]+noise;
+z7=z8+whatever*randrt;
+pair randira,randirb;
+randira:=randrt;
+randirb:=randrt;
+draw z1--z2
+ & arc(z2,randup,z3,randira)
+ & half(z3,randira,z4,-randup,z5,-randirb);
+draw half(z5,randirb,z6,-randup,z7,z8-z7)
+ & z7--z8;
+labels(1,2,3,4,5,6,7,8);
+endchar;
+
+ffmchar("t",13,ht#,0);
+italcorr ht#*slant+.5u#;
+if .5w<>good.x .5w: change_width; fi
+lft x1=noise-eps;
+rt x2=w+noise;
+x3=.5w+noise;
+x4=.5w+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y4=noise-o;
+z3=whatever[z1,z2];
+draw z1--z2;
+draw z3--z4;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(x4,0);
+labels(1,2,3,4);
+endchar;
+
+ffmchar("u",15,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x4]+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+top y5=h+o+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+charanchorcedillas_[charepscode]=z3;
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("v",13,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise)-ho;
+w-x3=good.x(1.5u+s+noise)-ho;
+x2=.5[x1,x3]+noise;
+top y1=h+o+noise;
+bot y2=noise-o;
+top y3=h+o+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+ffmchar("w",20,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise)-ho;
+w-x5=good.x(1.5u+s+noise)-ho;
+x3=.5[x1,x5]+noise;
+top y1=h+o+noise;
+bot y2=noise-o;
+y3=y1-ygap+noise;
+bot y4=noise-o;
+top y5=h+o+noise;
+z4=z5+whatever*(x5-x1,4*(y1-y2)-2ygap);
+z2=z1+whatever*(x1-x5,4*(y1-y2)-2ygap);
+draw z1--z2--z3;
+draw z3--z4--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+ffmchar("x",13,ht#,0);
+italcorr ht#*slant;
+x1=good.x(1.5u+s+noise);
+x3=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+w-x4=good.x(1.5u+s+noise);
+top y1=h+o+noise;
+top y4=h+o+noise;
+bot y3=noise-o;
+bot y2=noise-o;
+draw z1--z2;
+draw z3--z4;
+labels(1,2,3,4);
+endchar;
+
+ffmchar("y",15.5,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+.5noise;
+w-x4=leftstemloc+.5noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x5]+noise;
+x6=.5[x1,x5]+noise;
+top y1=h+o+noise;
+top y5=h+o+noise;
+bot y6=noise-o;
+y3=barheight+noise;
+y2=.618[y3,y5]+noise;
+y4=.618[y3,y5]+noise;
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+draw z6--z3;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+ffmchar("z",15,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+w-x2=leftstemloc+noise;
+x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+top y1=h+noise;
+top y2=h+noise;
+bot y3=noise;
+bot y4=noise;
+draw z1--z2--z3--z4;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4);
+endchar;
+
+% ij
+ffmchainedchar("0133","i","j",0);
+
+% ff
+ffmchainedchar("FB00","f","f",0);
+
+% fi
+ffmchainedchar("FB01","f","i",0);
+
+% fl
+ffmchainedchar("FB02","f","l",0);
+
+% ffi
+ffmchainedchar("FB03","FB00","i",0);
+
+% ffl
+ffmchainedchar("FB04","FB00","l",0);
+
+% dotlessi
+ffmcopiedchar("0131","i");
+
+% dotlessj
+ffmcopiedchar("0237","j");
+
+% dcroat
+ffmcopiedchar("0111","00F0");
+
+% aacute
+ffmcombinedchar("00E1","a","00B4","top",ht#+acc_ht#,0);
+
+% agrave
+ffmcombinedchar("00E0","a","0060","top",ht#+acc_ht#,0);
+
+% adieresis
+ffmcombinedchar("00E4","a","00A8","top",ht#+acc_ht#,0);
+
+% acircumflex
+ffmcombinedchar("00E2","a","02C6","top",ht#+acc_ht#,0);
+
+% atilde
+ffmcombinedchar("00E3","a","02DC","top",ht#+acc_ht#,0);
+
+% aring
+ffmcombinedchar("00E5","a","02DA","top",ht#+acc_ht#,0);
+
+% amacron
+ffmcombinedchar("0101","a","00AF","top",ht#+acc_ht#,0);
+
+% abreve
+ffmcombinedchar("0103","a","02D8","top",ht#+acc_ht#,0);
+
+% aogonek
+ffmcombinedchar("0105","a","02DB","cedilla",ht#,acc_depth#);
+
+% adotbelow
+ffmcombinedchar("1EA1","a","0323","bot",ht#,acc_depth#);
+
+% aeacute
+ffmcombinedchar("01FD","00E6","00B4","top",ht#+acc_ht#,0);
+
+% cacute
+ffmcombinedchar("0107","c","00B4","top",ht#+acc_ht#,0);
+
+% ccaron
+ffmcombinedchar("010D","c","02C7","top",ht#+acc_ht#,0);
+
+% ccedilla
+ffmcombinedchar("00E7","c","00B8","cedilla",ht#,acc_depth#);
+
+% ccircumflex
+ffmcombinedchar("0109","c","02C6","top",ht#+acc_ht#,0);
+
+% cdotaccent
+ffmcombinedchar("010B","c","02D9","top",ht#+acc_ht#,0);
+
+% dcaron
+ffmcombinedchar("010F","d","02C7","top",ht#+acc_ht#,0);
+
+% eacute
+ffmcombinedchar("00E9","e","00B4","top",ht#+acc_ht#,0);
+
+% egrave
+ffmcombinedchar("00E8","e","0060","top",ht#+acc_ht#,0);
+
+% edieresis
+ffmcombinedchar("00EB","e","00A8","top",ht#+acc_ht#,0);
+
+% ecircumflex
+ffmcombinedchar("00EA","e","02C6","top",ht#+acc_ht#,0);
+
+% ecaron
+ffmcombinedchar("011B","e","02C7","top",ht#+acc_ht#,0);
+
+% eogonek
+ffmcombinedchar("0119","e","02DB","cedilla",ht#,comma_depth#);
+
+% emacron
+ffmcombinedchar("0113","e","00AF","top",ht#+acc_ht#,0);
+
+% ebreve
+ffmcombinedchar("0115","e","02D8","top",ht#+acc_ht#,0);
+
+% edotaccent
+ffmcombinedchar("0117","e","02D9","top",ht#+acc_ht#,0);
+
+% etilde
+ffmcombinedchar("1EBD","e","02DC","top",ht#+acc_ht#,0);
+
+% edotbelow
+ffmcombinedchar("1EB9","e","0323","bot",ht#,acc_depth#);
+
+% gcircumflex
+ffmcombinedchar("011D","g","02C6","top",ht#+acc_ht#,0);
+
+% gbreve
+ffmcombinedchar("011F","g","02D8","top",ht#+acc_ht#,0);
+
+% gdotaccent
+ffmcombinedchar("0121","G","02D9","top",ht#+acc_ht#,0);
+
+% gcedilla
+ffmcombinedchar("0123","g","00B8","cedilla",ht#,acc_depth#);
+
+% gcaron
+ffmcombinedchar("01E7","g","02C7","top",ht#+acc_ht#,0);
+
+% hcircumflex
+ffmcombinedchar("0125","h","02C6","top",ht#+acc_ht#,0);
+
+% iacute
+ffmcombinedchar("00ED","0131","00B4","top",ht#+acc_ht#,0);
+
+% igrave
+ffmcombinedchar("00EC","0131","0060","top",ht#+acc_ht#,0);
+
+% idieresis
+ffmcombinedchar("00EF","0131","00A8","top",ht#+acc_ht#,0);
+
+% icircumflex
+ffmcombinedchar("00EE","0131","02C6","top",ht#+acc_ht#,0);
+
+% itilde
+ffmcombinedchar("0129","0131","02DC","top",ht#+acc_ht#,0);
+
+% imacron
+ffmcombinedchar("012B","0131","00AF","top",ht#+acc_ht#,0);
+
+% ibreve
+ffmcombinedchar("012D","0131","02D8","top",ht#+acc_ht#,0);
+
+% iogonek
+ffmcombinedchar("012F","i","02DB","cedilla",ht#,acc_depth#);
+
+% idotbelow
+ffmcombinedchar("1ECB","i","0323","bot",ht#,acc_depth#);
+
+% jcircumflex
+ffmcombinedchar("0135","0237","02C6","top",ht#+acc_ht#,0);
+
+% kcedilla
+ffmcombinedchar("0137","k","0326","bot",ht#,acc_depth#);
+
+% kgreenlandic
+ffmcopiedchar("0138","k");
+
+% lacute
+ffmcombinedchar("013A","l","00B4","top",ht#+acc_ht#,0);
+
+% lcaron
+ffmcombinedchar("013E","l","2019","topright",ht#+acc_ht#,0);
+
+% lcedilla
+ffmcombinedchar("013C","l","0326","bot",ht#,acc_depth#);
+
+% ldot
+ffmchainedchar("0140","l","00B7",-5);
+
+% nacute
+ffmcombinedchar("0144","n","00B4","top",ht#+acc_ht#,0);
+
+% ntilde
+ffmcombinedchar("00F1","n","02DC","top",ht#+acc_ht#,0);
+
+% ncaron
+ffmcombinedchar("0148","n","02C7","top",ht#+acc_ht#,0);
+
+% ncedilla
+ffmcombinedchar("0146","n","0326","bot",ht#,acc_depth#);
+
+% napostrophe (solved with tonos)
+ffmchainedchar("0149","0384","n",-3);
+
+% oacute
+ffmcombinedchar("00F3","o","00B4","top",ht#+acc_ht#,0);
+
+% ograve
+ffmcombinedchar("00F2","o","0060","top",ht#+acc_ht#,0);
+
+% odieresis
+ffmcombinedchar("00F6","o","00A8","top",ht#+acc_ht#,0);
+
+% ocircumflex
+ffmcombinedchar("00F4","o","02C6","top",ht#+acc_ht#,0);
+
+% otilde
+ffmcombinedchar("00F5","o","02DC","top",ht#+acc_ht#,0);
+
+% ohungarumlaut
+ffmcombinedchar("0151","o","02DD","top",ht#+acc_ht#,0);
+
+% omacron
+ffmcombinedchar("014D","o","00AF","top",ht#+acc_ht#,0);
+
+% obreve
+ffmcombinedchar("014F","o","02D8","top",ht#+acc_ht#,0);
+
+% odotbelow
+ffmcombinedchar("1ECD","o","0323","bot",ht#,acc_depth#);
+
+% oslashacute
+ffmcombinedchar("01FF","00F8","00B4","top",ht#+acc_ht#,0);
+
+% racute
+ffmcombinedchar("0155","r","00B4","top",ht#+acc_ht#,0);
+
+% rcaron
+ffmcombinedchar("0159","r","02C7","top",ht#+acc_ht#,0);
+
+% rcedilla
+ffmcombinedchar("0157","r","0326","bot",ht#,acc_depth#);
+
+% sacute
+ffmcombinedchar("015B","s","00B4","top",ht#+acc_ht#,0);
+
+% scaron
+ffmcombinedchar("0161","s","02C7","top",ht#+acc_ht#,0);
+
+% scedilla
+ffmcombinedchar("015F","s","00B8","cedilla",ht#,acc_depth#);
+
+% scircumflex
+ffmcombinedchar("015D","s","02C6","top",ht#+acc_ht#,0);
+
+% scommaaccent
+ffmcombinedchar("0219","s","0326","bot",ht#,acc_depth#);
+
+% tcaron
+ffmcombinedchar("0165","t","02C7","top",ht#+acc_ht#,0);
+
+% tcommaaccent
+ffmcombinedchar("021B","t","0326","bot",ht#,acc_depth#);
+
+% tcedilla
+ffmcopiedchar("0163","021B");
+
+% uacute
+ffmcombinedchar("00FA","u","00B4","top",ht#+acc_ht#,0);
+
+% ugrave
+ffmcombinedchar("00F9","u","0060","top",ht#+acc_ht#,0);
+
+% udieresis
+ffmcombinedchar("00FC","u","00A8","top",ht#+acc_ht#,0);
+
+% ucircumflex
+ffmcombinedchar("00FB","u","02C6","top",ht#+acc_ht#,0);
+
+% uhungarumlaut
+ffmcombinedchar("0171","u","02DD","top",ht#+acc_ht#,0);
+
+% uring
+ffmcombinedchar("016F","u","02DA","top",ht#+acc_ht#,0);
+
+% utilde
+ffmcombinedchar("0169","u","02DC","top",ht#+acc_ht#,0);
+
+% umacron
+ffmcombinedchar("016B","u","00AF","top",ht#+acc_ht#,0);
+
+% ubreve
+ffmcombinedchar("016D","u","02D8","top",ht#+acc_ht#,0);
+
+% uogonek
+ffmcombinedchar("0173","u","02DB","cedilla",ht#,acc_depth#);
+
+% udotbelow
+ffmcombinedchar("1EE5","u","0323","bot",ht#,acc_depth#);
+
+% wcircumflex
+ffmcombinedchar("0175","w","02C6","top",ht#+acc_ht#,0);
+
+% wgrave
+ffmcombinedchar("1E81","w","0060","top",ht#+acc_ht#,0);
+
+% wacute
+ffmcombinedchar("1E83","w","00B4","top",ht#+acc_ht#,0);
+
+% wdieresis
+ffmcombinedchar("1E85","w","00A8","top",ht#+acc_ht#,0);
+
+% yacute
+ffmcombinedchar("00FD","y","00B4","top",ht#+acc_ht#,0);
+
+% ydieresis
+ffmcombinedchar("00FF","y","00A8","top",ht#+acc_ht#,0);
+
+% ycircumflex
+ffmcombinedchar("0177","y","02C6","top",ht#+acc_ht#,0);
+
+% ygrave
+ffmcombinedchar("1EF3","y","0060","top",ht#+acc_ht#,0);
+
+% ytilde
+ffmcombinedchar("1EF9","y","02DC","top",ht#+acc_ht#,0);
+
+% ymacron
+ffmcombinedchar("0233","y","00AF","top",ht#+acc_ht#,0);
+
+% zacute
+ffmcombinedchar("017A","z","00B4","top",ht#+acc_ht#,0);
+
+% zcaron
+ffmcombinedchar("017E","z","02C7","top",ht#+acc_ht#,0);
+
+% zdotaccent
+ffmcombinedchar("017C","z","02D9","top",ht#+acc_ht#,0);
+
+% alpha
+ffmcopiedchar("03B1","a");
+
+% beta
+ffmcopiedchar("03B2","b");
+
+% gamma
+ffmchar("03B3",12,ht#,0);
+italcorr ht#*slant+.5u#;
+if .5w<>good.x .5w: change_width; fi
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+rt x3=w+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+draw z1--z2--z3;
+labels(1,2,3);
+endchar;
+
+% delta
+ffmchar("03B4",15,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+bot y1=noise;
+bot y2=noise;
+top y3=h+o+noise;
+draw z1--z2--z3--cycle;
+labels(1,2,3);
+endchar;
+
+% epsilon
+ffmcopiedchar("03B5","e");
+
+% zeta
+ffmcopiedchar("03B6","z");
+
+% eta
+ffmcopiedchar("03B7","h");
+
+% theta
+ffmchar("03B8",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+lft x5=max(rt x2+2u,.35w)+noise;
+rt x6=min(lft x4-2u,.65w)+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% iota
+ffmcopiedchar("03B9","i");
+
+% kappa
+ffmcopiedchar("03BA","k");
+
+% lambda
+ffmchar("03BB",13,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+w-x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+bot y1=noise-o;
+bot y2=noise-o;
+top y3=h+o+noise;
+draw z1--z3--z2;
+labels(1,2,3);
+endchar;
+
+% mu
+ffmcopiedchar("03BC","m");
+
+% nu
+ffmcopiedchar("03BD","n");
+
+% xi
+ffmchar("03BE",15,ht#,0);
+italcorr .8ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+w-x4=leftstemloc+noise;
+x5=.3w+noise;
+x6=.7w+noise;
+bot y1=noise;
+top y2=h+noise;
+bot y3=noise;
+top y4=h+noise;
+y5=barheight+noise;
+y6=barheight+noise;
+draw z1--z3;
+draw z2--z4;
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% omicron
+ffmcopiedchar("03BF","o");
+
+% pi
+ffmchar("03C0",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+noise;
+x3=w-leftstemloc+ho+noise;
+x4=w-leftstemloc+ho+noise;
+bot y1=noise-o;
+top y2=h+noise;
+top y3=h+noise;
+bot y4=noise-o;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% rho
+ffmcopiedchar("03C1","p");
+
+% sigma
+ffmchar("03C3",14,ht#,0);
+italcorr .9ht#*slant;
+x1=good.x(1.5u+s+noise);
+x2=.5[x1,x5];
+x3=good.x(1.5u+s+noise);
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho+noise;
+bot y1=noise;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+bot y5=0;
+draw z5--z1--z2--z3--z4;
+charanchortops_[charepscode]=(.5[leftstemloc,w-leftstemloc+o],h);
+labels(1,2,3,4,5);
+endchar;
+
+% sigma1
+ffmcopiedchar("03C2","03C3");
+
+% stigma
+ffmchar("03DB",13,ht#,acc_depth#);
+italcorr .8ht#*slant;
+italcorr .8ht#*slant;
+x3=good.x(2u+s+noise);
+x7=.5w;
+x1=w-leftstemloc+ho+noise;
+x2=.5[x3,x1]+noise;
+x4=.5[x3,x1]+noise;
+x6=.6[x3,x1]+noise;
+x5=.8w;
+top y1=h+noise;
+top y2=h+noise;
+y3=.6[y2,y4]+noise;
+bot y4=noise;
+y5=.3[y4,y7]+noise;
+bot y6=noise-d;
+z7=z6+whatever*randrt;
+pair randir;
+randir:=randrt;
+draw z1--z2
+ & half(z2,z2-z1,z3,-randup,z4,randir)
+ & half(z4,randir,z5,-randup,z6,z7-z6)
+ & z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% tau
+ffmcopiedchar("03C4","t");
+
+% upsilon
+ffmcopiedchar("03C5","y");
+
+% phi
+ffmchar("03C6",15,ht#,0);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+top y1=.85h+o+noise;
+y2=barheight+noise;
+bot y3=.15h-o+noise;
+y4=barheight+noise;
+bot y5=noise-o;
+top y6=h+o+noise;
+z5=whatever[z1,z3];
+z6=whatever[z1,z3];
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z5--z6;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6);
+endchar;
+
+% chi
+ffmcopiedchar("03C7","x");
+
+% psi
+ffmchar("03C8",18,ht#,0);
+italcorr ht#*slant;
+x1=leftstemloc+noise;
+x2=leftstemloc+.5noise;
+w-x4=leftstemloc+.5noise;
+w-x5=leftstemloc+noise;
+x3=.5[x1,x5]+noise;
+x6=.5[x1,x5]+noise;
+top y1=h+o+noise;
+top y5=h+o+noise;
+bot y6=noise-o;
+top y7=h+o+noise;
+y3=barheight+noise;
+y2=.618[y3,y5]+noise;
+y4=.618[y3,y5]+noise;
+z7=whatever[z6,z3];
+draw z1--z2
+ & half(z2,z2-z1,z3,randrt,z4,z5-z4)
+ & z4--z5;
+draw z6--z7;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5,6,7);
+endchar;
+
+% omega
+ffmchar("03C9",15,ht#,0);
+italcorr .8ht#*slant;
+x1=good.x(1.5u+s+noise);
+lft x8-rt x2=2.5u+noise;
+.5[x2,x8]=.5w;
+x4=good.x(1.5u+s+noise);
+x5=.5w+noise;
+w-x6=good.x(1.5u+s+noise);
+w-x9=good.x(1.5u+s+noise);
+lft x7-rt x3=2.5u+noise;
+.5[x3,x7]=.5w;
+bot y1=noise;
+bot y2=noise;
+bot y3=max(top y2+eps,.15h+noise);
+top y5=h+o+noise;
+y4=.4[y3,y5]+noise;
+y6=.4[y7,y5]+noise;
+bot y8=noise;
+bot y7=max(top y8+eps,.15h+noise);
+bot y9=noise;
+pair randdir;
+randdir:=randrt;
+draw z1--z2--z3
+ & half(z3,-randrt,z4,randup,z5,randdir)
+ & half(z5,randdir,z6,-randup,z7,-randrt)
+ & z7--z8--z9;
+charanchortops_[charepscode]=(.5w,h);
+charanchorbots_[charepscode]=(.5w,0);
+labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+% archaic koppa
+ffmchar("03D9",15,ht#,acc_depth#);
+italcorr .8ht#*slant;
+x1=.5w+noise;
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+w-x4=good.x(1.5u+s+noise);
+x5=.5w+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+y4=barheight+noise;
+bot y5=noise-d;
+draw full(z1,-randrt,z2,-randup,z3,randrt,z4,randup);
+draw z3--z5;
+charanchortops_[charepscode]=(.5w,h);
+labels(1,2,3,4,5);
+endchar;
+
+% sampi
+ffmchar("03E1",14,ht#,0);
+italcorr ht#*slant;
+lft x1=rt x3+noise;
+w-x2=good.x(1.5u+s-ho)+noise;
+x3=good.x(1.5u+s-ho)+noise;
+x5=.4[x3,x2];
+top y1=h+o+noise;
+bot y2=noise-o;
+bot y3=noise-o;
+y4=.8h;
+bot y5=noise-o;
+z4=whatever[z1,z2];
+z6=whatever[z1,z2]=z5+(noise,noise)+whatever*(z4-z3);
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+labels(1,2,3,4,5,6);
+endchar;
+
+% digamma
+ffmchar("03DD",14,ht#,0);
+italcorr .9ht#*slant;
+x1=leftstemloc+noise;
+x3=leftstemloc+noise;
+x4=w-leftstemloc+ho+noise;
+x5=w-leftstemloc+ho-xgap+noise;
+bot y1=noise-o;
+y2=barheight+noise;
+top y3=h+noise;
+top y4=h+noise;
+y5=barheight+noise;
+z2=whatever[z1,z3];
+draw z1--z2--z5;
+draw z2--z3--z4;
+labels(1,2,3,4,5);
+endchar;
+
+% schwa
+ffmchar("0259",13,ht#,0);
+italcorr .8ht#*slant;
+w-x1=good.x(1.5u+s+noise);
+x2=good.x(1.5u+s+noise);
+x3=.5w+noise;
+x4=.5w+noise;
+x5=.2[x2,x1];
+y1=barheight+noise;
+y2=barheight+noise;
+bot y3=noise-o;
+top y4=h+noise;
+top y5=h+noise;
+pair randir;
+randir:=randup;
+draw z1--z2
+ & half(z2,-randup,z3,randrt,z1,randir)
+ & arc(z1,randir,z4,z5-z4)
+ & z4--z5;
+labels(1,2,3,4,5);
+endchar;
+
+% turned e
+ffmcopiedchar("01DD","0259");
+
+% koppa
+ffmchar("03DF",13,ht#,0);
+x1=.2[x2,x3]+noise;
+x2=leftstemloc+noise;
+w-x3=leftstemloc+noise;
+x4=.8[x2,x3]+noise;
+top y1=h+o+noise;
+y2=barheight+noise;
+y3=barheight+noise;
+bot y4=noise-o;
+draw z1--z2--z3--z4;
+labels(1,2,3,4);
+endchar;
+
+% alpha with ypogegrammeni
+ffmcombinedchar("1FB3","03B1","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with tonos
+ffmcombinedchar("03AC","03B1","0384","top",ht#+acc_ht#,0);
+
+% alpha with psili
+ffmcombinedchar("1F00","03B1","1FBF","top",ht#+acc_ht#,0);
+
+% alpha with dasia
+ffmcombinedchar("1F01","03B1","1FFE","top",ht#+acc_ht#,0);
+
+% alpha with psili and varia
+ffmcombinedchar("1F02","03B1","1FCD","top",ht#+acc_ht#,0);
+
+% alpha with dasia and varia
+ffmcombinedchar("1F03","03B1","1FDD","top",ht#+acc_ht#,0);
+
+% alpha with psili and oxia
+ffmcombinedchar("1F04","03B1","1FCE","top",ht#+acc_ht#,0);
+
+% alpha with dasia and oxia
+ffmcombinedchar("1F05","03B1","1FDE","top",ht#+acc_ht#,0);
+
+% alpha with psili and perispomeni
+ffmcombinedchar("1F06","03B1","1FCF","top",ht#+acc_ht#,0);
+
+% alpha with dasia and perispomeni
+ffmcombinedchar("1F07","03B1","1FDF","top",ht#+acc_ht#,0);
+
+% alpha with varia
+ffmcombinedchar("1F70","03B1","1FEF","top",ht#+acc_ht#,0);
+
+% alpha with oxia
+ffmcopiedchar("1F71","03AC");
+
+% alpha with psili and ypogegrammeni
+ffmcombinedchar("1F80","1F00","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with dasia and ypogegrammeni
+ffmcombinedchar("1F81","1F01","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with psili and varia and ypogegrammeni
+ffmcombinedchar("1F82","1F02","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with dasia and varia and ypogegrammeni
+ffmcombinedchar("1F83","1F03","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with psili and oxia and ypogegrammeni
+ffmcombinedchar("1F84","1F00","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with dasia and oxia and ypogegrammeni
+ffmcombinedchar("1F85","1F05","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with psili and perispomeni and ypogegrammeni
+ffmcombinedchar("1F86","1F06","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with dasia and perispomeni and ypogegrammeni
+ffmcombinedchar("1F87","1F07","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with vrachy (breve)
+ffmcombinedchar("1FB0","03B1","02D8","top",ht#+acc_ht#,0);
+
+% alpha with macron
+ffmcombinedchar("1FB1","03B1","00AF","top",ht#+acc_ht#,0);
+
+% alpha with varia and ypogegrammeni
+ffmcombinedchar("1FB2","1F70","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with oxia and ypogegrammeni
+ffmcombinedchar("1FB4","03AC","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% alpha with perispomeni
+ffmcombinedchar("1FB6","03B1","1FC0","top",ht#+acc_ht#,0);
+
+% alpha with perispomeni and ypogegrammeni
+ffmcombinedchar("1FB7","1FB3","1FC0","top",ht#+acc_ht#,0);
+
+% eta with ypogegrammeni
+ffmcombinedchar("1FC3","03B7","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with varia
+ffmcombinedchar("1F74","03B7","1FEF","top",ht#+acc_ht#,0);
+
+% eta with dasia
+ffmcombinedchar("1F21","03B7","1FFE","top",ht#+acc_ht#,0);
+
+% eta with psili
+ffmcombinedchar("1F20","03B7","1FBF","top",ht#+acc_ht#,0);
+
+% eta with varia and ypogegrammeni
+ffmcombinedchar("1FC2","1F74","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with dasia and ypogegrammeni
+ffmcombinedchar("1F91","1F21","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with psili and ypogegrammeni
+ffmcombinedchar("1F90","1F20","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with tonos
+ffmcombinedchar("03AE","03B7","0384","top",ht#+acc_ht#,0);
+
+% eta with dasia and oxia
+ffmcombinedchar("1F25","03B7","1FDE","top",ht#+acc_ht#,0);
+
+% eta with psili and oxia
+ffmcombinedchar("1F24","03B7","1FCE","top",ht#+acc_ht#,0);
+
+% eta with dasia and varia
+ffmcombinedchar("1F23","03B7","1FDD","top",ht#+acc_ht#,0);
+
+% eta with oxia and ypogegrammeni
+ffmcombinedchar("1FC4","03AE","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with dasia and oxia and ypogegrammeni
+ffmcombinedchar("1F95","1F25","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with psili and oxia and ypogegrammeni
+ffmcombinedchar("1F94","1F24","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with dasia and varia and ypogegrammeni
+ffmcombinedchar("1F93","1F23","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with perispomeni
+ffmcombinedchar("1FC6","03B7","1FC0","top",ht#+acc_ht#,0);
+
+% eta with dasia and perispomeni
+ffmcombinedchar("1F27","03B7","1FDF","top",ht#+acc_ht#,0);
+
+% eta with psili and perispomeni
+ffmcombinedchar("1F26","03B7","1FCF","top",ht#+acc_ht#,0);
+
+% eta with psili and varia
+ffmcombinedchar("1F22","03B7","1FCD","top",ht#+acc_ht#,0);
+
+% alpha with perispomeni and ypogegrammeni
+ffmcombinedchar("1FC7","1FC6","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with dasia and perispomeni and ypogegrammeni
+ffmcombinedchar("1F97","1F27","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with psili and perispomeni and ypogegrammeni
+ffmcombinedchar("1F96","1F26","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with psili and varia and ypogegrammeni
+ffmcombinedchar("1F92","1F22","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% eta with oxia
+ffmcopiedchar("1F75","03AE");
+
+% omega with ypogegrammeni
+ffmcombinedchar("1FF3","03C9","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with varia
+ffmcombinedchar("1F7C","03C9","1FEF","top",ht#+acc_ht#,0);
+
+% omega with dasia
+ffmcombinedchar("1F61","03C9","1FFE","top",ht#+acc_ht#,0);
+
+% omega with psili
+ffmcombinedchar("1F60","03C9","1FBF","top",ht#+acc_ht#,0);
+
+% omega with dasia and varia
+ffmcombinedchar("1F63","03C9","1FDD","top",ht#+acc_ht#,0);
+
+% omega with varia and ypogegrammeni
+ffmcombinedchar("1FF2","1F7C","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with dasia and ypogegrammeni
+ffmcombinedchar("1FA1","1F61","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with psili and ypogegrammeni
+ffmcombinedchar("1FA0","1F60","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with dasia and varia and ypogegrammeni
+ffmcombinedchar("1FA3","1F63","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with tonos
+ffmcombinedchar("03CE","03C9","0384","top",ht#+acc_ht#,0);
+
+% omega with dasia and oxia
+ffmcombinedchar("1F65","03C9","1FDE","top",ht#+acc_ht#,0);
+
+% omega with psili and oxia
+ffmcombinedchar("1F64","03C9","1FCE","top",ht#+acc_ht#,0);
+
+% omega with psili and varia
+ffmcombinedchar("1F62","03C9","1FCD","top",ht#+acc_ht#,0);
+
+% omega with oxia and ypogegrammeni
+ffmcombinedchar("1FF4","03CE","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with dasia and oxia and ypogegrammeni
+ffmcombinedchar("1FA5","1F65","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with psili and oxia and ypogegrammeni
+ffmcombinedchar("1FA4","1F60","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with psili and varia and ypogegrammeni
+ffmcombinedchar("1FA2","1F62","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with perispomeni
+ffmcombinedchar("1FF6","03C9","1FC0","top",ht#+acc_ht#,0);
+
+% omega with dasia and perispomeni
+ffmcombinedchar("1F67","03C9","1FDF","top",ht#+acc_ht#,0);
+
+% omega with psili and perispomeni
+ffmcombinedchar("1F66","03C9","1FCF","top",ht#+acc_ht#,0);
+
+% omega with perispomeni and ypogegrammeni
+ffmcombinedchar("1FF7","1FF3","1FC0","top",ht#+acc_ht#,0);
+
+% omega with dasia and perispomeni and ypogegrammeni
+ffmcombinedchar("1FA7","1F67","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with psili and perispomeni and ypogegrammeni
+ffmcombinedchar("1FA6","1F66","037A","bot",ht#+acc_ht#,comma_depth#);
+
+% omega with varia
+ffmcombinedchar("1F7D","03C9","1FEF","top",ht#+acc_ht#,0);
+
+% iota with varia
+ffmcombinedchar("1F76","03B9","1FEF","top",ht#+acc_ht#,0);
+
+% iota with dasia
+ffmcombinedchar("1F31","03B9","1FFE","top",ht#+acc_ht#,0);
+
+% iota with psili
+ffmcombinedchar("1F30","03B9","1FBF","top",ht#+acc_ht#,0);
+
+% iota with dasia and varia
+ffmcombinedchar("1F33","03B9","1FDD","top",ht#+acc_ht#,0);
+
+% iota with tonos
+ffmcombinedchar("03AF","03B9","0384","top",ht#+acc_ht#,0);
+
+% iota with dasia and oxia
+ffmcombinedchar("1F35","03B9","1FDE","top",ht#+acc_ht#,0);
+
+% iota with psili and oxia
+ffmcombinedchar("1F34","03B9","1FCE","top",ht#+acc_ht#,0);
+
+% iota with psili and varia
+ffmcombinedchar("1F32","03B9","1FCD","top",ht#+acc_ht#,0);
+
+% iota with perispomeni
+ffmcombinedchar("1FD6","03B9","1FC0","top",ht#+acc_ht#,0);
+
+% iota with dasia and perispomeni
+ffmcombinedchar("1F37","03B9","1FDF","top",ht#+acc_ht#,0);
+
+% iota with psili and perispomeni
+ffmcombinedchar("1F36","03B9","1FCF","top",ht#+acc_ht#,0);
+
+% iota with dialytika
+ffmcombinedchar("03CA","03B9","00A8","top",ht#+acc_ht#,0);
+
+% iota with dialytika and varia
+ffmcombinedchar("1FD2","03B9","1FED","top",ht#+acc_ht#,0);
+
+% iota with dialytika and tonos
+ffmcombinedchar("0390","03B9","0385","top",ht#+acc_ht#,0);
+
+% iota with dialytika and perispomeni
+ffmcombinedchar("1FD7","03B9","1FC1","top",ht#+acc_ht#,0);
+
+% iota with oxia
+ffmcopiedchar("1F77","03AF");
+
+% iota with vrachy (breve)
+ffmcombinedchar("1FD0","03B9","02D8","top",ht#+acc_ht#,0);
+
+% iota with macron
+ffmcombinedchar("1FD1","03B9","00AF","top",ht#+acc_ht#,0);
+
+% iota with dialytika and oxia (tonos)
+ffmcombinedchar("1FD3","03B9","0385","top",ht#+acc_ht#,0);
+
+% upsilon with varia
+ffmcombinedchar("1F7A","03C5","1FEF","top",ht#+acc_ht#,0);
+
+% upsilon with dasia
+ffmcombinedchar("1F51","03C5","1FFE","top",ht#+acc_ht#,0);
+
+% upsilon with psili
+ffmcombinedchar("1F50","03C5","1FBF","top",ht#+acc_ht#,0);
+
+% upsilon with dasia and varia
+ffmcombinedchar("1F53","03C5","1FDD","top",ht#+acc_ht#,0);
+
+% upsilon with tonos
+ffmcombinedchar("03CD","03C5","0384","top",ht#+acc_ht#,0);
+
+% upsilon with dasia and oxia
+ffmcombinedchar("1F55","03C5","1FDE","top",ht#+acc_ht#,0);
+
+% upsilon with psili and oxia
+ffmcombinedchar("1F54","03C5","1FCE","top",ht#+acc_ht#,0);
+
+% upsilon with psili and varia
+ffmcombinedchar("1F52","03C5","1FCD","top",ht#+acc_ht#,0);
+
+% upsilon with perispomeni
+ffmcombinedchar("1FE6","03C5","1FC0","top",ht#+acc_ht#,0);
+
+% upsilon with dasia and perispomeni
+ffmcombinedchar("1F57","03C5","1FDF","top",ht#+acc_ht#,0);
+
+% upsilon with psili and perispomeni
+ffmcombinedchar("1F56","03C5","1FCF","top",ht#+acc_ht#,0);
+
+% upsilon with dialytika (dieresis)
+ffmcombinedchar("03CB","03C5","00A8","top",ht#+acc_ht#,0);
+
+% upsilon with dialytika and varia
+ffmcombinedchar("1FE2","03C5","1FED","top",ht#+acc_ht#,0);
+
+% upsilon with dialytika and tonos
+ffmcombinedchar("03B0","03C5","0385","top",ht#+acc_ht#,0);
+
+% upsilon with dialytika and perispomeni
+ffmcombinedchar("1FE7","03C5","1FC1","top",ht#+acc_ht#,0);
+
+% upsilon with oxia
+ffmcombinedchar("1F7B","03C5","0384","top",ht#+acc_ht#,0);
+
+% upsilon with vrachy (breve)
+ffmcombinedchar("1FE0","03C5","02D8","top",ht#+acc_ht#,0);
+
+% upsilon with macron
+ffmcombinedchar("1FE1","03C5","00AF","top",ht#+acc_ht#,0);
+
+% upsilon with dialytika and oxia (tonos)
+ffmcombinedchar("1FE3","03C5","0385","top",ht#+acc_ht#,0);
+
+% epsilon with varia
+ffmcombinedchar("1F72","03B5","1FEF","top",ht#+acc_ht#,0);
+
+% epsilon with dasia
+ffmcombinedchar("1F11","03B5","1FFE","top",ht#+acc_ht#,0);
+
+% epsilon with psili
+ffmcombinedchar("1F10","03B5","1FBF","top",ht#+acc_ht#,0);
+
+% epsilon with dasia and varia
+ffmcombinedchar("1F13","03B5","1FDD","top",ht#+acc_ht#,0);
+
+% epsilon with tonos
+ffmcombinedchar("03AD","03B5","0384","top",ht#+acc_ht#,0);
+
+% epsilon with dasia and oxia
+ffmcombinedchar("1F15","03B5","1FDE","top",ht#+acc_ht#,0);
+
+% epsilon with psili and oxia
+ffmcombinedchar("1F14","03B5","1FCE","top",ht#+acc_ht#,0);
+
+% epsilon with psili and varia
+ffmcombinedchar("1F12","03B5","1FCD","top",ht#+acc_ht#,0);
+
+% epsilon with oxia
+ffmcopiedchar("1F73","03AD");
+
+% omicron with varia
+ffmcombinedchar("1F78","03BF","1FEF","top",ht#+acc_ht#,0);
+
+% omicron with dasia
+ffmcombinedchar("1F41","03BF","1FFE","top",ht#+acc_ht#,0);
+
+% omicron with psili
+ffmcombinedchar("1F40","03BF","1FBF","top",ht#+acc_ht#,0);
+
+% omicron with dasia and varia
+ffmcombinedchar("1F43","03BF","1FDD","top",ht#+acc_ht#,0);
+
+% omicron with tonos
+ffmcombinedchar("03CC","03BF","0384","top",ht#+acc_ht#,0);
+
+% omicron with dasia and oxia
+ffmcombinedchar("1F45","03BF","1FDE","top",ht#+acc_ht#,0);
+
+% omicron with psili and oxia
+ffmcombinedchar("1F44","03BF","1FCE","top",ht#+acc_ht#,0);
+
+% omicron with psili and varia
+ffmcombinedchar("1F42","03BF","1FCD","top",ht#+acc_ht#,0);
+
+% omicron with oxia
+ffmcombinedchar("1F79","03BF","0384","top",ht#+acc_ht#,0);
+
+% rho with dasia
+ffmcombinedchar("1FE5","03C1","1FFE","top",ht#+acc_ht#,0);
+
+% rho with psili
+ffmcombinedchar("1FE4","03C1","1FBF","top",ht#+acc_ht#,0);
+
+%restore the settings for non-lowercase
+ht#:=old_ht#;
+u#:=u#/.9;
+define_pixels(u);
+barheight#:=old_barheight#;
+define_pixels(u);
+define_good_y_pixels(barheight);
+
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmco10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmco10.mf
index 62d44e29f4e..e4a6607b85d 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmco10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmco10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (condensed oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-CondensedOblique";
+ font_fullname "Fetamont Condensed Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 3;
+fi
font_identifier:="FFMCO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmh10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmh10.mf
index 93e1625e0c2..ffb72bdbeac 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmh10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmh10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (heavy, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Heavy";
+ font_fullname "Fetamont Heavy";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(9.5,72,7);
+fi
font_identifier:="FFMH";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmh8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmh8.mf
index b24c3ac63bc..80c9bb30cc4 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmh8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmh8.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (heavy, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Heavy8";
+ font_fullname "Fetamont Heavy 8";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(5,8.4,7);
+fi
font_identifier:="FFMH";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmh9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmh9.mf
index 71279880925..33b3bdbcb38 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmh9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmh9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (heavy, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Heavy9";
+ font_fullname "Fetamont Heavy 9";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(8.5,9.4,7);
+fi
font_identifier:="FFMH";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmho10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmho10.mf
index 3a12dca4dce..ce9c8a9aa44 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmho10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmho10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (heavy oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-HeavyOblique";
+ font_fullname "Fetamont Heavy Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(9.5,72,8);
+fi
font_identifier:="FFMHO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmho8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmho8.mf
index 70c742c0643..7a2898919dc 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmho8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmho8.mf
@@ -1,4 +1,12 @@
-% Fetamont parameters (heavy oblique, 9pt)
+% Fetamont parameters (heavy oblique, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-HeavyOblique8";
+ font_fullname "Fetamont Heavy Oblique 8";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(5,8.4,8);
+fi
font_identifier:="FFMHO";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmho9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmho9.mf
index fd0d19c21cf..c173e50cb43 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmho9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmho9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (heavy oblique, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-HeavyOblique9";
+ font_fullname "Fetamont Heavy Oblique 9";
+ font_familyname "Fetamont";
+ font_os_weight 800;
+ font_os_width 5;
+ font_range(8.5,9.4,8);
+fi
font_identifier:="FFMHO";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmhw10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmhw10.mf
index f721d6c35e0..4c9ce4b2031 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmhw10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmhw10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (heavy script, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-HeavyScript";
+ font_fullname "Fetamont Heavy Script";
+ font_familyname "Fetamont Script";
+ font_os_weight 800;
+ font_os_width 5;
+fi
font_identifier:="FFMHW";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=0; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmhwo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmhwo10.mf
index d00f17b0d75..74d6d67589c 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmhwo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmhwo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (heavy script oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-HeavyScriptOblique";
+ font_fullname "Fetamont Heavy Script Oblique";
+ font_familyname "Fetamont Script";
+ font_os_weight 800;
+ font_os_width 5;
+fi
font_identifier:="FFMHWO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=1/4; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffml10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffml10.mf
index a17fb44e559..65c10e009da 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffml10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffml10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Light";
+ font_fullname "Fetamont Light";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 5;
+fi
font_identifier:="FFML";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlc10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlc10.mf
index 901f42719e4..9fd38bd234d 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlc10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlc10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light condensed, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightCondensed";
+ font_fullname "Fetamont Light Condensed";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 3;
+fi
font_identifier:="FFMLC";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlco10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlco10.mf
index 1803dda91ec..3d34cca97cb 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlco10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlco10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light condensed oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightCondensedOblique";
+ font_fullname "Fetamont Light Condensed Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 3;
+fi
font_identifier:="FFMLCO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlo10.mf
index 0bc8d0a949e..3fc2c3c9f43 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightOblique";
+ font_fullname "Fetamont Light Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 5;
+fi
font_identifier:="FFMLO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlq10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlq10.mf
index b4b1a86d74e..fdf5a925bff 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlq10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlq10.mf
@@ -1,5 +1,12 @@
% Fetamont parameters (light ultracondensed, 10pt)
font_identifier:="FFMLQ";
+if base_name="mf2outline":
+ font_name "Fetamont-LightUltraCondensed";
+ font_fullname "Fetamont Light Ultra-Condensed";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 1;
+fi
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
x_ht#:=4.5pt#; % x-height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlqo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlqo10.mf
index 49f73e840ff..3e3739ff0c8 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlqo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlqo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light ultracondensed oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightUltraCondensedOblique";
+ font_fullname "Fetamont Light Ultra-Condensed Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 300;
+ font_os_width 1;
+fi
font_identifier:="FFMLQO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlw10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlw10.mf
index 5b97b6d54d4..2c3813b437c 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlw10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlw10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light script, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightScript";
+ font_fullname "Fetamont Light Script";
+ font_familyname "Fetamont Script";
+ font_os_weight 300;
+ font_os_width 5;
+fi
font_identifier:="FFMLW";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=0; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmlwo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmlwo10.mf
index 86c1efa239d..9bf9f559d13 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmlwo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmlwo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (light script oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-LightScriptOblique";
+ font_fullname "Fetamont Light Script Oblique";
+ font_familyname "Fetamont Script";
+ font_os_weight 300;
+ font_os_width 5;
+fi
font_identifier:="FFMLWO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=1/4; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmo10.mf
index cb36542a8db..1218ad8a5d9 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmo10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Oblique";
+ font_fullname "Fetamont Oblique";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(9.5,72,4);
+fi
font_identifier:="FFMO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmo8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmo8.mf
index 3284a742617..5f65dcf9674 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmo8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmo8.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (oblique, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Oblique8";
+ font_fullname "Fetamont Oblique 8";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(5,8.4,4);
+fi
font_identifier:="FFMO";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmo9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmo9.mf
index 1c25007a442..ebee8447764 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmo9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmo9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (oblique, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Oblique9";
+ font_fullname "Fetamont Oblique 9";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(8.5,9.4,4);
+fi
font_identifier:="FFMO";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmr10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmr10.mf
index c65e46796a0..ca1c3272374 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmr10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmr10.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (regular, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Regular";
+ font_fullname "Fetamont Regular";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(9.5,72,3);
+fi
font_identifier:="FFMR";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -21,3 +29,4 @@ craziness:=0; % degree of haphazard variation
superness:=.8; % parameter for superellipses
input ffmbase % now generate the font
+
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmr8.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmr8.mf
index 93294866e18..dacc9228f1d 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmr8.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmr8.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (regular, 8pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Regular8";
+ font_fullname "Fetamont Regular 8";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(5,8.4,3);
+fi
font_identifier:="FFMR";
font_size 8pt#; % the "design size" of this font
ht#:=.8*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmr9.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmr9.mf
index dd5d743612b..9d7355482e8 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmr9.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmr9.mf
@@ -1,4 +1,12 @@
% Fetamont parameters (regular, 9pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Regular9";
+ font_fullname "Fetamont Regular 9";
+ font_familyname "Fetamont";
+ font_os_weight 400;
+ font_os_width 5;
+ font_range(8.5,9.4,3);
+fi
font_identifier:="FFMR";
font_size 9pt#; % the "design size" of this font
ht#:=.9*6pt#; % height of characters
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmw10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmw10.mf
index 81e64357abf..bd731dec5a9 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmw10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmw10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (script, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-Script";
+ font_fullname "Fetamont Script";
+ font_familyname "Fetamont Script";
+ font_os_weight 400;
+ font_os_width 5;
+fi
font_identifier:="FFMW";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=0; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font
diff --git a/Master/texmf-dist/fonts/source/public/fetamont/ffmwo10.mf b/Master/texmf-dist/fonts/source/public/fetamont/ffmwo10.mf
index fe2db7e7600..af6a255cc00 100644
--- a/Master/texmf-dist/fonts/source/public/fetamont/ffmwo10.mf
+++ b/Master/texmf-dist/fonts/source/public/fetamont/ffmwo10.mf
@@ -1,4 +1,11 @@
% Fetamont parameters (script oblique, 10pt)
+if base_name="mf2outline":
+ font_name "Fetamont-ScriptOblique";
+ font_fullname "Fetamont Script Oblique";
+ font_familyname "Fetamont Script";
+ font_os_weight 400;
+ font_os_width 5;
+fi
font_identifier:="FFMWO";
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
@@ -19,5 +26,6 @@ prot:=60; % rotation angle of the pen
slant:=1/4; % slanting amount
craziness:=.1pt; % degree of haphazard variation
superness:=.75; % parameter for superellipses
+has_variants:=1; % are random variants contained?
input ffmbase % now generate the font