summaryrefslogtreecommitdiff
path: root/fonts/malvern
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/malvern
Initial commit
Diffstat (limited to 'fonts/malvern')
-rw-r--r--fonts/malvern/00readme.txt23
-rw-r--r--fonts/malvern/0copying.txt31
-rw-r--r--fonts/malvern/0ebcdic.txt12
-rw-r--r--fonts/malvern/0news.txt174
-rw-r--r--fonts/malvern/contents.txt549
-rw-r--r--fonts/malvern/contrib/README13
-rw-r--r--fonts/malvern/contrib/spqr/README19
-rw-r--r--fonts/malvern/contrib/spqr/maketexpk.cmd341
-rw-r--r--fonts/malvern/contrib/spqr/maltex.mf7
-rw-r--r--fonts/malvern/contrib/spqr/malvern.sty129
-rw-r--r--fonts/malvern/contrib/spqr/test.tex121
-rw-r--r--fonts/malvern/doc/cmdoc.tex311
-rw-r--r--fonts/malvern/doc/install.tex541
-rw-r--r--fonts/malvern/doc/ma55doc.tex310
-rw-r--r--fonts/malvern/doc/mabib.tex239
-rw-r--r--fonts/malvern/doc/magrmac.tex85
-rw-r--r--fonts/malvern/doc/magrman.fnt25
-rw-r--r--fonts/malvern/doc/magrman.idx6
-rw-r--r--fonts/malvern/doc/magrman.tex602
-rw-r--r--fonts/malvern/doc/magrman.toc9
-rw-r--r--fonts/malvern/doc/makeind.rc36
-rw-r--r--fonts/malvern/doc/maman.aux54
-rw-r--r--fonts/malvern/doc/maman.fnt32
-rw-r--r--fonts/malvern/doc/maman.idx121
-rw-r--r--fonts/malvern/doc/maman.ilg7
-rw-r--r--fonts/malvern/doc/maman.ind284
-rw-r--r--fonts/malvern/doc/maman.tex3246
-rw-r--r--fonts/malvern/doc/maman.toc56
-rw-r--r--fonts/malvern/doc/pdcdcap.tex28
-rw-r--r--fonts/malvern/doc/pdcfmt.tex361
-rw-r--r--fonts/malvern/doc/pdcfsel.tex209
-rw-r--r--fonts/malvern/doc/pdchyex.tex38
-rw-r--r--fonts/malvern/doc/pdcidx.tex133
-rw-r--r--fonts/malvern/doc/pdcimth.tex25
-rw-r--r--fonts/malvern/doc/pdcmigr.tex14
-rw-r--r--fonts/malvern/doc/pdcoput.tex432
-rw-r--r--fonts/malvern/doc/pdcpars.tex301
-rw-r--r--fonts/malvern/drivers/ma53a12.mf12
-rw-r--r--fonts/malvern/drivers/ma55a10.mf12
-rw-r--r--fonts/malvern/drivers/ma55a12.mf12
-rw-r--r--fonts/malvern/drivers/ma55a14.mf12
-rw-r--r--fonts/malvern/drivers/ma55a18.mf12
-rw-r--r--fonts/malvern/drivers/ma55a24.mf12
-rw-r--r--fonts/malvern/drivers/ma55a48.mf12
-rw-r--r--fonts/malvern/drivers/ma55a7.mf12
-rw-r--r--fonts/malvern/drivers/ma55a9.mf12
-rw-r--r--fonts/malvern/drivers/ma55az10.mf11
-rw-r--r--fonts/malvern/drivers/ma55az12.mf11
-rw-r--r--fonts/malvern/drivers/ma55az14.mf11
-rw-r--r--fonts/malvern/drivers/ma55az18.mf11
-rw-r--r--fonts/malvern/drivers/ma55az24.mf11
-rw-r--r--fonts/malvern/drivers/ma55az7.mf11
-rw-r--r--fonts/malvern/drivers/ma55b10.mf12
-rw-r--r--fonts/malvern/drivers/ma55b12.mf12
-rw-r--r--fonts/malvern/drivers/ma55b14.mf12
-rw-r--r--fonts/malvern/drivers/ma55b18.mf12
-rw-r--r--fonts/malvern/drivers/ma55b24.mf12
-rw-r--r--fonts/malvern/drivers/ma55b7.mf12
-rw-r--r--fonts/malvern/drivers/ma55c12.mf12
-rw-r--r--fonts/malvern/drivers/ma55g10.mf12
-rw-r--r--fonts/malvern/drivers/ma55g11.mf12
-rw-r--r--fonts/malvern/drivers/ma55g12.mf12
-rw-r--r--fonts/malvern/drivers/ma55g24.mf12
-rw-r--r--fonts/malvern/drivers/ma55g9.mf12
-rw-r--r--fonts/malvern/drivers/ma55s10.mf11
-rw-r--r--fonts/malvern/drivers/ma55s12.mf11
-rw-r--r--fonts/malvern/drivers/ma55s14.mf11
-rw-r--r--fonts/malvern/drivers/ma55s18.mf11
-rw-r--r--fonts/malvern/drivers/ma55s24.mf11
-rw-r--r--fonts/malvern/drivers/ma55s7.mf11
-rw-r--r--fonts/malvern/drivers/ma56a10.mf14
-rw-r--r--fonts/malvern/drivers/ma56a12.mf14
-rw-r--r--fonts/malvern/drivers/ma56a14.mf14
-rw-r--r--fonts/malvern/drivers/ma56a18.mf14
-rw-r--r--fonts/malvern/drivers/ma56a24.mf14
-rw-r--r--fonts/malvern/drivers/ma56a7.mf14
-rw-r--r--fonts/malvern/drivers/ma56a9.mf14
-rw-r--r--fonts/malvern/drivers/ma56az10.mf13
-rw-r--r--fonts/malvern/drivers/ma56az12.mf13
-rw-r--r--fonts/malvern/drivers/ma56az14.mf13
-rw-r--r--fonts/malvern/drivers/ma56az18.mf13
-rw-r--r--fonts/malvern/drivers/ma56az24.mf13
-rw-r--r--fonts/malvern/drivers/ma56az7.mf13
-rw-r--r--fonts/malvern/drivers/ma56b10.mf14
-rw-r--r--fonts/malvern/drivers/ma56b12.mf14
-rw-r--r--fonts/malvern/drivers/ma56b14.mf14
-rw-r--r--fonts/malvern/drivers/ma56b18.mf14
-rw-r--r--fonts/malvern/drivers/ma56b24.mf14
-rw-r--r--fonts/malvern/drivers/ma56b7.mf14
-rw-r--r--fonts/malvern/drivers/ma56g11.mf14
-rw-r--r--fonts/malvern/drivers/ma56s10.mf13
-rw-r--r--fonts/malvern/drivers/ma56s12.mf13
-rw-r--r--fonts/malvern/drivers/ma56s14.mf13
-rw-r--r--fonts/malvern/drivers/ma56s18.mf13
-rw-r--r--fonts/malvern/drivers/ma56s24.mf13
-rw-r--r--fonts/malvern/drivers/ma56s7.mf13
-rw-r--r--fonts/malvern/drivers/ma57a12.mf12
-rw-r--r--fonts/malvern/drivers/ma75a10.mf12
-rw-r--r--fonts/malvern/drivers/ma75a12.mf12
-rw-r--r--fonts/malvern/drivers/ma75a14.mf12
-rw-r--r--fonts/malvern/drivers/ma75a18.mf12
-rw-r--r--fonts/malvern/drivers/ma75a24.mf12
-rw-r--r--fonts/malvern/drivers/ma75a7.mf12
-rw-r--r--fonts/malvern/drivers/ma75a72.mf12
-rw-r--r--fonts/malvern/drivers/ma75a9.mf12
-rw-r--r--fonts/malvern/drivers/ma75az10.mf11
-rw-r--r--fonts/malvern/drivers/ma75az12.mf11
-rw-r--r--fonts/malvern/drivers/ma75az14.mf11
-rw-r--r--fonts/malvern/drivers/ma75az18.mf11
-rw-r--r--fonts/malvern/drivers/ma75az24.mf11
-rw-r--r--fonts/malvern/drivers/ma75az7.mf11
-rw-r--r--fonts/malvern/drivers/ma75b10.mf12
-rw-r--r--fonts/malvern/drivers/ma75b12.mf12
-rw-r--r--fonts/malvern/drivers/ma75b14.mf12
-rw-r--r--fonts/malvern/drivers/ma75b18.mf12
-rw-r--r--fonts/malvern/drivers/ma75b24.mf12
-rw-r--r--fonts/malvern/drivers/ma75b7.mf12
-rw-r--r--fonts/malvern/drivers/ma75s10.mf11
-rw-r--r--fonts/malvern/drivers/ma75s12.mf11
-rw-r--r--fonts/malvern/drivers/ma75s14.mf11
-rw-r--r--fonts/malvern/drivers/ma75s18.mf11
-rw-r--r--fonts/malvern/drivers/ma75s24.mf11
-rw-r--r--fonts/malvern/drivers/ma75s7.mf11
-rw-r--r--fonts/malvern/drivers/ma76a10.mf14
-rw-r--r--fonts/malvern/drivers/ma76a12.mf14
-rw-r--r--fonts/malvern/drivers/ma76a14.mf14
-rw-r--r--fonts/malvern/drivers/ma76a18.mf14
-rw-r--r--fonts/malvern/drivers/ma76a24.mf14
-rw-r--r--fonts/malvern/drivers/ma76a7.mf14
-rw-r--r--fonts/malvern/drivers/ma76az10.mf13
-rw-r--r--fonts/malvern/drivers/ma76az12.mf13
-rw-r--r--fonts/malvern/drivers/ma76az14.mf13
-rw-r--r--fonts/malvern/drivers/ma76az18.mf13
-rw-r--r--fonts/malvern/drivers/ma76az24.mf13
-rw-r--r--fonts/malvern/drivers/ma76az7.mf13
-rw-r--r--fonts/malvern/drivers/ma76b10.mf14
-rw-r--r--fonts/malvern/drivers/ma76b12.mf14
-rw-r--r--fonts/malvern/drivers/ma76b14.mf14
-rw-r--r--fonts/malvern/drivers/ma76b18.mf14
-rw-r--r--fonts/malvern/drivers/ma76b24.mf14
-rw-r--r--fonts/malvern/drivers/ma76b7.mf14
-rw-r--r--fonts/malvern/drivers/ma76s10.mf13
-rw-r--r--fonts/malvern/drivers/ma76s12.mf13
-rw-r--r--fonts/malvern/drivers/ma76s14.mf13
-rw-r--r--fonts/malvern/drivers/ma76s18.mf13
-rw-r--r--fonts/malvern/drivers/ma76s24.mf13
-rw-r--r--fonts/malvern/drivers/ma76s7.mf13
-rw-r--r--fonts/malvern/dvi/install.dvibin0 -> 19864 bytes
-rw-r--r--fonts/malvern/dvi/magrman.dvibin0 -> 15224 bytes
-rw-r--r--fonts/malvern/dvi/maman.dvibin0 -> 119336 bytes
-rw-r--r--fonts/malvern/fontinst/README46
-rw-r--r--fonts/malvern/fontinst/example.tex35
-rw-r--r--fonts/malvern/fontinst/fontma.tex224
-rw-r--r--fonts/malvern/fontinst/pdcadma.mtx151
-rw-r--r--fonts/malvern/fontinst/pdcetxf.tex197
-rw-r--r--fonts/malvern/fontinst/pdcetxm.tex110
-rw-r--r--fonts/malvern/fontinst/pdcmaa.etx876
-rw-r--r--fonts/malvern/fontinst/pdcmaa3.etx35
-rw-r--r--fonts/malvern/fontinst/pdcmab.etx523
-rw-r--r--fonts/malvern/fontinst/pdcmat1.mtx186
-rw-r--r--fonts/malvern/latex209/fmv9nfss.sty106
-rw-r--r--fonts/malvern/latex209/fmv9pltx.sty354
-rw-r--r--fonts/malvern/latex209/fmvnfss.sty106
-rw-r--r--fonts/malvern/latex209/fmvpltx.sty354
-rw-r--r--fonts/malvern/source/ascii.mf54
-rw-r--r--fonts/malvern/source/fmv.mf33
-rw-r--r--fonts/malvern/source/fmv.mff92
-rw-r--r--fonts/malvern/source/ma.mf392
-rw-r--r--fonts/malvern/source/maaenc.mf238
-rw-r--r--fonts/malvern/source/mabenc.mf134
-rw-r--r--fonts/malvern/source/macaps.mf348
-rw-r--r--fonts/malvern/source/macenc.mf227
-rw-r--r--fonts/malvern/source/macy.mf279
-rw-r--r--fonts/malvern/source/maeenc.mf79
-rw-r--r--fonts/malvern/source/maencode.mf68
-rw-r--r--fonts/malvern/source/mafigs.mf230
-rw-r--r--fonts/malvern/source/magenc.mf384
-rw-r--r--fonts/malvern/source/maglcaps.mf293
-rw-r--r--fonts/malvern/source/magrcaps.mf219
-rw-r--r--fonts/malvern/source/magrlc.mf846
-rw-r--r--fonts/malvern/source/makit.mf1167
-rw-r--r--fonts/malvern/source/malc.mf620
-rw-r--r--fonts/malvern/source/malcco.mf112
-rw-r--r--fonts/malvern/source/malcnc.mf341
-rw-r--r--fonts/malvern/source/mamarks.mf255
-rw-r--r--fonts/malvern/source/maparams.mf219
-rw-r--r--fonts/malvern/source/mapunct.mf308
-rw-r--r--fonts/malvern/source/mascript.mf39
-rw-r--r--fonts/malvern/source/masenc.mf109
-rw-r--r--fonts/malvern/source/masyms.mf779
-rw-r--r--fonts/malvern/source/mff.rc95
-rw-r--r--fonts/malvern/source/testfont.tex495
-rw-r--r--fonts/malvern/tex/OT1fmv.fd75
-rw-r--r--fonts/malvern/tex/OT1fmv9.fd75
-rw-r--r--fonts/malvern/tex/T1fmv.fd73
-rw-r--r--fonts/malvern/tex/T1fmv9.fd73
-rw-r--r--fonts/malvern/tex/maamac.tex290
-rw-r--r--fonts/malvern/tex/pdcutil.tex217
-rw-r--r--fonts/malvern/tfm/ma53a12.tfmbin0 -> 2436 bytes
-rw-r--r--fonts/malvern/tfm/ma55a10.tfmbin0 -> 2412 bytes
-rw-r--r--fonts/malvern/tfm/ma55a12.tfmbin0 -> 2428 bytes
-rw-r--r--fonts/malvern/tfm/ma55a14.tfmbin0 -> 2420 bytes
-rw-r--r--fonts/malvern/tfm/ma55a18.tfmbin0 -> 2428 bytes
-rw-r--r--fonts/malvern/tfm/ma55a24.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma55a48.tfmbin0 -> 2432 bytes
-rw-r--r--fonts/malvern/tfm/ma55a7.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma55a9.tfmbin0 -> 2420 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa10.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa12.tfmbin0 -> 2520 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa14.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa18.tfmbin0 -> 2524 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa24.tfmbin0 -> 2520 bytes
-rw-r--r--fonts/malvern/tfm/ma55aa7.tfmbin0 -> 2504 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab10.tfmbin0 -> 2536 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab12.tfmbin0 -> 2540 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab14.tfmbin0 -> 2536 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab18.tfmbin0 -> 2544 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab24.tfmbin0 -> 2540 bytes
-rw-r--r--fonts/malvern/tfm/ma55ab7.tfmbin0 -> 1848 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar10.tfmbin0 -> 6104 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar12.tfmbin0 -> 6108 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar14.tfmbin0 -> 6104 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar18.tfmbin0 -> 6112 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar24.tfmbin0 -> 6108 bytes
-rw-r--r--fonts/malvern/tfm/ma55ar7.tfmbin0 -> 6088 bytes
-rw-r--r--fonts/malvern/tfm/ma55as10.tfmbin0 -> 6136 bytes
-rw-r--r--fonts/malvern/tfm/ma55as12.tfmbin0 -> 6140 bytes
-rw-r--r--fonts/malvern/tfm/ma55as14.tfmbin0 -> 6136 bytes
-rw-r--r--fonts/malvern/tfm/ma55as18.tfmbin0 -> 6144 bytes
-rw-r--r--fonts/malvern/tfm/ma55as24.tfmbin0 -> 6140 bytes
-rw-r--r--fonts/malvern/tfm/ma55as7.tfmbin0 -> 6124 bytes
-rw-r--r--fonts/malvern/tfm/ma55at10.tfmbin0 -> 11088 bytes
-rw-r--r--fonts/malvern/tfm/ma55at12.tfmbin0 -> 11092 bytes
-rw-r--r--fonts/malvern/tfm/ma55at14.tfmbin0 -> 11088 bytes
-rw-r--r--fonts/malvern/tfm/ma55at18.tfmbin0 -> 11096 bytes
-rw-r--r--fonts/malvern/tfm/ma55at24.tfmbin0 -> 11092 bytes
-rw-r--r--fonts/malvern/tfm/ma55at7.tfmbin0 -> 11056 bytes
-rw-r--r--fonts/malvern/tfm/ma55au10.tfmbin0 -> 11104 bytes
-rw-r--r--fonts/malvern/tfm/ma55au12.tfmbin0 -> 11108 bytes
-rw-r--r--fonts/malvern/tfm/ma55au14.tfmbin0 -> 11104 bytes
-rw-r--r--fonts/malvern/tfm/ma55au18.tfmbin0 -> 11112 bytes
-rw-r--r--fonts/malvern/tfm/ma55au24.tfmbin0 -> 11108 bytes
-rw-r--r--fonts/malvern/tfm/ma55au7.tfmbin0 -> 11076 bytes
-rw-r--r--fonts/malvern/tfm/ma55az10.tfmbin0 -> 1644 bytes
-rw-r--r--fonts/malvern/tfm/ma55az12.tfmbin0 -> 1652 bytes
-rw-r--r--fonts/malvern/tfm/ma55az14.tfmbin0 -> 1644 bytes
-rw-r--r--fonts/malvern/tfm/ma55az18.tfmbin0 -> 1656 bytes
-rw-r--r--fonts/malvern/tfm/ma55az24.tfmbin0 -> 1648 bytes
-rw-r--r--fonts/malvern/tfm/ma55az7.tfmbin0 -> 1648 bytes
-rw-r--r--fonts/malvern/tfm/ma55b10.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/malvern/tfm/ma55b12.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/malvern/tfm/ma55b14.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma55b18.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma55b24.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma55b7.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma55c12.tfmbin0 -> 996 bytes
-rw-r--r--fonts/malvern/tfm/ma55g10.tfmbin0 -> 2508 bytes
-rw-r--r--fonts/malvern/tfm/ma55g11.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma55g12.tfmbin0 -> 2508 bytes
-rw-r--r--fonts/malvern/tfm/ma55g24.tfmbin0 -> 2520 bytes
-rw-r--r--fonts/malvern/tfm/ma55g9.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma55s10.tfmbin0 -> 1628 bytes
-rw-r--r--fonts/malvern/tfm/ma55s12.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/malvern/tfm/ma55s14.tfmbin0 -> 1628 bytes
-rw-r--r--fonts/malvern/tfm/ma55s18.tfmbin0 -> 1636 bytes
-rw-r--r--fonts/malvern/tfm/ma55s24.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/malvern/tfm/ma55s7.tfmbin0 -> 1628 bytes
-rw-r--r--fonts/malvern/tfm/ma56a10.tfmbin0 -> 2684 bytes
-rw-r--r--fonts/malvern/tfm/ma56a12.tfmbin0 -> 2676 bytes
-rw-r--r--fonts/malvern/tfm/ma56a14.tfmbin0 -> 2684 bytes
-rw-r--r--fonts/malvern/tfm/ma56a18.tfmbin0 -> 2688 bytes
-rw-r--r--fonts/malvern/tfm/ma56a24.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma56a7.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma56a9.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar10.tfmbin0 -> 6380 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar12.tfmbin0 -> 6380 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar14.tfmbin0 -> 6380 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar18.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar24.tfmbin0 -> 6380 bytes
-rw-r--r--fonts/malvern/tfm/ma56ar7.tfmbin0 -> 6376 bytes
-rw-r--r--fonts/malvern/tfm/ma56as10.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma56as12.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma56as14.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma56as18.tfmbin0 -> 6412 bytes
-rw-r--r--fonts/malvern/tfm/ma56as24.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma56as7.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma56az10.tfmbin0 -> 1808 bytes
-rw-r--r--fonts/malvern/tfm/ma56az12.tfmbin0 -> 1804 bytes
-rw-r--r--fonts/malvern/tfm/ma56az14.tfmbin0 -> 1812 bytes
-rw-r--r--fonts/malvern/tfm/ma56az18.tfmbin0 -> 1816 bytes
-rw-r--r--fonts/malvern/tfm/ma56az24.tfmbin0 -> 1808 bytes
-rw-r--r--fonts/malvern/tfm/ma56az7.tfmbin0 -> 1804 bytes
-rw-r--r--fonts/malvern/tfm/ma56b10.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma56b12.tfmbin0 -> 1184 bytes
-rw-r--r--fonts/malvern/tfm/ma56b14.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma56b18.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma56b24.tfmbin0 -> 1184 bytes
-rw-r--r--fonts/malvern/tfm/ma56b7.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma56g11.tfmbin0 -> 2608 bytes
-rw-r--r--fonts/malvern/tfm/ma56s10.tfmbin0 -> 1788 bytes
-rw-r--r--fonts/malvern/tfm/ma56s12.tfmbin0 -> 1788 bytes
-rw-r--r--fonts/malvern/tfm/ma56s14.tfmbin0 -> 1792 bytes
-rw-r--r--fonts/malvern/tfm/ma56s18.tfmbin0 -> 1796 bytes
-rw-r--r--fonts/malvern/tfm/ma56s24.tfmbin0 -> 1792 bytes
-rw-r--r--fonts/malvern/tfm/ma56s7.tfmbin0 -> 1784 bytes
-rw-r--r--fonts/malvern/tfm/ma57a12.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma75a10.tfmbin0 -> 2420 bytes
-rw-r--r--fonts/malvern/tfm/ma75a12.tfmbin0 -> 2428 bytes
-rw-r--r--fonts/malvern/tfm/ma75a14.tfmbin0 -> 2412 bytes
-rw-r--r--fonts/malvern/tfm/ma75a18.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma75a24.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma75a7.tfmbin0 -> 2424 bytes
-rw-r--r--fonts/malvern/tfm/ma75a72.tfmbin0 -> 2432 bytes
-rw-r--r--fonts/malvern/tfm/ma75a9.tfmbin0 -> 2420 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa10.tfmbin0 -> 2512 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa12.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa14.tfmbin0 -> 2512 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa18.tfmbin0 -> 2520 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa24.tfmbin0 -> 2516 bytes
-rw-r--r--fonts/malvern/tfm/ma75aa7.tfmbin0 -> 2508 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab10.tfmbin0 -> 2532 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab12.tfmbin0 -> 2536 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab14.tfmbin0 -> 2532 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab18.tfmbin0 -> 2540 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab24.tfmbin0 -> 2536 bytes
-rw-r--r--fonts/malvern/tfm/ma75ab7.tfmbin0 -> 2528 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar10.tfmbin0 -> 6100 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar12.tfmbin0 -> 6112 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar14.tfmbin0 -> 6100 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar18.tfmbin0 -> 6104 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar24.tfmbin0 -> 6104 bytes
-rw-r--r--fonts/malvern/tfm/ma75ar7.tfmbin0 -> 6100 bytes
-rw-r--r--fonts/malvern/tfm/ma75as10.tfmbin0 -> 6128 bytes
-rw-r--r--fonts/malvern/tfm/ma75as12.tfmbin0 -> 6140 bytes
-rw-r--r--fonts/malvern/tfm/ma75as14.tfmbin0 -> 6128 bytes
-rw-r--r--fonts/malvern/tfm/ma75as18.tfmbin0 -> 6132 bytes
-rw-r--r--fonts/malvern/tfm/ma75as24.tfmbin0 -> 6132 bytes
-rw-r--r--fonts/malvern/tfm/ma75as7.tfmbin0 -> 6132 bytes
-rw-r--r--fonts/malvern/tfm/ma75at10.tfmbin0 -> 11088 bytes
-rw-r--r--fonts/malvern/tfm/ma75at12.tfmbin0 -> 11092 bytes
-rw-r--r--fonts/malvern/tfm/ma75at14.tfmbin0 -> 11088 bytes
-rw-r--r--fonts/malvern/tfm/ma75at18.tfmbin0 -> 11096 bytes
-rw-r--r--fonts/malvern/tfm/ma75at24.tfmbin0 -> 11092 bytes
-rw-r--r--fonts/malvern/tfm/ma75at7.tfmbin0 -> 11080 bytes
-rw-r--r--fonts/malvern/tfm/ma75au10.tfmbin0 -> 11104 bytes
-rw-r--r--fonts/malvern/tfm/ma75au12.tfmbin0 -> 11108 bytes
-rw-r--r--fonts/malvern/tfm/ma75au14.tfmbin0 -> 11104 bytes
-rw-r--r--fonts/malvern/tfm/ma75au18.tfmbin0 -> 11112 bytes
-rw-r--r--fonts/malvern/tfm/ma75au24.tfmbin0 -> 11108 bytes
-rw-r--r--fonts/malvern/tfm/ma75au7.tfmbin0 -> 11096 bytes
-rw-r--r--fonts/malvern/tfm/ma75az10.tfmbin0 -> 1644 bytes
-rw-r--r--fonts/malvern/tfm/ma75az12.tfmbin0 -> 1652 bytes
-rw-r--r--fonts/malvern/tfm/ma75az14.tfmbin0 -> 1644 bytes
-rw-r--r--fonts/malvern/tfm/ma75az18.tfmbin0 -> 1656 bytes
-rw-r--r--fonts/malvern/tfm/ma75az24.tfmbin0 -> 1648 bytes
-rw-r--r--fonts/malvern/tfm/ma75az7.tfmbin0 -> 1652 bytes
-rw-r--r--fonts/malvern/tfm/ma75b10.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/malvern/tfm/ma75b12.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/malvern/tfm/ma75b14.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma75b18.tfmbin0 -> 1148 bytes
-rw-r--r--fonts/malvern/tfm/ma75b24.tfmbin0 -> 1148 bytes
-rw-r--r--fonts/malvern/tfm/ma75b7.tfmbin0 -> 1144 bytes
-rw-r--r--fonts/malvern/tfm/ma75s10.tfmbin0 -> 1628 bytes
-rw-r--r--fonts/malvern/tfm/ma75s12.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/malvern/tfm/ma75s14.tfmbin0 -> 1628 bytes
-rw-r--r--fonts/malvern/tfm/ma75s18.tfmbin0 -> 1636 bytes
-rw-r--r--fonts/malvern/tfm/ma75s24.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/malvern/tfm/ma75s7.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/malvern/tfm/ma76a10.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma76a12.tfmbin0 -> 2672 bytes
-rw-r--r--fonts/malvern/tfm/ma76a14.tfmbin0 -> 2676 bytes
-rw-r--r--fonts/malvern/tfm/ma76a18.tfmbin0 -> 2684 bytes
-rw-r--r--fonts/malvern/tfm/ma76a24.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma76a7.tfmbin0 -> 2680 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar10.tfmbin0 -> 6376 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar12.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar14.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar18.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar24.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma76ar7.tfmbin0 -> 6388 bytes
-rw-r--r--fonts/malvern/tfm/ma76as10.tfmbin0 -> 6404 bytes
-rw-r--r--fonts/malvern/tfm/ma76as12.tfmbin0 -> 6416 bytes
-rw-r--r--fonts/malvern/tfm/ma76as14.tfmbin0 -> 6416 bytes
-rw-r--r--fonts/malvern/tfm/ma76as18.tfmbin0 -> 6416 bytes
-rw-r--r--fonts/malvern/tfm/ma76as24.tfmbin0 -> 6416 bytes
-rw-r--r--fonts/malvern/tfm/ma76as7.tfmbin0 -> 6420 bytes
-rw-r--r--fonts/malvern/tfm/ma76az10.tfmbin0 -> 1812 bytes
-rw-r--r--fonts/malvern/tfm/ma76az12.tfmbin0 -> 1804 bytes
-rw-r--r--fonts/malvern/tfm/ma76az14.tfmbin0 -> 1812 bytes
-rw-r--r--fonts/malvern/tfm/ma76az18.tfmbin0 -> 1816 bytes
-rw-r--r--fonts/malvern/tfm/ma76az24.tfmbin0 -> 1808 bytes
-rw-r--r--fonts/malvern/tfm/ma76az7.tfmbin0 -> 1804 bytes
-rw-r--r--fonts/malvern/tfm/ma76b10.tfmbin0 -> 1176 bytes
-rw-r--r--fonts/malvern/tfm/ma76b12.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma76b14.tfmbin0 -> 1176 bytes
-rw-r--r--fonts/malvern/tfm/ma76b18.tfmbin0 -> 1180 bytes
-rw-r--r--fonts/malvern/tfm/ma76b24.tfmbin0 -> 1184 bytes
-rw-r--r--fonts/malvern/tfm/ma76b7.tfmbin0 -> 1176 bytes
-rw-r--r--fonts/malvern/tfm/ma76s10.tfmbin0 -> 1792 bytes
-rw-r--r--fonts/malvern/tfm/ma76s12.tfmbin0 -> 1788 bytes
-rw-r--r--fonts/malvern/tfm/ma76s14.tfmbin0 -> 1792 bytes
-rw-r--r--fonts/malvern/tfm/ma76s18.tfmbin0 -> 1796 bytes
-rw-r--r--fonts/malvern/tfm/ma76s24.tfmbin0 -> 1792 bytes
-rw-r--r--fonts/malvern/tfm/ma76s7.tfmbin0 -> 1784 bytes
-rw-r--r--fonts/malvern/vf/ma55aa10.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55aa12.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55aa14.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55aa18.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55aa24.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55aa7.vfbin0 -> 1524 bytes
-rw-r--r--fonts/malvern/vf/ma55ab10.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55ab12.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55ab14.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55ab18.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55ab24.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma55ab7.vfbin0 -> 1956 bytes
-rw-r--r--fonts/malvern/vf/ma55ar10.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55ar12.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55ar14.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55ar18.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55ar24.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55ar7.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma55as10.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma55as12.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma55as14.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma55as18.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma55as24.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma55as7.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma55at10.vfbin0 -> 4492 bytes
-rw-r--r--fonts/malvern/vf/ma55at12.vfbin0 -> 4492 bytes
-rw-r--r--fonts/malvern/vf/ma55at14.vfbin0 -> 4492 bytes
-rw-r--r--fonts/malvern/vf/ma55at18.vfbin0 -> 4492 bytes
-rw-r--r--fonts/malvern/vf/ma55at24.vfbin0 -> 4492 bytes
-rw-r--r--fonts/malvern/vf/ma55at7.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma55au10.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma55au12.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma55au14.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma55au18.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma55au24.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma55au7.vfbin0 -> 4476 bytes
-rw-r--r--fonts/malvern/vf/ma56ar10.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma56ar12.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma56ar14.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma56ar18.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma56ar24.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma56ar7.vfbin0 -> 2628 bytes
-rw-r--r--fonts/malvern/vf/ma56as10.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma56as12.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma56as14.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma56as18.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma56as24.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma56as7.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma75aa10.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75aa12.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75aa14.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75aa18.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75aa24.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75aa7.vfbin0 -> 1524 bytes
-rw-r--r--fonts/malvern/vf/ma75ab10.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75ab12.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75ab14.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75ab18.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75ab24.vfbin0 -> 1528 bytes
-rw-r--r--fonts/malvern/vf/ma75ab7.vfbin0 -> 1524 bytes
-rw-r--r--fonts/malvern/vf/ma75ar10.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma75ar12.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma75ar14.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma75ar18.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma75ar24.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma75ar7.vfbin0 -> 2644 bytes
-rw-r--r--fonts/malvern/vf/ma75as10.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma75as12.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma75as14.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma75as18.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma75as24.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma75as7.vfbin0 -> 2632 bytes
-rw-r--r--fonts/malvern/vf/ma75at10.vfbin0 -> 4496 bytes
-rw-r--r--fonts/malvern/vf/ma75at12.vfbin0 -> 4496 bytes
-rw-r--r--fonts/malvern/vf/ma75at14.vfbin0 -> 4496 bytes
-rw-r--r--fonts/malvern/vf/ma75at18.vfbin0 -> 4496 bytes
-rw-r--r--fonts/malvern/vf/ma75at24.vfbin0 -> 4496 bytes
-rw-r--r--fonts/malvern/vf/ma75at7.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au10.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au12.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au14.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au18.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au24.vfbin0 -> 4488 bytes
-rw-r--r--fonts/malvern/vf/ma75au7.vfbin0 -> 4480 bytes
-rw-r--r--fonts/malvern/vf/ma76ar10.vfbin0 -> 2620 bytes
-rw-r--r--fonts/malvern/vf/ma76ar12.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma76ar14.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma76ar18.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma76ar24.vfbin0 -> 2624 bytes
-rw-r--r--fonts/malvern/vf/ma76ar7.vfbin0 -> 2636 bytes
-rw-r--r--fonts/malvern/vf/ma76as10.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma76as12.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma76as14.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma76as18.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma76as24.vfbin0 -> 2612 bytes
-rw-r--r--fonts/malvern/vf/ma76as7.vfbin0 -> 2628 bytes
500 files changed, 22857 insertions, 0 deletions
diff --git a/fonts/malvern/00readme.txt b/fonts/malvern/00readme.txt
new file mode 100644
index 0000000000..05d77276a9
--- /dev/null
+++ b/fonts/malvern/00readme.txt
@@ -0,0 +1,23 @@
+Malvern is copyright (c) 1991-1994 by P. Damian Cugley, and is
+distributed freely WITHOUT ANY WARRANTY. See the file copying.txt for
+more information. In accordance with British copyright law, P. Damian
+Cugley has asserted the moral right to be identified as the author of
+this software.
+
+This file updated 1994/10/11.
+
+ MALVERN RELEASE 1.2
+
+Malvern is a METAFONT font program used to make fonts for TeX. The
+Malvern family is a broad family of sanserif fonts which now includes
+Greek letters, diagritical marks and composites as well as the latin
+alphabet and a buncha symbols.
+
+Files with names starting with "0" should be read first. The file
+dvi/install.dvi contains installation hints.
+
+If you find Malvern to be useful or amusing, please send me a postcard!
+--
+Damian Cugley
+Oxford University Computing Laboratory, Parks Road, Oxford OX1 3QD, UK
+<damian.cugley@comlab.ox.ac.uk>
diff --git a/fonts/malvern/0copying.txt b/fonts/malvern/0copying.txt
new file mode 100644
index 0000000000..0e8bbb658c
--- /dev/null
+++ b/fonts/malvern/0copying.txt
@@ -0,0 +1,31 @@
+ = COPYING =
+
+Malvern 1.2 is copyright (c) 1991-4 P. Damian Cugley.
+
+0. In accordance with British copyright law, P. Damian Cugley has
+asserted the moral right to be identified as the author of this
+software.
+
+1. You can use, copy and distribute this software verbatim without fee
+provided that this copyright notice and permissions are preserved, and
+provided neither my name nor the the name of Oxford University are used
+in any related promotion or publicity without prior, written permission.
+
+2. You can modify this software provided (a) you make no deletions; (b)
+you mark all changes clearly (including altering the maversion string);
+and (c) you don't distribute it.
+
+3. This software is provided for free, on an "as-is" basis, without
+express or implied warranty.
+
+The intention of (2) is to prevent a proliferation of incompatable
+versions. Commenting out code does not count as a deletion. If you
+have bug fixes or reports or any comments, please send mail to
+<malvern@comlab.ox.ac.uk>. This is a mailing list which you can join by
+sending a request to <malvern-request@comlab.ox.ac.uk>.
+
+Damian Cugley
+Oxford University Computing Laboratory, Parks Road, Oxford OX1 3QD, UK
+<damian.cugley@comlab.ox.ac.uk>
+
+COPYING 1.2.0 1994/10/11
diff --git a/fonts/malvern/0ebcdic.txt b/fonts/malvern/0ebcdic.txt
new file mode 100644
index 0000000000..6dfad437b8
--- /dev/null
+++ b/fonts/malvern/0ebcdic.txt
@@ -0,0 +1,12 @@
+If you have received this package via electronic mail routed through
+brain-damaged EBCDIC gateways, some characters may be altered.
+
+------------------------------------------------------------------------
+ % percent 37
+ \ backslash 92
+ ^ circumflex 94
+ ` backquote 96
+ { } curly braces 123, 125
+ | vertical bar 124
+ ~ tilde 126
+------------------------------------------------------------------------
diff --git a/fonts/malvern/0news.txt b/fonts/malvern/0news.txt
new file mode 100644
index 0000000000..23ff7bce82
--- /dev/null
+++ b/fonts/malvern/0news.txt
@@ -0,0 +1,174 @@
+0news.txt -- changes to Malvern between releases -- -*-text-*-
+
+------------------------------------------------------------------------
+RELEASE 1.2 -- CHANGES SINCE MALVERN 1.1
+
+All file names are now compatible with MS-DOS/ISO 9960
+
+ All files have names fitting in the 8+3 straightjacket required
+ by stupid MS-DOS and ISO 9960 filesystems. I was about 12 or 13
+ when I worked out for myself that trying to identify data with
+ eight-capital-letter names was a dumb idea; too bad ISO didn't
+ consult me.
+
+ One side effect is that the capital-letter file names
+ traditional on UNIX systems for important installation files
+ (README, INSTALL, COPYING, NEWS) have been changed to
+ 00readme.txt, 0install.txt, 0copying.txt, 0news.txt for the sake
+ of MS-DOS and VMS sufferers.
+
+Abandoned standard font names
+
+ As of October 1994, the font names standard does not allow more
+ than two variant letters without breaking the eight-character
+ limit for MS-DOS and ISO 9960 file names. Variants includes
+ encodings and things like whether the font is slanted. As an
+ extreme example, Malvern 58 with the caps-&-small-caps,
+ old-style-numerals variation on the OT1 encoding is
+ fmvr9ci7tc12! My best temporary solution to this situation is
+ to abandon "fmv" names altogether and extend the "ma" names to
+ include the encoding schemes needed by plain TeX, plain LaTeX
+ and LaTeX 2e. Therefore, *all* Malvern fonts now have names
+ starting with "ma".
+
+Standardized encoding scheme numbers
+
+ Now I have been forced toi come up with a set of 2-letter
+ encoding codes for every encoding under the sun, I use
+ encoding=19 for TeX Text instead of 0.
+
+pdc 1994.10.11
+ ------------------------------------------------------------------------
+RELEASE 1.1 -- CHANGES SINCE MALVERN 1.0.02
+
+
+Better documentation
+
+ A lot of the excess verbiage is irrelevant and has been enclosed
+ in \iflong...\fi. At the same time the sections on installation
+ and such have been rewritten or expanded. There is a separate
+ installation guide (install.dvi) which uses no nonstandard
+ fonts.
+
+Support for LaTeX 2.09 and LaTeX 2e
+
+ I have included style options that should work with LaTeX 2.09
+ (either with or without NFSS), as well as LaTeX-2e FD files.
+ The 2e file includes support for small capitals (but not italic
+ small capitals, because NFSS 2 has no way to refer to them).
+ All of these are generated by the same script that generates the
+ fonts, so they should match the supplied fonts.
+
+Macro file changed from "malvern.tex" to "maamac.tex"
+
+ The name "maamac" is more "standard" in that it ends with "mac"
+ (as many plain TeX macro files do) and starts with "maa" (as
+ most Malvern-A-related files do). It leaves open the
+ possibility of a "magmac.tex" file for Malvern G, and so on.
+
+Macro files used in documentation renamed
+
+ The macro files I used to format plain-TeX documents have been
+ renamed so that they all start with "pdc" and are valid ISO-9960
+ names.
+
+Files for fontinst
+
+ There are ETX and MTX files included for making T1-encoded fonts
+ from.
+
+Driver files, TFM and VF files included
+
+ A set of driver (.mf) files and TFM and VF files have been
+ included, generated using "mff" and Alan Jeffrey's fontinst
+ package. These come in three main groups:
+
+ (1) OT1 (the encoding shown in App.F of the TeXbook) and T1
+ (Cork) fonts, all with names starting in "fmv" (such as
+ fmvmq12, fmvm9r12);
+ (2) Malvern-encoded fonts, used to make the T1 fonts and
+ those of the OT1 fonts that include small caps, with
+ names starting with "ma" (such as ma55a12); and
+ (3) some other Malvern-encoded fonts included as examples
+ (such as ma55g11).
+
+ All of the fonts in group (1) are composite fonts (VFs), except
+ for the OT1 fonts without small caps. It follows that systems
+ without the ability to use VFs will not be able to use T1 fonts.
+
+Cyrillic letters
+
+ The Cyrillic alphabet is still very incomplete, and some of the
+ glyph designs need revision.
+
+Composites-only font in limbo
+
+ The previous release had a half-baked composite-letters-only
+ encoding, Malvern C. This letter has now been used for Cyrillic
+ instead, and eventually Malvern E will be some sort of
+ composite-letter font. Since the Fontinst package makes
+ pre-built composites largely redundant, I don't expect this font
+ to be used for anything much unless I come up with new ideas on
+ designing composite letters.
+
+Encodings schemes
+
+ Only uses Malvern encodings
+
+ The Malvern programs no longer make any attempt to support any
+ font encodings other than Malvern A, B, ... and the CMR encoding
+ described in the TeXbook (now called OT1). This is because (a)
+ trying to support Cork & other encoding vectors was getting to
+ be a great pain even without including support for
+ caps-and-small-caps variants and (b) all this can be better done
+ using Alan Jeffrey's fontinst package.
+
+ Changes to some Malvern encodings
+
+ Malvern B no longer includes Greek or Cyrillic letters -- these
+ have their own encodings, Malvern G and C. Malvern B contains a
+ selection of symbols etc. and includes the glyphs needed to make
+ Cork, Adobe and ISO-8859-1 fonts.
+
+Replaced and mended glyph programs
+
+ Letters A and E with Ogonek redesigned
+
+ The new designs for "A" and "a" have the ogonek mark drawn as a
+ continuation of the last stroke of the letter. I don't know if
+ this is more "authentic" or not...
+
+ Figures don't turn absurd then compressed or expanded.
+
+ Curves have more intermediate points, and the ones with circular
+ rings (8, 6, 9) behave more intelligently when there isn't
+ enough space to use circular circles.
+
+ Curves generally made more robust
+
+ Many curves used to turn angular when compressed; most such
+ curves now use a macro that draws them as a quarter-superelipse.
+
+pdc 1994.07.29
+
+
+ ------------------------------------------------------------------------
+RELEASE 1.0, PATCH 02 -- CHANGES SINCE MALVERN 1.0.01
+
+Added a new encoding G (Greek)
+
+ Designed lower case Greek letters and composite letters, and
+ made a new Malvern encoding G. This uses similar ligature
+ conventions to GreekTeX to generate fully marked up Greek text
+ using ligatures like a| for alpha with iota subscript and <'h
+ for eta-lenis-acute.
+
+
+ ------------------------------------------------------------------------
+RELEASE 1.0, PATCH 01 -- CHANGES SINCE MALVERN 1.0
+
+
+Fixed the letter L
+
+ The width was wrong.
+
diff --git a/fonts/malvern/contents.txt b/fonts/malvern/contents.txt
new file mode 100644
index 0000000000..ba16120cac
--- /dev/null
+++ b/fonts/malvern/contents.txt
@@ -0,0 +1,549 @@
+List of files in Malvern 1.2
+
+Generated by mkdist 2.0 <pdc 1994.10.11> on 1994.10.12
+
+total 29
+-r--r--r-- 1 pdc mc86 894 Oct 11 18:10 00readme.txt
+-r--r--r-- 1 pdc mc86 1256 Oct 11 18:11 0copying.txt
+-rw-r--r-- 1 pdc mc86 426 Nov 11 1993 0ebcdic.txt
+-rw-r--r-- 1 pdc mc86 6398 Oct 11 15:39 0news.txt
+-rw-r--r-- 1 pdc mc86 86 Oct 12 16:43 contents.txt
+drwxr-xr-x 3 pdc mc86 512 Nov 24 1993 contrib
+drwxr-xr-x 2 pdc mc86 1024 Oct 12 16:43 doc
+drwxr-xr-x 2 pdc mc86 2560 Oct 12 16:41 drivers
+drwxr-xr-x 2 pdc mc86 512 Oct 12 16:43 dvi
+drwxr-xr-x 2 pdc mc86 512 Oct 12 12:14 fontinst
+drwxr-xr-x 2 pdc mc86 512 Aug 8 17:39 latex209
+drwxr-xr-x 2 pdc mc86 1024 Oct 12 16:40 source
+drwxr-xr-x 2 pdc mc86 512 Oct 12 16:41 tex
+drwxr-xr-x 2 pdc mc86 4608 Oct 12 16:41 tfm
+drwxr-xr-x 2 pdc mc86 2048 Oct 12 16:42 vf
+
+contrib:
+total 2
+-rw-r--r-- 1 pdc mc86 618 Nov 16 1993 README
+drwxr-xr-x 2 pdc mc86 512 Aug 14 1992 spqr
+
+contrib/spqr:
+total 21
+-rw-r--r-- 1 pdc mc86 842 Aug 14 1992 README
+-rw-r--r-- 1 pdc mc86 9397 Aug 13 1992 maketexpk.cmd
+-rw-r--r-- 1 pdc mc86 216 Aug 13 1992 maltex.mf
+-rw-r--r-- 1 pdc mc86 2600 Aug 13 1992 malvern.sty
+-rw-r--r-- 1 pdc mc86 5224 Aug 14 1992 test.tex
+
+doc:
+total 255
+-r--r--r-- 1 pdc mc86 6930 Sep 2 11:32 cmdoc.tex
+-rw-r--r-- 1 pdc mc86 20079 Oct 11 16:58 install.tex
+-r--r--r-- 1 pdc mc86 7021 Sep 2 11:32 ma55doc.tex
+-rw-r--r-- 1 pdc mc86 7541 Oct 11 17:56 mabib.tex
+-rw-r--r-- 1 pdc mc86 1899 Apr 4 1993 magrmac.tex
+-rw-r--r-- 1 pdc mc86 204 Oct 12 16:42 magrman.fnt
+-rw-r--r-- 1 pdc mc86 164 Oct 12 16:42 magrman.idx
+-rw-r--r-- 1 pdc mc86 21045 Jul 19 18:45 magrman.tex
+-rw-r--r-- 1 pdc mc86 358 Oct 12 16:42 magrman.toc
+-rw-r--r-- 1 pdc mc86 642 Nov 17 1993 makeind.rc
+-rw-r--r-- 1 pdc mc86 2839 Oct 12 16:43 maman.aux
+-rw-r--r-- 1 pdc mc86 318 Oct 12 16:43 maman.fnt
+-rw-r--r-- 1 pdc mc86 3692 Oct 12 16:43 maman.idx
+-rw-r--r-- 1 pdc mc86 403 Oct 12 16:42 maman.ilg
+-rw-r--r-- 1 pdc mc86 3815 Oct 12 16:42 maman.ind
+-rw-r--r-- 1 pdc mc86 120301 Oct 11 17:58 maman.tex
+-rw-r--r-- 1 pdc mc86 4140 Oct 12 16:43 maman.toc
+-rw-r--r-- 1 pdc mc86 975 Jun 23 14:42 pdcdcap.tex
+-r--r--r-- 1 pdc mc86 8315 Sep 2 11:32 pdcfmt.tex
+-r--r--r-- 1 pdc mc86 5572 Sep 2 11:32 pdcfsel.tex
+-rw-r--r-- 1 pdc mc86 727 Jul 3 17:24 pdchyex.tex
+-rw-r--r-- 1 pdc mc86 2560 Nov 17 1993 pdcidx.tex
+-r--r--r-- 1 pdc mc86 799 Sep 2 11:32 pdcimth.tex
+-rw-r--r-- 1 pdc mc86 416 Feb 25 1992 pdcmigr.tex
+-r--r--r-- 1 pdc mc86 11236 Sep 2 11:32 pdcoput.tex
+-r--r--r-- 1 pdc mc86 6956 Sep 2 11:32 pdcpars.tex
+
+drivers:
+total 110
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma53a12.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55a10.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55a12.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55a14.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55a18.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55a24.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55a48.mf
+-rw-r--r-- 1 pdc mc86 231 Oct 12 13:46 ma55a7.mf
+-rw-r--r-- 1 pdc mc86 231 Oct 12 13:46 ma55a9.mf
+-rw-r--r-- 1 pdc mc86 251 Oct 12 13:50 ma55az10.mf
+-rw-r--r-- 1 pdc mc86 251 Oct 12 13:50 ma55az12.mf
+-rw-r--r-- 1 pdc mc86 251 Oct 12 13:50 ma55az14.mf
+-rw-r--r-- 1 pdc mc86 251 Oct 12 13:50 ma55az18.mf
+-rw-r--r-- 1 pdc mc86 251 Oct 12 13:50 ma55az24.mf
+-rw-r--r-- 1 pdc mc86 248 Oct 12 13:50 ma55az7.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55b10.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55b12.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55b14.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55b18.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:47 ma55b24.mf
+-rw-r--r-- 1 pdc mc86 231 Oct 12 13:46 ma55b7.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55c12.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55g10.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55g11.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55g12.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma55g24.mf
+-rw-r--r-- 1 pdc mc86 231 Oct 12 13:46 ma55g9.mf
+-rw-r--r-- 1 pdc mc86 227 Oct 12 13:49 ma55s10.mf
+-rw-r--r-- 1 pdc mc86 227 Oct 12 13:49 ma55s12.mf
+-rw-r--r-- 1 pdc mc86 227 Oct 12 13:49 ma55s14.mf
+-rw-r--r-- 1 pdc mc86 227 Oct 12 13:49 ma55s18.mf
+-rw-r--r-- 1 pdc mc86 227 Oct 12 13:49 ma55s24.mf
+-rw-r--r-- 1 pdc mc86 224 Oct 12 13:49 ma55s7.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56a10.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56a12.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56a14.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56a18.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56a24.mf
+-rw-r--r-- 1 pdc mc86 271 Oct 12 13:47 ma56a7.mf
+-rw-r--r-- 1 pdc mc86 271 Oct 12 13:46 ma56a9.mf
+-rw-r--r-- 1 pdc mc86 291 Oct 12 13:50 ma56az10.mf
+-rw-r--r-- 1 pdc mc86 291 Oct 12 13:50 ma56az12.mf
+-rw-r--r-- 1 pdc mc86 291 Oct 12 13:50 ma56az14.mf
+-rw-r--r-- 1 pdc mc86 291 Oct 12 13:50 ma56az18.mf
+-rw-r--r-- 1 pdc mc86 291 Oct 12 13:50 ma56az24.mf
+-rw-r--r-- 1 pdc mc86 288 Oct 12 13:50 ma56az7.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56b10.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56b12.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56b14.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56b18.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:47 ma56b24.mf
+-rw-r--r-- 1 pdc mc86 271 Oct 12 13:47 ma56b7.mf
+-rw-r--r-- 1 pdc mc86 274 Oct 12 13:46 ma56g11.mf
+-rw-r--r-- 1 pdc mc86 267 Oct 12 13:49 ma56s10.mf
+-rw-r--r-- 1 pdc mc86 267 Oct 12 13:49 ma56s12.mf
+-rw-r--r-- 1 pdc mc86 267 Oct 12 13:49 ma56s14.mf
+-rw-r--r-- 1 pdc mc86 267 Oct 12 13:49 ma56s18.mf
+-rw-r--r-- 1 pdc mc86 267 Oct 12 13:49 ma56s24.mf
+-rw-r--r-- 1 pdc mc86 264 Oct 12 13:49 ma56s7.mf
+-rw-r--r-- 1 pdc mc86 234 Oct 12 13:46 ma57a12.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:47 ma75a10.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75a12.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75a14.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75a18.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75a24.mf
+-rw-r--r-- 1 pdc mc86 233 Oct 12 13:47 ma75a7.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:46 ma75a72.mf
+-rw-r--r-- 1 pdc mc86 233 Oct 12 13:46 ma75a9.mf
+-rw-r--r-- 1 pdc mc86 253 Oct 12 13:50 ma75az10.mf
+-rw-r--r-- 1 pdc mc86 253 Oct 12 13:51 ma75az12.mf
+-rw-r--r-- 1 pdc mc86 253 Oct 12 13:51 ma75az14.mf
+-rw-r--r-- 1 pdc mc86 253 Oct 12 13:51 ma75az18.mf
+-rw-r--r-- 1 pdc mc86 253 Oct 12 13:51 ma75az24.mf
+-rw-r--r-- 1 pdc mc86 250 Oct 12 13:50 ma75az7.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75b10.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75b12.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75b14.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75b18.mf
+-rw-r--r-- 1 pdc mc86 236 Oct 12 13:48 ma75b24.mf
+-rw-r--r-- 1 pdc mc86 233 Oct 12 13:47 ma75b7.mf
+-rw-r--r-- 1 pdc mc86 229 Oct 12 13:49 ma75s10.mf
+-rw-r--r-- 1 pdc mc86 229 Oct 12 13:49 ma75s12.mf
+-rw-r--r-- 1 pdc mc86 229 Oct 12 13:49 ma75s14.mf
+-rw-r--r-- 1 pdc mc86 229 Oct 12 13:49 ma75s18.mf
+-rw-r--r-- 1 pdc mc86 229 Oct 12 13:49 ma75s24.mf
+-rw-r--r-- 1 pdc mc86 226 Oct 12 13:49 ma75s7.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76a10.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76a12.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76a14.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76a18.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76a24.mf
+-rw-r--r-- 1 pdc mc86 273 Oct 12 13:48 ma76a7.mf
+-rw-r--r-- 1 pdc mc86 293 Oct 12 13:51 ma76az10.mf
+-rw-r--r-- 1 pdc mc86 293 Oct 12 13:51 ma76az12.mf
+-rw-r--r-- 1 pdc mc86 293 Oct 12 13:51 ma76az14.mf
+-rw-r--r-- 1 pdc mc86 293 Oct 12 13:51 ma76az18.mf
+-rw-r--r-- 1 pdc mc86 293 Oct 12 13:51 ma76az24.mf
+-rw-r--r-- 1 pdc mc86 290 Oct 12 13:51 ma76az7.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76b10.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76b12.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76b14.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:48 ma76b18.mf
+-rw-r--r-- 1 pdc mc86 276 Oct 12 13:49 ma76b24.mf
+-rw-r--r-- 1 pdc mc86 273 Oct 12 13:48 ma76b7.mf
+-rw-r--r-- 1 pdc mc86 269 Oct 12 13:50 ma76s10.mf
+-rw-r--r-- 1 pdc mc86 269 Oct 12 13:50 ma76s12.mf
+-rw-r--r-- 1 pdc mc86 269 Oct 12 13:50 ma76s14.mf
+-rw-r--r-- 1 pdc mc86 269 Oct 12 13:50 ma76s18.mf
+-rw-r--r-- 1 pdc mc86 269 Oct 12 13:50 ma76s24.mf
+-rw-r--r-- 1 pdc mc86 266 Oct 12 13:50 ma76s7.mf
+
+dvi:
+total 163
+-rw-r--r-- 1 pdc mc86 19864 Oct 12 16:42 install.dvi
+-rw-r--r-- 1 pdc mc86 15224 Oct 12 16:42 magrman.dvi
+-rw-r--r-- 1 pdc mc86 119336 Oct 12 16:43 maman.dvi
+
+fontinst:
+total 76
+-rw-r--r-- 1 pdc mc86 1651 Oct 11 16:57 README
+-rw-r--r-- 1 pdc mc86 1242 Jul 20 15:02 example.tex
+-rw-r--r-- 1 pdc mc86 9394 Oct 12 12:25 fontma.tex
+-rw-r--r-- 1 pdc mc86 4204 Jun 22 14:53 pdcadma.mtx
+-r--r--r-- 1 pdc mc86 4586 Oct 12 12:14 pdcetxf.tex
+-r--r--r-- 1 pdc mc86 3466 Oct 12 12:14 pdcetxm.tex
+-r--r--r-- 1 pdc mc86 23181 Oct 12 12:14 pdcmaa.etx
+-r--r--r-- 1 pdc mc86 1341 Oct 12 12:14 pdcmaa3.etx
+-r--r--r-- 1 pdc mc86 14393 Oct 12 12:14 pdcmab.etx
+-r--r--r-- 1 pdc mc86 8166 Oct 12 12:14 pdcmat1.mtx
+
+latex209:
+total 36
+-rw-r--r-- 1 pdc mc86 3056 Oct 12 13:45 fmv9nfss.sty
+-rw-r--r-- 1 pdc mc86 14548 Oct 12 13:45 fmv9pltx.sty
+-rw-r--r-- 1 pdc mc86 2965 Oct 12 13:45 fmvnfss.sty
+-rw-r--r-- 1 pdc mc86 14509 Oct 12 13:45 fmvpltx.sty
+
+source:
+total 263
+-r--r--r-- 1 pdc mc86 1409 Oct 11 18:10 ascii.mf
+-r--r--r-- 1 pdc mc86 1280 Oct 11 18:11 fmv.mf
+-r--r--r-- 1 pdc mc86 2965 Oct 11 18:10 fmv.mff
+-r--r--r-- 1 pdc mc86 10506 Oct 11 18:11 ma.mf
+-r--r--r-- 1 pdc mc86 9106 Oct 11 18:11 maaenc.mf
+-r--r--r-- 1 pdc mc86 3937 Oct 11 18:11 mabenc.mf
+-r--r--r-- 1 pdc mc86 9352 Oct 11 18:10 macaps.mf
+-r--r--r-- 1 pdc mc86 7453 Oct 11 18:11 macenc.mf
+-r--r--r-- 1 pdc mc86 7817 Oct 11 18:11 macy.mf
+-r--r--r-- 1 pdc mc86 2473 Oct 11 18:11 maeenc.mf
+-r--r--r-- 1 pdc mc86 1968 Oct 11 18:10 maencode.mf
+-r--r--r-- 1 pdc mc86 6991 Oct 11 18:10 mafigs.mf
+-r--r--r-- 1 pdc mc86 10527 Oct 11 18:11 magenc.mf
+-r--r--r-- 1 pdc mc86 7526 Oct 11 18:10 maglcaps.mf
+-r--r--r-- 1 pdc mc86 6164 Oct 11 18:10 magrcaps.mf
+-r--r--r-- 1 pdc mc86 24413 Oct 11 18:10 magrlc.mf
+-r--r--r-- 1 pdc mc86 35678 Oct 11 18:10 makit.mf
+-r--r--r-- 1 pdc mc86 19402 Oct 11 18:11 malc.mf
+-r--r--r-- 1 pdc mc86 3411 Oct 11 18:11 malcco.mf
+-r--r--r-- 1 pdc mc86 10426 Oct 11 18:11 malcnc.mf
+-r--r--r-- 1 pdc mc86 7020 Oct 11 18:10 mamarks.mf
+-r--r--r-- 1 pdc mc86 6505 Oct 11 18:11 maparams.mf
+-r--r--r-- 1 pdc mc86 10214 Oct 11 18:10 mapunct.mf
+-rw-r--r-- 1 pdc mc86 1195 Apr 5 1993 mascript.mf
+-r--r--r-- 1 pdc mc86 2530 Oct 11 18:11 masenc.mf
+-r--r--r-- 1 pdc mc86 24134 Oct 11 18:11 masyms.mf
+-r--r--r-- 1 pdc mc86 3116 Oct 11 18:11 mff.rc
+-rw-r--r-- 1 pdc mc86 17981 Nov 2 1993 testfont.tex
+
+tex:
+total 21
+-rw-r--r-- 1 pdc mc86 1584 Oct 12 13:41 OT1fmv.fd
+-rw-r--r-- 1 pdc mc86 1630 Oct 12 13:41 OT1fmv9.fd
+-rw-r--r-- 1 pdc mc86 1512 Oct 12 13:41 T1fmv.fd
+-rw-r--r-- 1 pdc mc86 1534 Oct 12 13:41 T1fmv9.fd
+-r--r--r-- 1 pdc mc86 8146 Sep 2 11:32 maamac.tex
+-r--r--r-- 1 pdc mc86 4947 Sep 2 11:32 pdcutil.tex
+
+tfm:
+total 903
+-rw-r--r-- 1 pdc mc86 2436 Oct 12 10:56 ma53a12.tfm
+-rw-r--r-- 1 pdc mc86 2412 Oct 11 18:50 ma55a10.tfm
+-rw-r--r-- 1 pdc mc86 2428 Oct 11 18:51 ma55a12.tfm
+-rw-r--r-- 1 pdc mc86 2420 Oct 11 18:52 ma55a14.tfm
+-rw-r--r-- 1 pdc mc86 2428 Oct 11 18:53 ma55a18.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 11 18:53 ma55a24.tfm
+-rw-r--r-- 1 pdc mc86 2432 Oct 12 10:58 ma55a48.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 11 18:48 ma55a7.tfm
+-rw-r--r-- 1 pdc mc86 2420 Oct 12 10:52 ma55a9.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 13:45 ma55aa10.tfm
+-rw-r--r-- 1 pdc mc86 2520 Oct 12 13:45 ma55aa12.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 13:45 ma55aa14.tfm
+-rw-r--r-- 1 pdc mc86 2524 Oct 12 13:45 ma55aa18.tfm
+-rw-r--r-- 1 pdc mc86 2520 Oct 12 13:45 ma55aa24.tfm
+-rw-r--r-- 1 pdc mc86 2504 Oct 12 13:45 ma55aa7.tfm
+-rw-r--r-- 1 pdc mc86 2536 Oct 12 13:45 ma55ab10.tfm
+-rw-r--r-- 1 pdc mc86 2540 Oct 12 13:45 ma55ab12.tfm
+-rw-r--r-- 1 pdc mc86 2536 Oct 12 13:45 ma55ab14.tfm
+-rw-r--r-- 1 pdc mc86 2544 Oct 12 13:45 ma55ab18.tfm
+-rw-r--r-- 1 pdc mc86 2540 Oct 12 13:45 ma55ab24.tfm
+-rw-r--r-- 1 pdc mc86 1848 Oct 12 13:45 ma55ab7.tfm
+-rw-r--r-- 1 pdc mc86 6104 Oct 12 13:41 ma55ar10.tfm
+-rw-r--r-- 1 pdc mc86 6108 Oct 12 13:41 ma55ar12.tfm
+-rw-r--r-- 1 pdc mc86 6104 Oct 12 13:41 ma55ar14.tfm
+-rw-r--r-- 1 pdc mc86 6112 Oct 12 13:41 ma55ar18.tfm
+-rw-r--r-- 1 pdc mc86 6108 Oct 12 13:41 ma55ar24.tfm
+-rw-r--r-- 1 pdc mc86 6088 Oct 12 13:41 ma55ar7.tfm
+-rw-r--r-- 1 pdc mc86 6136 Oct 12 13:41 ma55as10.tfm
+-rw-r--r-- 1 pdc mc86 6140 Oct 12 13:41 ma55as12.tfm
+-rw-r--r-- 1 pdc mc86 6136 Oct 12 13:41 ma55as14.tfm
+-rw-r--r-- 1 pdc mc86 6144 Oct 12 13:41 ma55as18.tfm
+-rw-r--r-- 1 pdc mc86 6140 Oct 12 13:41 ma55as24.tfm
+-rw-r--r-- 1 pdc mc86 6124 Oct 12 13:41 ma55as7.tfm
+-rw-r--r-- 1 pdc mc86 11088 Oct 12 13:42 ma55at10.tfm
+-rw-r--r-- 1 pdc mc86 11092 Oct 12 13:42 ma55at12.tfm
+-rw-r--r-- 1 pdc mc86 11088 Oct 12 13:42 ma55at14.tfm
+-rw-r--r-- 1 pdc mc86 11096 Oct 12 13:42 ma55at18.tfm
+-rw-r--r-- 1 pdc mc86 11092 Oct 12 13:42 ma55at24.tfm
+-rw-r--r-- 1 pdc mc86 11056 Oct 12 13:42 ma55at7.tfm
+-rw-r--r-- 1 pdc mc86 11104 Oct 12 13:42 ma55au10.tfm
+-rw-r--r-- 1 pdc mc86 11108 Oct 12 13:42 ma55au12.tfm
+-rw-r--r-- 1 pdc mc86 11104 Oct 12 13:42 ma55au14.tfm
+-rw-r--r-- 1 pdc mc86 11112 Oct 12 13:42 ma55au18.tfm
+-rw-r--r-- 1 pdc mc86 11108 Oct 12 13:42 ma55au24.tfm
+-rw-r--r-- 1 pdc mc86 11076 Oct 12 13:42 ma55au7.tfm
+-rw-r--r-- 1 pdc mc86 1644 Oct 11 19:11 ma55az10.tfm
+-rw-r--r-- 1 pdc mc86 1652 Oct 11 19:11 ma55az12.tfm
+-rw-r--r-- 1 pdc mc86 1644 Oct 11 19:11 ma55az14.tfm
+-rw-r--r-- 1 pdc mc86 1656 Oct 11 19:12 ma55az18.tfm
+-rw-r--r-- 1 pdc mc86 1648 Oct 11 19:12 ma55az24.tfm
+-rw-r--r-- 1 pdc mc86 1648 Oct 11 19:10 ma55az7.tfm
+-rw-r--r-- 1 pdc mc86 1140 Oct 11 18:51 ma55b10.tfm
+-rw-r--r-- 1 pdc mc86 1140 Oct 11 18:51 ma55b12.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 18:52 ma55b14.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 18:53 ma55b18.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 18:54 ma55b24.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 18:50 ma55b7.tfm
+-rw-r--r-- 1 pdc mc86 996 Oct 12 10:55 ma55c12.tfm
+-rw-r--r-- 1 pdc mc86 2508 Oct 12 10:54 ma55g10.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 10:54 ma55g11.tfm
+-rw-r--r-- 1 pdc mc86 2508 Oct 12 10:56 ma55g12.tfm
+-rw-r--r-- 1 pdc mc86 2520 Oct 12 10:55 ma55g24.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 10:54 ma55g9.tfm
+-rw-r--r-- 1 pdc mc86 1628 Oct 11 19:07 ma55s10.tfm
+-rw-r--r-- 1 pdc mc86 1632 Oct 11 19:07 ma55s12.tfm
+-rw-r--r-- 1 pdc mc86 1628 Oct 11 19:08 ma55s14.tfm
+-rw-r--r-- 1 pdc mc86 1636 Oct 11 19:08 ma55s18.tfm
+-rw-r--r-- 1 pdc mc86 1632 Oct 11 19:08 ma55s24.tfm
+-rw-r--r-- 1 pdc mc86 1628 Oct 11 19:07 ma55s7.tfm
+-rw-r--r-- 1 pdc mc86 2684 Oct 11 18:55 ma56a10.tfm
+-rw-r--r-- 1 pdc mc86 2676 Oct 11 18:55 ma56a12.tfm
+-rw-r--r-- 1 pdc mc86 2684 Oct 11 18:56 ma56a14.tfm
+-rw-r--r-- 1 pdc mc86 2688 Oct 11 18:57 ma56a18.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 11 18:58 ma56a24.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 11 18:54 ma56a7.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 12 10:53 ma56a9.tfm
+-rw-r--r-- 1 pdc mc86 6380 Oct 12 13:42 ma56ar10.tfm
+-rw-r--r-- 1 pdc mc86 6380 Oct 12 13:42 ma56ar12.tfm
+-rw-r--r-- 1 pdc mc86 6380 Oct 12 13:42 ma56ar14.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:42 ma56ar18.tfm
+-rw-r--r-- 1 pdc mc86 6380 Oct 12 13:42 ma56ar24.tfm
+-rw-r--r-- 1 pdc mc86 6376 Oct 12 13:42 ma56ar7.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:43 ma56as10.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:43 ma56as12.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:43 ma56as14.tfm
+-rw-r--r-- 1 pdc mc86 6412 Oct 12 13:43 ma56as18.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:43 ma56as24.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:43 ma56as7.tfm
+-rw-r--r-- 1 pdc mc86 1808 Oct 12 11:02 ma56az10.tfm
+-rw-r--r-- 1 pdc mc86 1804 Oct 12 11:02 ma56az12.tfm
+-rw-r--r-- 1 pdc mc86 1812 Oct 12 11:03 ma56az14.tfm
+-rw-r--r-- 1 pdc mc86 1816 Oct 12 11:03 ma56az18.tfm
+-rw-r--r-- 1 pdc mc86 1808 Oct 12 11:03 ma56az24.tfm
+-rw-r--r-- 1 pdc mc86 1804 Oct 12 11:02 ma56az7.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 18:55 ma56b10.tfm
+-rw-r--r-- 1 pdc mc86 1184 Oct 11 18:56 ma56b12.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 18:56 ma56b14.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 18:57 ma56b18.tfm
+-rw-r--r-- 1 pdc mc86 1184 Oct 11 18:58 ma56b24.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 18:54 ma56b7.tfm
+-rw-r--r-- 1 pdc mc86 2608 Oct 12 10:55 ma56g11.tfm
+-rw-r--r-- 1 pdc mc86 1788 Oct 12 10:58 ma56s10.tfm
+-rw-r--r-- 1 pdc mc86 1788 Oct 12 10:59 ma56s12.tfm
+-rw-r--r-- 1 pdc mc86 1792 Oct 12 10:59 ma56s14.tfm
+-rw-r--r-- 1 pdc mc86 1796 Oct 12 10:59 ma56s18.tfm
+-rw-r--r-- 1 pdc mc86 1792 Oct 12 11:00 ma56s24.tfm
+-rw-r--r-- 1 pdc mc86 1784 Oct 12 10:58 ma56s7.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 12 10:56 ma57a12.tfm
+-rw-r--r-- 1 pdc mc86 2420 Oct 11 18:59 ma75a10.tfm
+-rw-r--r-- 1 pdc mc86 2428 Oct 11 19:00 ma75a12.tfm
+-rw-r--r-- 1 pdc mc86 2412 Oct 11 19:00 ma75a14.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 11 19:01 ma75a18.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 11 19:02 ma75a24.tfm
+-rw-r--r-- 1 pdc mc86 2424 Oct 11 18:58 ma75a7.tfm
+-rw-r--r-- 1 pdc mc86 2432 Oct 12 10:57 ma75a72.tfm
+-rw-r--r-- 1 pdc mc86 2420 Oct 12 10:53 ma75a9.tfm
+-rw-r--r-- 1 pdc mc86 2512 Oct 12 13:45 ma75aa10.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 13:45 ma75aa12.tfm
+-rw-r--r-- 1 pdc mc86 2512 Oct 12 13:45 ma75aa14.tfm
+-rw-r--r-- 1 pdc mc86 2520 Oct 12 13:45 ma75aa18.tfm
+-rw-r--r-- 1 pdc mc86 2516 Oct 12 13:45 ma75aa24.tfm
+-rw-r--r-- 1 pdc mc86 2508 Oct 12 13:45 ma75aa7.tfm
+-rw-r--r-- 1 pdc mc86 2532 Oct 12 13:45 ma75ab10.tfm
+-rw-r--r-- 1 pdc mc86 2536 Oct 12 13:45 ma75ab12.tfm
+-rw-r--r-- 1 pdc mc86 2532 Oct 12 13:45 ma75ab14.tfm
+-rw-r--r-- 1 pdc mc86 2540 Oct 12 13:45 ma75ab18.tfm
+-rw-r--r-- 1 pdc mc86 2536 Oct 12 13:45 ma75ab24.tfm
+-rw-r--r-- 1 pdc mc86 2528 Oct 12 13:45 ma75ab7.tfm
+-rw-r--r-- 1 pdc mc86 6100 Oct 12 13:43 ma75ar10.tfm
+-rw-r--r-- 1 pdc mc86 6112 Oct 12 13:43 ma75ar12.tfm
+-rw-r--r-- 1 pdc mc86 6100 Oct 12 13:43 ma75ar14.tfm
+-rw-r--r-- 1 pdc mc86 6104 Oct 12 13:43 ma75ar18.tfm
+-rw-r--r-- 1 pdc mc86 6104 Oct 12 13:43 ma75ar24.tfm
+-rw-r--r-- 1 pdc mc86 6100 Oct 12 13:43 ma75ar7.tfm
+-rw-r--r-- 1 pdc mc86 6128 Oct 12 13:43 ma75as10.tfm
+-rw-r--r-- 1 pdc mc86 6140 Oct 12 13:43 ma75as12.tfm
+-rw-r--r-- 1 pdc mc86 6128 Oct 12 13:43 ma75as14.tfm
+-rw-r--r-- 1 pdc mc86 6132 Oct 12 13:43 ma75as18.tfm
+-rw-r--r-- 1 pdc mc86 6132 Oct 12 13:43 ma75as24.tfm
+-rw-r--r-- 1 pdc mc86 6132 Oct 12 13:43 ma75as7.tfm
+-rw-r--r-- 1 pdc mc86 11088 Oct 12 13:43 ma75at10.tfm
+-rw-r--r-- 1 pdc mc86 11092 Oct 12 13:43 ma75at12.tfm
+-rw-r--r-- 1 pdc mc86 11088 Oct 12 13:44 ma75at14.tfm
+-rw-r--r-- 1 pdc mc86 11096 Oct 12 13:44 ma75at18.tfm
+-rw-r--r-- 1 pdc mc86 11092 Oct 12 13:44 ma75at24.tfm
+-rw-r--r-- 1 pdc mc86 11080 Oct 12 13:43 ma75at7.tfm
+-rw-r--r-- 1 pdc mc86 11104 Oct 12 13:44 ma75au10.tfm
+-rw-r--r-- 1 pdc mc86 11108 Oct 12 13:44 ma75au12.tfm
+-rw-r--r-- 1 pdc mc86 11104 Oct 12 13:44 ma75au14.tfm
+-rw-r--r-- 1 pdc mc86 11112 Oct 12 13:44 ma75au18.tfm
+-rw-r--r-- 1 pdc mc86 11108 Oct 12 13:44 ma75au24.tfm
+-rw-r--r-- 1 pdc mc86 11096 Oct 12 13:44 ma75au7.tfm
+-rw-r--r-- 1 pdc mc86 1644 Oct 11 19:13 ma75az10.tfm
+-rw-r--r-- 1 pdc mc86 1652 Oct 11 19:13 ma75az12.tfm
+-rw-r--r-- 1 pdc mc86 1644 Oct 11 19:13 ma75az14.tfm
+-rw-r--r-- 1 pdc mc86 1656 Oct 11 19:14 ma75az18.tfm
+-rw-r--r-- 1 pdc mc86 1648 Oct 11 19:14 ma75az24.tfm
+-rw-r--r-- 1 pdc mc86 1652 Oct 11 19:12 ma75az7.tfm
+-rw-r--r-- 1 pdc mc86 1140 Oct 11 18:59 ma75b10.tfm
+-rw-r--r-- 1 pdc mc86 1140 Oct 11 19:00 ma75b12.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 19:01 ma75b14.tfm
+-rw-r--r-- 1 pdc mc86 1148 Oct 11 19:01 ma75b18.tfm
+-rw-r--r-- 1 pdc mc86 1148 Oct 11 19:02 ma75b24.tfm
+-rw-r--r-- 1 pdc mc86 1144 Oct 11 18:58 ma75b7.tfm
+-rw-r--r-- 1 pdc mc86 1628 Oct 11 19:09 ma75s10.tfm
+-rw-r--r-- 1 pdc mc86 1632 Oct 11 19:09 ma75s12.tfm
+-rw-r--r-- 1 pdc mc86 1628 Oct 11 19:09 ma75s14.tfm
+-rw-r--r-- 1 pdc mc86 1636 Oct 11 19:10 ma75s18.tfm
+-rw-r--r-- 1 pdc mc86 1632 Oct 11 19:10 ma75s24.tfm
+-rw-r--r-- 1 pdc mc86 1632 Oct 11 19:08 ma75s7.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 11 19:03 ma76a10.tfm
+-rw-r--r-- 1 pdc mc86 2672 Oct 11 19:04 ma76a12.tfm
+-rw-r--r-- 1 pdc mc86 2676 Oct 11 19:04 ma76a14.tfm
+-rw-r--r-- 1 pdc mc86 2684 Oct 11 19:05 ma76a18.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 11 19:06 ma76a24.tfm
+-rw-r--r-- 1 pdc mc86 2680 Oct 11 19:02 ma76a7.tfm
+-rw-r--r-- 1 pdc mc86 6376 Oct 12 13:44 ma76ar10.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:44 ma76ar12.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:44 ma76ar14.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:44 ma76ar18.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:44 ma76ar24.tfm
+-rw-r--r-- 1 pdc mc86 6388 Oct 12 13:44 ma76ar7.tfm
+-rw-r--r-- 1 pdc mc86 6404 Oct 12 13:44 ma76as10.tfm
+-rw-r--r-- 1 pdc mc86 6416 Oct 12 13:44 ma76as12.tfm
+-rw-r--r-- 1 pdc mc86 6416 Oct 12 13:45 ma76as14.tfm
+-rw-r--r-- 1 pdc mc86 6416 Oct 12 13:45 ma76as18.tfm
+-rw-r--r-- 1 pdc mc86 6416 Oct 12 13:45 ma76as24.tfm
+-rw-r--r-- 1 pdc mc86 6420 Oct 12 13:44 ma76as7.tfm
+-rw-r--r-- 1 pdc mc86 1812 Oct 12 11:04 ma76az10.tfm
+-rw-r--r-- 1 pdc mc86 1804 Oct 12 11:04 ma76az12.tfm
+-rw-r--r-- 1 pdc mc86 1812 Oct 12 11:05 ma76az14.tfm
+-rw-r--r-- 1 pdc mc86 1816 Oct 12 11:05 ma76az18.tfm
+-rw-r--r-- 1 pdc mc86 1808 Oct 12 11:05 ma76az24.tfm
+-rw-r--r-- 1 pdc mc86 1804 Oct 12 11:04 ma76az7.tfm
+-rw-r--r-- 1 pdc mc86 1176 Oct 11 19:03 ma76b10.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 19:04 ma76b12.tfm
+-rw-r--r-- 1 pdc mc86 1176 Oct 11 19:05 ma76b14.tfm
+-rw-r--r-- 1 pdc mc86 1180 Oct 11 19:05 ma76b18.tfm
+-rw-r--r-- 1 pdc mc86 1184 Oct 11 19:06 ma76b24.tfm
+-rw-r--r-- 1 pdc mc86 1176 Oct 11 19:03 ma76b7.tfm
+-rw-r--r-- 1 pdc mc86 1792 Oct 12 11:00 ma76s10.tfm
+-rw-r--r-- 1 pdc mc86 1788 Oct 12 11:00 ma76s12.tfm
+-rw-r--r-- 1 pdc mc86 1792 Oct 12 11:01 ma76s14.tfm
+-rw-r--r-- 1 pdc mc86 1796 Oct 12 11:01 ma76s18.tfm
+-rw-r--r-- 1 pdc mc86 1792 Oct 12 11:01 ma76s24.tfm
+-rw-r--r-- 1 pdc mc86 1784 Oct 12 11:00 ma76s7.tfm
+
+vf:
+total 312
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55aa10.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55aa12.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55aa14.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55aa18.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55aa24.vf
+-rw-r--r-- 1 pdc mc86 1524 Oct 12 13:45 ma55aa7.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55ab10.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55ab12.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55ab14.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55ab18.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma55ab24.vf
+-rw-r--r-- 1 pdc mc86 1956 Oct 12 13:45 ma55ab7.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55ar10.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55ar12.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55ar14.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55ar18.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55ar24.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:41 ma55ar7.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:41 ma55as10.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:41 ma55as12.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:41 ma55as14.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:41 ma55as18.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:41 ma55as24.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:41 ma55as7.vf
+-rw-r--r-- 1 pdc mc86 4492 Oct 12 13:42 ma55at10.vf
+-rw-r--r-- 1 pdc mc86 4492 Oct 12 13:42 ma55at12.vf
+-rw-r--r-- 1 pdc mc86 4492 Oct 12 13:42 ma55at14.vf
+-rw-r--r-- 1 pdc mc86 4492 Oct 12 13:42 ma55at18.vf
+-rw-r--r-- 1 pdc mc86 4492 Oct 12 13:42 ma55at24.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:42 ma55at7.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:42 ma55au10.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:42 ma55au12.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:42 ma55au14.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:42 ma55au18.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:42 ma55au24.vf
+-rw-r--r-- 1 pdc mc86 4476 Oct 12 13:42 ma55au7.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:42 ma56ar10.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:42 ma56ar12.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:42 ma56ar14.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:42 ma56ar18.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:42 ma56ar24.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:42 ma56ar7.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:43 ma56as10.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:43 ma56as12.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:43 ma56as14.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:43 ma56as18.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:43 ma56as24.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:43 ma56as7.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75aa10.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75aa12.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75aa14.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75aa18.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75aa24.vf
+-rw-r--r-- 1 pdc mc86 1524 Oct 12 13:45 ma75aa7.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75ab10.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75ab12.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75ab14.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75ab18.vf
+-rw-r--r-- 1 pdc mc86 1528 Oct 12 13:45 ma75ab24.vf
+-rw-r--r-- 1 pdc mc86 1524 Oct 12 13:45 ma75ab7.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:43 ma75ar10.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:43 ma75ar12.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:43 ma75ar14.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:43 ma75ar18.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:43 ma75ar24.vf
+-rw-r--r-- 1 pdc mc86 2644 Oct 12 13:43 ma75ar7.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:43 ma75as10.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:43 ma75as12.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:43 ma75as14.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:43 ma75as18.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:43 ma75as24.vf
+-rw-r--r-- 1 pdc mc86 2632 Oct 12 13:43 ma75as7.vf
+-rw-r--r-- 1 pdc mc86 4496 Oct 12 13:43 ma75at10.vf
+-rw-r--r-- 1 pdc mc86 4496 Oct 12 13:43 ma75at12.vf
+-rw-r--r-- 1 pdc mc86 4496 Oct 12 13:44 ma75at14.vf
+-rw-r--r-- 1 pdc mc86 4496 Oct 12 13:44 ma75at18.vf
+-rw-r--r-- 1 pdc mc86 4496 Oct 12 13:44 ma75at24.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:43 ma75at7.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:44 ma75au10.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:44 ma75au12.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:44 ma75au14.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:44 ma75au18.vf
+-rw-r--r-- 1 pdc mc86 4488 Oct 12 13:44 ma75au24.vf
+-rw-r--r-- 1 pdc mc86 4480 Oct 12 13:44 ma75au7.vf
+-rw-r--r-- 1 pdc mc86 2620 Oct 12 13:44 ma76ar10.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:44 ma76ar12.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:44 ma76ar14.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:44 ma76ar18.vf
+-rw-r--r-- 1 pdc mc86 2624 Oct 12 13:44 ma76ar24.vf
+-rw-r--r-- 1 pdc mc86 2636 Oct 12 13:44 ma76ar7.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:44 ma76as10.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:44 ma76as12.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:45 ma76as14.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:45 ma76as18.vf
+-rw-r--r-- 1 pdc mc86 2612 Oct 12 13:45 ma76as24.vf
+-rw-r--r-- 1 pdc mc86 2628 Oct 12 13:44 ma76as7.vf
diff --git a/fonts/malvern/contrib/README b/fonts/malvern/contrib/README
new file mode 100644
index 0000000000..03e4ebaded
--- /dev/null
+++ b/fonts/malvern/contrib/README
@@ -0,0 +1,13 @@
+This is a directory of files contributed to the Malvern project by other
+people. If at all possible, you should make bug reports etc. to the
+original authors.
+
+Unless otherwise indicated in the files themselves, they are probably
+intended to be considered public-domain.
+
+========================================================================
+Dir Contributor Contribution Date
+------------------------------------------------------------------------
+/spqr Sebastian Rahtz Style file 1992/08/13
+ <spqr@minster.york.ac.uk> for LaTeX+NFSS
+========================================================================
diff --git a/fonts/malvern/contrib/spqr/README b/fonts/malvern/contrib/spqr/README
new file mode 100644
index 0000000000..77ac60516a
--- /dev/null
+++ b/fonts/malvern/contrib/spqr/README
@@ -0,0 +1,19 @@
+To: Damian.Cugley@uk.ac.oxford.prg, lac@uk.ac.soton.ecs
+Subject: malvern meets the NFSS
+Date: 13 Aug 1992 15:37:07 GMT
+From: spqr@uk.ac.york.minster
+
+I append a uuencoded tar Z archive with my preliminary attempts at
+using Malvern in my daily LaTeX, with the NFSS and old TeX layout.
+There is a malvern.sty which describes the fonts, a set of .tfm files
+in TeX layout, and my copy of MakeTeXPK which builds Malvern fonts on
+demand. Its written in Rexx, as I did all this at home under OS/2, but
+it may amuse you.
+
+If its not obvious, I havent digested the lessons of Malvern or got
+into the TeX side of it. I haven't even read half Damian's
+documentation. I just wanted to get pages off the printer to see
+whether I want to use the font for a job. I'm quite convinced, I
+admit. There is a certain je ne sais wotsit there.
+
+Sebastian
diff --git a/fonts/malvern/contrib/spqr/maketexpk.cmd b/fonts/malvern/contrib/spqr/maketexpk.cmd
new file mode 100644
index 0000000000..f3e2b67ad2
--- /dev/null
+++ b/fonts/malvern/contrib/spqr/maketexpk.cmd
@@ -0,0 +1,341 @@
+/*
+
+Translated from Piet Tutelaar's Unix shell script
+into Rexx by Sebastian Rahtz, 15.8.92 (spqr@minster.york.ac.uk)
+
+ This script file makes a new TeX PK font, because one wasn't
+ found. Parameters are:
+
+ name dpi bdpi magnification [[mode] subdir]
+
+ `name' is the name of the font, such as `cmr10'. `dpi' is
+ the resolution the font is needed at. `bdpi' is the base
+ resolution, useful for figuring out the mode to make the font
+ in. `magnification' is a string to pass to MF as the
+ magnification. `mode', if supplied, is the mode to use.
+
+ Note that this file must execute MetaFont (and then gftopk) or
+ ps2pk, and place the result in the correct location for the
+ PostScript driver to find it subsequently. If this doesn't work,
+ it will be evident because the program will be invoked over and over again.
+
+ If no METAFONT source is available for `name' and the fontname
+ starts with a `r' or is available in $TEXCONFIG/adobe then the
+ program tries to find a type1 font. If such a font is located
+ ps2pk will be used to render the font.
+
+ Of course, it needs to be set up for your site with regard to paths etc
+*/
+
+PARSE Arg all_args
+argc=words(all_args)
+if ( argc < 4 | argc > 6 ) then
+do
+ say "Usage: maketexpk fontname dpi bdpi magnification [[mode] subdir]"
+ exit 1
+end
+
+call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
+call SysLoadFuncs
+os2env='OS2ENVIRONMENT'
+
+/* destination of pk files */
+DESTDIR='d:\texfonts\pixel.lj'
+
+/* Where we look for METAFONT sources */
+MFINPUT=value('MFINPUT',,os2env)
+if MFINPUT='' then
+do
+ MFINPUT='d:\emtex\moremf;d:\emtex\mfinput;d:\emtex\spqr\fonts'
+ MFINPUT=value('MFINPUT',MFINPUT,os2env)
+ MFINPUT=value('MFINPUT',,os2env)
+end
+
+
+/* Where we look for Type1 fonts and AFM files */
+T1INPUTS=value('T1INPUTS',,os2env)
+if T1INPUTS='' then
+do
+ T1INPUTS='d:\emtex\ps'
+ T1INPUTS=value('T1INPUTS',T1INPUTS,os2env)
+ T1INPUTS=value('T1INPUTS',,os2env)
+end
+
+/* Where we look for dvips stuff */
+TEXCONFIG='d:\emtex\ps'
+listoftype1files=TEXCONFIG'\fontname'
+
+/* What encoding scheme do we use for Type1 text fonts? */
+
+/* DEF_TEXT_ENCODING="-eEC.enc" (Extended Computer Modern!) */
+DEF_TEXT_ENCODING=''
+
+/*
+ TEMPDIR needs to be unique for each process because of the possibility
+ of simultaneous processes running this script.
+*/
+TEMPDIR=SysTempFileName("d:/tmp/mtpk.???")
+
+NAME=word(all_args,1)
+DPI=word(all_args,2)
+BDPI=word(all_args,3)
+MAG=word(all_args,4)
+if argc > 4 then
+ MODE=word(all_args,5)
+else
+ if BDPI = 300 then
+ MODE='hplaser'
+ else if BDPI = 1270 then
+ MODE='linohi'
+ else if BDPI = 2540 then
+ MODE='linosuper'
+ else
+ do
+ say 'I do not know the mode for ' BDPI
+ say 'update this MakeTeXPK script'
+ exit 1
+ end
+
+if argc > 5 then
+ SUBDIR=word(all_args,6)
+else
+ SUBDIR=BDPI'dpi'
+
+
+PKNAME=NAME'.pk'
+DESTDIR=DESTDIR'\'DPI'DPI'
+/*
+say 'making for ' MODE ' in ' DESTDIR SUBDIR
+say 'temporary output file is 'TEMPDIR'\'PKNAME
+*/
+call sysfiletree DESTDIR ,'test', 'OD'
+if test.0=0 then
+ call SysMkDir DESTDIR
+/*
+else
+ say 'directory' DESTDIR 'exists'
+*/
+destpk=DESTDIR'\'PKNAME
+fname = stream(destpk , 'C', 'QUERY EXISTS')
+if \ (fname ='') then
+ do
+ say DESTDIR'\'PKNAME 'already exists!'
+ exit 0
+ end
+
+/* OK, try to make the font by some means */
+
+/* first try Adobe Type1 fonts */
+
+/* Strip off the possible starting `r' */
+if substr(NAME,1,1)='r' then
+ VNAME=substr(NAME,2)
+else
+ VNAME=NAME
+call sysfilesearch VNAME' ',listoftype1files, 'FILE.','C'
+if rc=3 then
+do
+ say 'You should install file ' listoftype1files
+ exit 0
+end
+FULLNAME='!'
+if FILE.0>0 then
+ do i=1 to file.0
+ if word(file.i,1)=VNAME then
+ do
+ FULLNAME=word(file.i,2)
+ leave
+ end
+ end
+if FULLNAME='!' then /* failed to locate a name in the list
+
+ Do we have a METAFONT source for this typeface?
+*/
+ do
+ if substr(NAME,1,3)='fmv' then
+ mfname=malvern(NAME) /* Malvern font */
+ else
+ mfname=syssearchpath('MFINPUT',NAME'.mf')
+ say 'Result of MF search: 'mfname
+ if mfname='' then
+ do
+ say 'Sorry, no PostScript font or Metafont font found'
+ exit 1
+ end
+ job='@mfp \mode:='MODE'; mag:='MAG'; scrollmode; input 'name
+/*
+really no need to use a temporary directory, I think, in this environment
+
+ curdir=directory()
+ call SysMkDir TEMPDIR
+ newdir= directory(TEMPDIR)
+*/
+ job
+ if substr(NAME,1,3)='fmv' then /* Malvern font */
+ 'del 'NAME||'.mf'
+ GFNAME=NAME'.'DPI
+ if (stream( GFNAME, 'C', 'QUERY EXISTS') = '') then
+ do
+ echo 'Metafont failed for some reason on 'GFNAME
+ exit 1
+ end
+'@gftopk' GFNAME PKNAME
+ '@copy' PKNAME destpk
+ x=sysfiledelete(GFNAME)
+ x=sysfiledelete(PKNAME)
+ x=sysfiledelete(NAME'.log')
+ x=sysfiledelete(NAME'.tfm')
+ exit 0
+ end
+else
+/* we have a Type1 font (at any rate, its in the list!) */
+ afmname=syssearchpath('T1INPUTS',VNAME'.afm')
+ if afmname='' then
+ do
+ say 'Failed to find afm file for' VNAME ' in 'T1INPUTS
+ exit 1
+ end
+/* If we don't use default AFM encoding then we have to check
+ if we can apply this encoding (text fonts only)
+*/
+ENCODING=DEF_TEXT_ENCODING
+
+ if \ (DEF_TEXT_ENCODING = '') then
+ do
+ /* What is encoding scheme that the AFM file uses? */
+ call sysfilesearch 'EncodingScheme',afmname, 'FILE.','C'
+ if file.0=0 then
+ do
+ say afmname': Invalid AFM file!'
+ exit 0
+ end
+ EXT_ENC=word(file.1,2)
+ select
+ when substr(ext_end,1,6)='AdobeS' then ENCODING=DEF_TEXT_ENCODING
+ when substr(ext_end,1,3)='ISO' then ENCODING=DEF_TEXT_ENCODING
+ otherwise
+ ENCODING=''
+ end
+ end
+ pfbname=syssearchpath('T1INPUTS',VNAME'.pfa')
+ if pfbname='' then
+ do
+ pfbname=syssearchpath('T1INPUTS',VNAME'.pfb')
+ if pfbname='' then
+ do
+ say 'Source for font' vname 'not found on path 'T1INPUTS
+ exit 1
+ end
+ end
+ job='@ps2pk -X'DPI ENCODING filespec('name',pfbname) destpk
+ job
+exit 0
+
+malvern: procedure
+arg fontname
+/* Malvern generation
+#
+# The font name is of the form
+#
+# fmvWVV## Karl Berry's standard font names
+#
+# where W denotes a weight (one of t, i, l, k, r, d, b, x, c)
+# VV denotes a "variation" (one of <empty>, rn, re, i, in, ie)
+# ## is the design size, in points
+#
+# or
+# maXXx## my nonstandard font names
+#
+# where XX is 2 digits giving a style in the tradition of Univers
+# x is a suffix describing the character set of the font
+# ## is the design size, in points (with p as decimal point)
+#
+# Examples:
+#
+# fmvr10 ma55a10 Malvern 55 10-pt
+# fmvd10 ma65a10 Malvern 65 demibold 10-pt
+# fmvbix18 ma74a18 Malvern 74 bold extended italic 18-pt
+# fmvric7 ma58a7 Malvern 58 condensed italic 7-pt
+#
+# The fmv- fonts all use the Cork encoding.
+#
+*/
+weights.=''
+weights.1= 'weight = 1/4;' /* ultra-light */
+weights.2= 'weight = 1/2;' /* extra-light */
+weights.3= 'weight = 3/4;' /* light */
+weights.4= 'weight = 7/8;' /* book */
+weights.5= 'weight = 1;' /* medium */
+weights.6= 'weight = 1.5;' /* demi */
+weights.7= 'weight = 2;' /* bold */
+weights.8= 'weight = 3;' /* extra */
+weights.9= 'weight = 4;' /* ultra */
+
+weights.t= 'weight = 1/4;' /* thin [ultra-light] */
+weights.i= 'weight = 1/2;' /* extra-lIght */
+weights.l= 'weight = 3/4;' /* Light */
+weights.k= 'weight = 7/8;' /* booK */
+weights.r= 'weight = 1;' /* Regular */
+weights.d= 'weight = 1.5;' /* Demi */
+weights.b= 'weight = 2;' /* Bold */
+weights.x= 'weight = 3;' /* eXtra */
+weights.u= 'weight = 4;' /* Ultra */
+
+styles.=''
+
+styles.9='hratio = 0.3;'
+styles.0='hratio = 0.3; slant := 1/8; italicness = 1;'
+styles.7='hratio = 0.6;'
+styles.8='hratio = 0.6; slant := 1/8; italicness = 1;'
+styles.5='hratio = 1;'
+styles.6='hratio = 1; slant := 1/8; italicness = 1;'
+styles.3='hratio = 1.15;'
+styles.4='hratio = 1.15; slant := 1/8; italicness = 1;'
+styles.1='hratio = 1.30;'
+styles.2='hratio = 1.30; slant := 1/8; italicness = 1;'
+
+styles.i='italicness = 1; slant := 1/8;' /* italic */
+styles.u='italicness = 1;' /* vertical italic */
+styles.o='slant := 1/8;' /* oblique */
+
+/* Berry's system has expansion after variant rather than before: */
+styles.o='hratio = 0.3;' /* narrow (extra condensed) */
+styles.c='hratio = 0.6;' /* compressed */
+styles.x='hratio = 1.15;' /* expanded */
+styles.w='hratio = 1.30;' /* wide (extra expanded) */
+
+/* not used here
+-J 's=encoding=0' # Standard TeX text (like cmr)
+-J 'x=encoding=-200' # Cork (TUGboat 11#4)
+-J 'mi=encoding=-1' # maths (like cmmi)
+-J 'sy=encoding=-2' # symbol (like cmsy)
+-J 'ps=encoding=-1000' # the AdobeStandardEncoding encoding
+-J 'so=encoding=-1010' # the ISOLatin1Encoding encoding
+
+# Malvern encodings:
+-J 'a=encoding=1' # Malvern A (simple letters)
+-J 'b=encoding=2' # Malvern B (strange symbols)
+-J 'c=encoding=3' # Malvern C (composites)
+*/
+rf=reverse(fontname)
+parse var rf n1 +1 n2 +1 .
+if datatype(n2,'N')=1 then
+ size=n2||n1
+else
+ size=n1
+parse var fontname basename (size) .
+parse var basename base +3 weight +1 style +1 expansion
+if style\=' ' then
+ y=value(style)
+else
+ y=''
+if expansion\=' ' then
+ z=value(expansion)
+else
+ z=''
+x=value(weight)
+fontfile=value(fontname)||'.mf'
+call lineout fontfile,'font_size 'size'pt#; 'weights.x styles.y styles.z 'input maltex;bye.'
+call lineout fontfile
+say 'generated Malvern file ' fontfile
+return fontfile
diff --git a/fonts/malvern/contrib/spqr/maltex.mf b/fonts/malvern/contrib/spqr/maltex.mf
new file mode 100644
index 0000000000..906a704664
--- /dev/null
+++ b/fonts/malvern/contrib/spqr/maltex.mf
@@ -0,0 +1,7 @@
+% %M% 1.%I% %E% -- generate the TUGboat Standard Malvern font
+% This uses the Cork "TeX Extended Text -- Latin" encoding
+% and Karl Berry's naming system -- with fmv as the family name.
+
+encoding = 0;
+input ma
+bye
diff --git a/fonts/malvern/contrib/spqr/malvern.sty b/fonts/malvern/contrib/spqr/malvern.sty
new file mode 100644
index 0000000000..2586443606
--- /dev/null
+++ b/fonts/malvern/contrib/spqr/malvern.sty
@@ -0,0 +1,129 @@
+%%
+%% This is file `malvern.sty'
+%%
+%% Error Reports in case of UNCHANGED versions to
+%%
+%%Sebastian Rahtz
+%%12 Cygnet Street, York Y02 1AG
+%%
+%%spqr@uk.ac.york.minster
+%%
+%%
+
+\def\fileversion{v1}
+\def\filedate{92/08/13}
+\@ifundefined{selectfont}
+ {\@latexerr{`times' style option can only be used
+ with the new font selection scheme}\@eha
+ \endinput}{}
+%
+\immediate\write\sixt@@n{File: `malvern.sty'
+ \fileversion\space <\filedate> (SPQR)}
+\immediate\write\sixt@@n
+ {********************************************************************}
+\immediate\write\sixt@@n
+ {*by Sebastian Rahtz, to load Damian Cugley's Malvern fonts *}
+\immediate\write\sixt@@n
+ {********************************************************************}
+\def\load@malvern{%
+\new@fontshape{malvern}{m}{n}{%
+ <5>fmvr5%
+ <6>fmvr6%
+ <7>fmvr7%
+ <8>fmvr8%
+ <9>fmvr9%
+ <10>fmvr10%
+ <11>fmvr11%
+ <12>fmvr12%
+ <14>fmvr14%
+ <17>fmvr17%
+ <20>fmvr20%
+ <25>fmvr25%
+}{}
+\extra@def{malvern}{}{}
+\new@fontshape{malvern}{m}{it}{%
+ <5>fmvri5%
+ <6>fmvri6%
+ <7>fmvri7%
+ <8>fmvri8%
+ <9>fmvri9%
+ <10>fmvri10%
+ <11>fmvri11%
+ <12>fmvri12%
+ <14>fmvri14%
+ <17>fmvri17%
+ <20>fmvri20%
+ <25>fmvri25%
+ }{}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{malvern}{bx}{n}{%
+ <5>fmvbx5%
+ <6>fmvbx6%
+ <7>fmvbx7%
+ <8>fmvbx8%
+ <9>fmvbx9%
+ <10>fmvbx10%
+ <11>fmvbx11%
+ <12>fmvbx12%
+ <14>fmvbx14%
+ <17>fmvbx17%
+ <20>fmvbx20%
+ <25>fmvbx25%
+ }{}
+
+\new@fontshape{malvern}{bx}{it}{%
+ <5>fmvbix5%
+ <6>fmvbix6%
+ <7>fmvbix7%
+ <8>fmvbix8%
+ <9>fmvbix9%
+ <10>fmvbix10%
+ <11>fmvbix11%
+ <12>fmvbix12%
+ <14>fmvbix14%
+ <17>fmvbix17%
+ <20>fmvbix20%
+ <25>fmvbix25%
+ }{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subst@fontshape{malvern}{m}{sl}{malvern}{m}{it}
+\subst@fontshape{malvern}{m}{sc}{malvern}{m}{n}
+}
+\romanfont{malvern}
+\sansfont{cmr}
+\endinput
+%%%%%%%%% bold series
+
+\new@fontshape{malvern}{b}{n}{%
+ <5>fmvb5%
+ <6>fmvb6%
+ <7>fmvb7%
+ <8>fmvb8%
+ <9>fmvb9%
+ <10>fmvb10%
+ <11>fmvb11%
+ <12>fmvb12%
+ <14>fmvb14%
+ <17>fmvb17%
+ <20>fmvb20%
+ <25>fmvb25%
+ }{}
+
+\new@fontshape{malvern}{b}{it}{%
+ <5>fmvbi5%
+ <6>fmvbi6%
+ <7>fmvbi7%
+ <8>fmvbi8%
+ <9>fmvbi9%
+ <10>fmvbi10%
+ <11>fmvbi11%
+ <12>fmvbi12%
+ <14>fmvbi14%
+ <17>fmvbi17%
+ <20>fmvbi20%
+ <25>fmvbi25%
+ }{}
+
diff --git a/fonts/malvern/contrib/spqr/test.tex b/fonts/malvern/contrib/spqr/test.tex
new file mode 100644
index 0000000000..e4a7263d14
--- /dev/null
+++ b/fonts/malvern/contrib/spqr/test.tex
@@ -0,0 +1,121 @@
+\documentstyle[malvern]{article}
+\begin{document}
+
+This is \verb|>| > {\em > } {\bf > } {\tt\em >}
+
+This is \verb|<| < {\em < } {\bf < } {\tt\em <}
+
+This is \verb|---| ---
+
+This is \verb|--| --
+
+\parskip=4pt
+
+\parindent 0pt
+\begin{quote}\begin{tabular}{|ll|ll|ll|}\hline
+\verb|\rm| & \rm Roman & \verb|\it| & \it Italic
+ & \verb|\sc| & \sc Small Caps \\
+\verb|\em| & \em Emphatic & \verb|\sl| & \sl Slanted
+ & \verb|\tt| & \tt Typewriter \\
+\verb|\bf| & \bf Boldface & \verb|\sf| & \sf Sans Serif & &
+\\ \hline
+\end{tabular}\end{quote}
+
+\begin{quote}\begin{tabular}{|*{5}{ll|}}\hline
+\`{o} & \verb|\`{o}| & \~{o} & \verb|\~{o}| & \v{o} & \verb|\v{o}| &
+\c{o} & \verb|\c{o}| & \'{o} & \verb|\'{o}| \\
+\a={o} & \verb|\={o}| & \H{o} & \verb|\H{o}| & \d{o} & \verb|\d{o}| &
+\^{o} & \verb|\^{o}| & \.{o} & \verb|\.{o}| \\
+\t{oo} & \verb|\t{oo}| & \b{o} & \verb|\b{o}| & \"{o} & \verb|\"{o}| &
+\u{o} & \verb|\u{o}| && \\ \hline
+\end{tabular}\end{quote}
+
+\begin{quote}\begin{tabular}{|*{4}{ll|}}\hline
+\dag & \verb|\dag| & \S & \verb|\S| &
+\copyright & \verb|\copyright| &\i & \verb|\i|\\
+\ddag & \verb|\ddag| & \P & \verb|\P| &
+\pounds & \verb|\pounds| & {\j} & \verb|\j|\\
+\oe & \verb|\oe| & \OE & \verb|\OE| &
+\ae & \verb|\AE| && \\
+\AE & \verb|\AE| & \aa & \verb|\aa| &
+\AA & \verb|\AA| && \\
+\o & \verb|\o| & \O & \verb|\O| &
+\l & \verb|\l| && \\
+\L & \verb|\E| & \ss & \verb|\ss| &
+?` & \verb|?`| && \\
+!` & \verb|!`| & \ldots & \verb|\ldots| &
+\LaTeX & \verb|\LaTeX| && \\
+\hline
+\end{tabular}\end{quote}
+{This costs `\pounds' 45 to do; {\sf this costs \pounds 45 to do;}
+\sc this costs ``\pounds'' 45 to do; \em this costs \pounds 45 to do
+\bf this costs \pounds 45 to do. And so }
+!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS! ---
+?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres
+often na{\"\i}ve vis-\`{a}-vis the d{\ae}monic ph{\oe}nix's official r\^{o}le
+in fluffy souffl\'{e}s? Only if
+$\sum_{i=1}^{n} x_{i} = \int_{0}^{1} f $ or (expressed more clearly)
+
+$$\sum_{i=1}^{n} x_{i} = \int_{0}^{1} f $$
+
+{\LARGE
+\begin{quote}\begin{tabular}{|*{5}{ll|}}\hline
+\`{o} & \verb|\`{o}| & \~{o} & \verb|\~{o}| & \v{o} & \verb|\v{o}| &
+\c{o} & \verb|\c{o}| & \'{o} & \verb|\'{o}| \\
+\a={o} & \verb|\={o}| & \H{o} & \verb|\H{o}| & \d{o} & \verb|\d{o}| &
+\^{o} & \verb|\^{o}| & \.{o} & \verb|\.{o}| \\
+\t{oo} & \verb|\t{oo}| & \b{o} & \verb|\b{o}| & \"{o} & \verb|\"{o}| &
+\u{o} & \verb|\u{o}| && \\ \hline
+\end{tabular}\end{quote}
+}
+\section{The site}
+\section{Pre-Iron Age}
+
+There is no positive stratigraphic or structural evidence for
+occupation of the hilltop in the Neolithic or Bronze Age. Nor is there
+any pottery earlier than the Iron Age; but this may be due to
+conditions of unfavourable survival in the ground. This leaves only
+the flints and chert as evidence of earlier prehistoric occupation.
+There are over a thousand fragments or tools from the excavated area.
+If this density is characteristic of the whole hilltop area, then the
+total assemblage might be in the region of 20,000 items.
+
+
+The flint includes both patinated and unpatinated material. Most of
+this is likely to have come from the chalk, many kilometres away, as
+natural or partly-prepared nodules; the possibility also exists that
+some finished implements were imported.
+There is evidence of at
+least some knapping on the site.
+
+
+The chert, originally from the equally distant Upper
+Greensand or from Portland, were possibly regarded as exotic and desirable.
+In general, the patinated material is of the Earlier Neolithic period,
+and includes leaf-shaped arrowheads. The unpatinated flint is, however,
+mostly of the Later Neolithic / Early Bronze Age, including barbed and
+tanged arrowheads and a variety of tools. Everton discusses the
+techniques of manufacture and use in her detailed report.
+One nearly complete and two fragmentary flint polished axes are of a
+similar raw material, with grey chert inclusions; Everton suggests
+these may have come from the same factory.
+
+Little can be said about the nature of occupation, whether seasonal or
+temporary; or whether there was permanent settlement at times, with
+areas of specialised activity. The arrowheads may be evidence of local
+hunting.
+
+The concentration of flints towards the summit of the hill
+where there was shallow stratification, may indicate the former
+existence of Neolithic or Bronze Age structures or monuments.
+
+It is possible that some flints were reused in later periods, as what
+Everton calls `tools-of-the-moment'. However, there is no reason to
+believe that flint formed any component of the Iron Age use of the
+hill, and nothing to connect it positively with the late- or
+post-Roman occupation; the only exception may be the strike-a-lights,
+and the possibility that prehistoric flint objects might have acquired
+a talismanic or simply curiosity value in later times.
+
+
+\end{document}
diff --git a/fonts/malvern/doc/cmdoc.tex b/fonts/malvern/doc/cmdoc.tex
new file mode 100644
index 0000000000..b9e1fdc6cf
--- /dev/null
+++ b/fonts/malvern/doc/cmdoc.tex
@@ -0,0 +1,311 @@
+% cmdoc.tex 1.1.9 1994/07/20 -- sets up for general docs
+% Copyright 1991-4 P. Damian Cugley.
+
+%%% @TeX-macro-file {
+%%% filename = "cmdoc.tex",
+%%% version = "1.1.9",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "TeX, plain TeX, style file",
+%%% supported = "Maybe",
+%%% abstract = "Top-level macro file for documents in
+%%% Computer Modern fonts.",
+%%% dependencies = "other program files",
+%%% }
+
+%{{{ cmdoc.tex
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\docversion{1.1.9 <pdc 1994/07/20>}
+}\the\toks0
+\message{\docversion}
+
+\input pdcimth
+\input pdcmigr
+\input pdcpars
+\input pdcfmt
+\input pdchyex
+\input pdcoput
+\input pdcfsel
+
+% Comment out following 1 line for TeX 2.x:
+\errorcontextlines=100
+
+% Ensure top/bot margins large enough to fit headlines on
+% even if printed on American paper:
+\topmarge=297mm \advance\topmarge-11in \advance\topmarge7mm
+\botmarge=\topmarge
+\advance\topmarge\ht\strutbox \advance\topmarge\headlineskip
+\ifdim \topmarge<20mm \topmarge=20mm \fi
+\ifdim \botmarge<27mm \botmarge=27mm \fi
+
+\setpaper{210mm}{297mm}
+
+\hyphenpenalty=200
+\exhyphenpenalty=100
+
+%{{{ layout
+
+\setnkgrid{4}{3}
+\leftmargin=\gridwd \advance\leftmargin\colsep
+\everypage={\ifdim\leftmargin>0pt \setbox\leftbox=\hbox to \gridwd{}\fi}
+\colrule=0pt
+
+\everyfootnote={\notefonts}
+\everylinenum={\smallfonts}
+\everytag={\bf}
+
+%}}}
+%{{{ fonts
+
+\autoloadfonts
+
+\def\HEADINGtemplate
+{%
+ \f{rm}{cmss}\f{mi}{eurb}\f{sy}{eusb}%
+ \f{it}{cmssi}\f{tt}{cmtt}\f{mf}{logo}\f{mfi}{logosl}%
+}
+
+\font\headingrm=cmss17 \font\headingit=cmssi17
+\fontset{subheading}\HEADINGtemplate{10 scaled 1200}{14pt}
+ {subheading}{subheading}
+\fontset{heading}\HEADINGtemplate{10 scaled 1728}{20pt}
+ {subheading}{subheading}
+
+\def\BODYtemplate
+{%
+ \m{rm}{cmr}\m{it}{cmti}%
+ \m{bf}{cmbx}\@\f{bi}{cmbxti10}%
+ \m{mi}{cmmi}\m{sy}{cmsy}%
+ \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ \f{tt}{cmtt}\@\f{tb}{cmsltt10}%
+}
+
+\font\bodysy=cmsy10 at 12pt
+
+\fontset{tiny}\BODYtemplate{7}{9pt}{tiny}{tiny}
+\fontset{small}\BODYtemplate{9}{11pt}{tiny}{tiny}
+\fontset{note}\BODYtemplate{10}{12pt}{tiny}{tiny}
+\fontset{body}\BODYtemplate{12}{14pt}{small}{tiny}
+
+\def\everyloadfont#1#2{\fontdimen3#1=0pt \fontdimen4#1=0pt}
+\rightskip=0pt plus 2em
+\bodyfonts
+\tolerance=1000
+
+\let\sc=\relax
+\let\csc=\relax
+\let\mc=\relax
+\let\n=\relax
+
+%}}}
+%{{{ malvern maths
+
+\mathcode`,="602C
+
+%}}}
+%{{{ TOC
+
+\newwrite\TOCfile
+\openout\TOCfile=\jobname.toc
+
+% #1 is \TOCentryfoo control sequence
+% #2 is stuff to be evaluated NOW -- e.g., section number
+% #3 is stuff to be evaluated WHEN PRINTED -- e.g., section title
+% folio is written after this in file
+\def\TOCwrite#1#2#3%
+{%
+ \def\tmp{#3}%
+ \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ \write\TOCfile\expandafter{\tmp{\folio}}
+}
+\def\TOCtrim#1:->{} % strip off "macro:->"
+
+\def\TOCentrypart#1#2#3%
+{
+ \smallskip
+ \dimen0=\hsize \advance\dimen0\leftmargin
+ \moveleft\leftmargin\hbox to\dimen0{\strut\bf #1. #2\hfil}
+ \smallskip
+}
+
+\def\TOCentrysection#1#2#3%
+{
+ \smallskip\noindent\llap{#1\quad}%
+ {\bf \ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+\def\TOCentrysubsec#1#2#3%
+{
+ \noindent{#1\enspace}{\ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+\def\TOCentrysubsubsec#1#2#3%
+{
+ \indent\indent\llap{#1\enspace}{\ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+%}}}
+%{{{ sectioning
+
+% sections run continuously
+% divisions start new page but do not reset section counters
+
+\newcount\partno
+\def\thepartno
+{%
+ \ifcase\partno O\or I\or II\or III\or IV\or V\else
+ \expandafter\uppercase\expandafter{\romannumeral\partno}%
+ \fi
+}
+\def\part#1%
+{%
+ \global\advance\partno1
+ \newpageheading{2\baselineskip}{\headingfonts}{}{\thepartno.\quad#1}
+ \TOCwrite\TOCentrypart{\thepartno}{#1}
+}
+
+\newcount\secno \newcount\subsecno \newcount\subsubsecno
+
+\def\thesecno
+{%
+ \n{%
+ \number\secno
+ \ifnum\subsecno>0
+ .\number\subsecno
+ \ifnum\subsubsecno>0
+ .\number\subsubsecno
+ \fi
+ \fi
+ }%
+}
+
+\def\sectionheading#1 \par{\dosectionheading{#1}}
+\def\dosectionheading#1%
+{
+ \par
+ \removelastskip
+ \vskip 0pt plus 0.3\vsize
+ \penalty-200
+ \vskip 1\bigskipamount plus -0.3\vsize
+ \begingroup \advance\leftskip-\leftmargin
+ \parskip=0pt \parindent=0pt
+ \hyphenpenalty=10000 \exhyphenpenalty=500
+ \interlinepenalty=100
+ \headingfonts
+ \hbox{\hskip-\leftmargin
+ \vrule height 2pt depth 0pt width \leftmargin
+ \vrule height 2pt depth 0pt width \hsize}
+ \nobreak\medskip
+ \enspace#1\par
+ \nobreak\smallskip
+ \endgroup
+}
+
+\def\section#1 \par
+{
+ \counta=\secno \advance\counta1
+ \mark{\thesecno \noexpand\else \n{\number\counta}}% OLD \else NEW
+ \global\secno=\counta \global\subsecno=0 \global\subsubsecno=0
+ \dosectionheading{\thesecno\quad #1}
+ \mark{\thesecno \noexpand\else \thesecno}% NEW \else NEW
+ \TOCwrite\TOCentrysection{\thesecno}{#1}
+}
+
+\def\subsec#1 \par
+{%
+ \counta=\subsecno \advance\counta1
+ \mark{\thesecno \noexpand\else \n{\number\secno.\number\counta}}
+ \global\subsecno=\counta \global\subsubsecno=0
+ \doheading\medskipamount{\subheadingfonts}{}{\thesecno\quad#1}
+ \mark{\thesecno \noexpand\else \thesecno}
+ \TOCwrite\TOCentrysubsec{\thesecno}{#1}
+}
+
+\def\subsubsec#1 \par
+{%
+ \global\advance\subsubsecno+1
+ \doheading\smallskipamount{}{}{\ifdim\leftmargin=0pt\thesecno\quad\fi#1}
+ \TOCwrite\TOCentrysubsubsec{\thesecno}{#1}
+}
+
+\newif\ifnoheader
+\newif\iftwosided
+
+\footline={%
+ \ifnoheader
+ \global\noheaderfalse
+ \hfil\bodyfonts\n\folio\hfil
+ \else
+ \hfil
+ \fi
+}
+
+\headline={%
+ \ifnoheader
+ \hfil
+ \else
+ \bodyfonts \hskip-\leftmargin
+ \iftwosided
+ \ifodd\pageno
+ \iftrue\botmark\fi
+ \hfil
+ {\bf\n\folio}%
+ \else
+ {\bf\n\folio}\quad
+ \hfil
+ \expandafter\iffalse\topmark\fi
+ \fi
+ \else
+ \expandafter\iffalse\topmark\fi
+ \hfil
+ {\bf\n\folio}%
+ \fi
+ \fi
+}
+
+%}}}
+%{{{ abbrevs
+
+\def\pt{\,{\rm pt}}
+\def\mm{\,{\rm mm}}
+
+\def\MF{{\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi META}\-%
+ {\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi FONT}}
+\def\MSDOS{\leavevmode\hbox{MS-DOS}}
+\def\PS{PostScript}
+
+{\plain|
+\gdef\dfn#1{\index{#1|idxunderline}{\bi #1}}
+}
+
+\def\<#1>{\leavevmode\hbox{\langle{\it#1\/}\rangle}}
+
+\active\* \def*#1*{{\it#1\/}}
+\append\verbatimplains\*
+
+% _xxx_ is xxx as typed by user to a program.
+\active\_
+\def_% _xxx_ is bold verbatim text
+{%
+ \ifmmode
+ \sb
+ \else
+ \begingroup % matched by closing _
+ \tb\setupverbatim
+ \plain\|\active\_%
+ \let_\endgroup
+ \fi
+}
+
+%}}}
+%}}} cmdoc.tex
+
+%Local variables:
+%fold-folded-p: t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/doc/install.tex b/fonts/malvern/doc/install.tex
new file mode 100644
index 0000000000..4d18a81fdc
--- /dev/null
+++ b/fonts/malvern/doc/install.tex
@@ -0,0 +1,541 @@
+% install.tex -- how to install Malvern fonts
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-document {
+%%% filename = "install.tex",
+%%% version = "X",
+%%% date = "pdc 1994.09.26",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Installation summary for the Malvern
+%%% font family.",
+%%% dependencies = "none",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% This document is written in plain TeX and has NO dependencies
+% other than the fonts (of course) which are all standard CM fonts.
+% The hope is that this way anyone will be able to TeX this file
+% without it all going horribly wrong...
+
+% To change the paper size, change the assignments to \hsize
+% and \vsize below (after the definition of \margin).
+
+\newdimen\margin \margin=25mm % size of margins
+
+% Change the following two lines to select a different paper size:
+\hsize=210mm \advance\hsize-2\margin
+\vsize=297mm \advance\vsize-2\margin
+
+% change the following 1 line if you do have the LOGO10 font:
+\newif\iflogo \logofalse
+
+\def\package{Malvern~1.2}
+\def\ttpackage{Malvern-1.2}
+
+% Adjust \vsize to be a multiple of baselineskip + topskip:
+
+\baselineskip=14pt
+\newcount\counta
+\counta=\vsize \advance\counta-\topskip
+\divide\counta\baselineskip
+\vsize=\counta\baselineskip \advance\vsize\topskip
+
+\hoffset=\margin \advance\hoffset-1in
+\voffset=\margin \advance\voffset-1in
+
+%
+% FONTS
+%
+
+\def\fnt#1#2{\font#1=#2 \fontdimen3#1=0pt \fontdimen4#1=0pt }
+
+\fnt\twelverm{cmr12} \def\rm{\twelverm\fam0 }
+\fnt\twelvei{cmmi12}
+\fnt\twelvesy{cmsy10 at 12pt}
+\fnt\twelvebf{cmb10 at 12pt} \def\bf{\twelvebf\fam\bffam}
+\fnt\twelveit{cmti12} \def\it{\twelveit\fam\itfam}
+\fnt\twelvett{cmtt12} \def\tt{\twelvett\fam\ttfam}
+\iflogo
+ \fnt\twelvemf{logo10 scaled 1200} \def\mf{\twelvemf}
+\fi
+\fnt\twelvermc{cmcsc10 scaled 1200} \def\sc#1{{\twelvermc \lowercase{#1}}}
+
+% Add just enough maths stuff:
+\textfont0=\twelverm \scriptfont0=\tenrm \scriptscriptfont0=\sevenrm
+\textfont1=\twelvei \scriptfont1=\teni \scriptscriptfont1=\seveni
+\textfont2=\twelvesy \scriptfont2=\tensy \scriptscriptfont2=\sevensy
+\textfont\itfam=\twelveit \scriptfont\itfam=\tenit
+\textfont\ttfam=\twelvett \scriptfont\ttfam=\tentt
+
+\fnt\titlerm{cmss17}
+\fnt\headingrm{cmss12 scaled 1200}
+\fnt\headingit{cmssi12 scaled 1200}
+\fnt\subheadingrm{cmss12}
+\fnt\subheadingit{cmssi12}
+
+\rm
+\rightskip=0pt plus 2em
+\tolerance=1000
+\emergencystretch=3em
+
+%
+% MACROS
+%
+
+\def\.{\mathhexbox201}
+
+\def\<#1>{$\langle\hbox{\it #1\/}\rangle$}
+
+\def\allcapabbrev#1{{\the\scriptfont\fam #1}}
+
+\iflogo
+ \def\MF{{\mf META}\-{\mf FONT}}
+\else
+ \def\MF{\allcapabbrev{META}\-\allcapabbrev{FONT}}
+\fi
+\def\fontinst{{\tt font}\-{\tt inst}}
+
+% No blank lines after section and subsection commands!
+\newcount\seccount \seccount=0
+\def\section#1%
+{
+ \medbreak
+ \advance\seccount1 \subseccount=0
+ \begingroup \headingrm \let\it=\headingit
+ \rightskip=0pt plus 2em
+ \parskip=0pt \parindent=0pt
+ \the\seccount\enspace #1
+ \nobreak\smallskip
+ \endgroup
+ \noindent\ignorespaces
+}
+
+\newcount\subseccount
+\def\subsection#1%
+{
+ \smallbreak
+ \advance\subseccount1
+ \begingroup \subheadingrm \let\it=\subheadingit
+ \rightskip=0pt plus 2em
+ \parskip=0pt \parindent=0pt
+ \the\seccount\sfcdot\the\subseccount\enspace #1\quad
+ \endgroup
+ \ignorespaces
+}
+
+\def\sfcdot{\leavevmode\raise0.5ex\hbox{.}}
+
+\def\begintable
+{%
+ $$\vbox\bgroup\halign\bgroup
+ ##\hfil&&\quad##\hfil\cr
+ \noalign{\hrule height 1pt \kern2\jot}%
+}
+\def\endtable
+{%
+ \crcr
+ \noalign{\kern1.5\jot \hrule height 1pt}%
+ \egroup\egroup$$
+ \ignorespaces
+}
+
+
+\def\flushtop#1%
+{{%
+ \setbox0=\hbox{#1}\setbox1=\hbox{X}%
+ \dimen0=\ht1 \advance\dimen0-\ht0
+ \raise\dimen0\box0
+}}
+
+\def\pt{\,{\rm pt}} \mathcode`.="0201
+\def\La{L\kern-0.15em\flushtop{a}}
+\def\LaTeX{\La\kern-0.05em \TeX}
+
+%
+% DOCUMENT PROPER STARTS HERE
+%
+
+\leftline{\titlerm Installing Malvern fonts}
+\bigskip
+
+% Print my address:
+
+\rightline{\vbox{\halign{\strut#\hfil\cr
+ P. Damian Cugley\cr
+\noalign{\smallskip}%
+ Oxford University Computing Laboratory\cr
+ Parks Road\cr
+ Oxford \sc{OX$\mit1\ 3$QD}\cr
+ UK\cr
+\noalign{\smallskip}%
+ \tt Damian.Cugley@comlab.ox.ac.uk\cr
+}}}
+\bigskip
+
+ (Where this document and the corresponding chapter in the {\it
+ Handbook} differ, this version is probably the more up-to-date.)
+
+\section{About Malvern}
+ Malvern is a font family designed and implemented in \MF. It is
+ a sanserif font intended mainly for non-technical documents. It
+ does not blend particularly well with the Computer Modern fonts.
+
+\subsection{Generic driver file}
+ Malvern is unusual amongst \MF\ families in that it is supplied
+ with one {\it generic driver file} which could in theory be used
+ instead of having one driver file for each size and style the
+ family comes in.\footnote*{The package includes a selection of
+ driver files nevertheless.} The generic driver file ({\tt
+ ma.mf}) inspects the values of variables like {\it designsize}
+ and {\it weight} and gives the ad-hoc parameters appropriate
+ values, before reading the program files. On some UNIX systems
+ a small program called {\tt mff} can be used to generate fonts
+ using this system. Otherwise other measures will have to be
+ taken, described below.
+
+\subsection{Malvern encodings}
+ Malvern uses a nonstandard encoding -- in fact a family of
+ encodings, for example, Malvern~A (latin alphabets) and
+ Malvern~G (Greek). To create fonts for use with \LaTeX~2e and
+ the NFSS~2 font selection macros, use Alan Jeffrey's {\tt
+ fontinst} package. This generates the {\tt fd} files and
+ virtual fonts so that Malvern fonts may be used in the same way
+ as other \LaTeX~2e families. (The glyphs needed to make fonts
+ with the Cork (T1) encoding are in Malvern~A and Malvern~B.)
+ This has already been done to make a selection of styles
+ available with both \TeX\ Text and T1 encodings.
+
+\subsection{Malvern font names}
+ The Malvern fonts generated with \MF\ will have \TeX\ names of
+ the following form:
+$$
+ \hbox{\tt ma \it style enc size}
+$$
+ where the {\it style} is a two-digit style code (described
+ below), {\it enc} is one- or two-letter code identifying a
+ Malvern encoding (such as `{\tt a}' or `{\tt az}'), and {\it
+ size} is the size in points (e.g., `{\tt 12}' for $12\pt$, `{\tt
+ 17p28}' for $17.28\pt$). Thus {\tt ma55a12} (12-pt Malvern 55,
+ encoding~A), {\tt ma56g12} (12-pt Malvern~56, Greek encoding).
+
+ The two-letter style codes are based on Adrien Frutiger's
+ system, devised for the Univers family. The first digit
+ specifies the weight, from 1 (ultra-light) to 9 (ultra-bold),
+ with 5 meaning medium and 7 bold. The second digit gives the
+ width: 5 or 6 is normal width, 7 or 8 is compressed, 3 or 4 is
+ expanded. An odd number means an upright font, an even number
+ italic. Thus Malvern~55 is roman, Malvern~56 is italic,
+ Malvern~75 boldface, Malvern~68 is demibold compressed italic.
+
+\edef\refstylecodes{\S\thinspace\the\seccount\.\the\subseccount}
+
+ The \MF\ programs are also able to generate fonts named in Karl
+ Berry's system,\footnote\dag{Karl Berry, {\it File Names for \TeX\
+ Fonts}, version 1\.6 ({\tt
+ file:\allowbreak//ftp.cs.umb.edu\slash pub\slash tex\slash fontname}).}
+ starting with `{\tt fmv}'. The correspondance between Malvern's
+ style digits and weight, variant and expansion letters is given
+ in the tables below. The encoding used for these fonts is \TeX\
+ text, so for example {\tt fmvr12} and {\tt ma55s12} are names
+ for the same font. This is so that these fonts may be used in
+ plain-\TeX\ and \LaTeX-2\.09 documents without too much
+ confusion. NFSS~2 systems (indeed, any that use non-\TeX-text
+ encodings) will use virtual fonts.
+
+ As of October 1994, however, the font names standard does not
+ allow for combinations of more than two variants (where
+ `variants' includes encodings and slant) without breaking the
+ eight-character limit required by stupid filesystems like MS-DOS
+ and ISO~9960. As an extreme example, Malvern~58 with the
+ caps-and-small-caps, old-style-numerals variation of the \TeX\
+ Text encoding is {\tt fmvr9ci7tc12} (12 chars). The only
+ temporary solution I can offer is to extend the naming scheme
+ used for the `{\tt ma}-' fonts to include encoding codes for the
+ virtual fonts needed for plain \LaTeX, NFSS and NFSS~2 (e.g.,
+ {\tt ma58ab12}). Therefore, the ability to create {\tt fmv}-
+ fonts is not being used at present.
+
+\section{Unpacking Malvern}
+ The Malvern distribution includes \MF\ source files, some \TeX\
+ files such as this documentation, and a few other miscellaneous
+ files.
+
+ All files have names that should work with MS-DOS and ISO-9960
+ filesystems.
+
+\subsection{Source files ({\tt/source})}
+ On most \TeX\ systems, \MF\ fonts end up with their source files
+ stored in one directory. I~suggest that Malvern instead be
+ given its own file area. This avoids problems with different
+ font families having files with the same name, and makes it easy
+ to replace all the Malvern files in one go if you upgrade to a
+ newer version of Malvern.
+
+ With a new-style directory tree,\footnote*{At the time of
+ writing, the \TeX\ Directory Standard (TeDiouS) is still in
+ discussion.\break This is my best guess based on a \TeX\ system I
+ recently installed.} the {\tt\ttpackage} directory may be
+ placed in the `{\tt texmf/fonts/public}' directory, and the {\tt
+ source} directory and {\tt driver} directories merged and
+ renamed so that \MF\ can find them.
+
+ The files {\tt mff.rc} and {\tt fmv.mff} are input files for
+ {\tt mff} and may be ignored if you are not using {\tt mff} to
+ generate fonts. If the Malvern files are being mixed in with a
+ bunch of others, rename {\tt mff.rc} to {\tt ma.mff}.
+
+\subsection{Driver files ({\tt/drivers})}
+ Fonts can be generated by including assignments on the \MF\
+ command line, but driver files are more convenient (unless you
+ have {\tt mff}). These are also used when assignments to the
+ generic driver file's parameters on the \MF\ command line is
+ impossible, such as when using the standard {\tt MakeTeXPK}
+ script. A driver file is included for each {\tt tfm} supplied.
+
+\subsection{\TeX\ input files ({\tt/tex})}
+ These files belong in a system-wide \TeX\ inputs area. The
+ files ending -{\tt.fd} are font family description files, used
+ by NFSS~2.
+
+ On new-style directory trees, the best approach is probably to
+ link or rename the {\tt texmf/fonts/public/\ttpackage/tex}
+ directory to {\tt texmf/tex/\ttpackage}.
+
+\subsection{Documentation files ({\tt/doc}, {\tt/dvi})}
+ Files ending in `{\tt.tex}' are plain \TeX\ documents, and will
+ not work with \LaTeX. Compiled ({\tt dvi}) files are supplied
+ to save the installer having to run \TeX. Read this document,
+ {\tt install.tex}, first. The Greek text encoding is described
+ in {\tt magrman.tex}.
+
+
+ Please do not install any of the macro files used to typeset the
+ documentation in the system-wide \TeX\ inputs area. They are
+ not supported, not necessarily generally useful, and very
+ nonstandard. Earlier releases of Malvern gave the macro files
+ generic enough names that they might clash with other macro
+ files. They have been renamed to start with `{\tt pdc}' in the
+ hope that this will avoid clashes if they are accidentally
+ installed.
+
+\subsection{Virtual font files ({\tt/vf})}
+ These virtual fonts are generated using Alan Jeffrey's
+ \fontinst\ package, and are Malvern fonts with the Cork encoding
+ (and some of the trickier \TeX\ Text variations). With NFSS~2
+ they are used by specifying encoding `{\tt T1}' and family `{\tt
+ fmv}'.s
+
+ The virtual fonts may have the following encoding codes:
+\begintable
+ \it Encoding&\it Code&\it Description\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ OT1c& \tt aa&
+ \TeX\ text with caps\&small caps\cr
+ OT1c9& \tt ab&
+ ditto, with old-style numerals\cr
+ T1& \tt ar&
+ Cork\cr
+ T19& \tt as&
+ Cork, with old style numerals\cr
+ T1c& \tt at&
+ Cork, with caps\&small caps\cr
+ T1c9& \tt au&
+ Cork, with c\&sc and o.s. numerals\cr
+\endtable
+ For example, {\tt ma55ar12} has encoding T1. Note that
+ replacing lower-case letters with small-capitals counts as a
+ different encoding scheme rather than a `font shape'.
+
+\subsection{Font metric files ({\tt/tfm})}
+ A selection of precompiled font metric files, including those
+ for virtual fonts in {\tt /vf} and the actual fonts needed to
+ use them, as well as fonts needed to print the documentation in
+ {\tt/dvi}.
+
+\section{Using mff to generate Malvern fonts}
+ First, install {\tt mff} and arrange that \MF\ fill be able to
+ find the {\tt mf} files. Then to create a Malvern font, for
+ example 12-pt Malvern~55 ({\tt ma55a12}), give the command:
+$$
+ \hbox{\tt mff ma55a12}
+$$
+ To generate Malvern~55 and 56 at magsteps 0, half and 1, for 300-dpi
+ and 1000-dpi printers, you would type:
+$$
+ \hbox{\tt mff --magstep=0,h,1
+ --dpi=300,1000 ma55a10 ma56a10}
+$$
+ If all goes well, the {\tt tfm} and {\tt pk} files generated
+ will be installed in the correct directories automatically.
+
+\section{Generating Malvern fonts without mff}
+ This section presumes you know how to install a normal \MF\
+ font.
+
+ Create a driver file for each style of Malvern you want to be
+ able to use. It should have the following form:
+\begintable
+\tt \% \<name of file> -- generate \<size>-pt Malvern \<style> \cr
+\noalign{\smallskip}
+\tt font\char95 size \<size> pt\#; \cr
+\tt encoding = \<number>; \cr
+\tt weight = \<number>; hratio = \<number>; \cr
+\tt slant = \<number>; italicness = \<number>; \cr
+\tt input ma \cr
+\tt bye \cr
+\endtable
+ where \<size> is the design size desired in points, and the
+ values for the various variables are given below. The \<style>
+ is the two-digit style code described in \refstylecodes.
+% You
+% might want to append an verbose description of the style:
+%$$\hbox{\tt \% ma76a12.mf -- generate 12-pt Malvern 76 bold italic}$$
+ To
+ generate '{\tt fmv}-' fonts, the second-last line is changed to
+ `{\tt input fmv}'.
+
+ These driver files should be named after the font they
+ correspond to -- for example, `{\tt ma76a12.mf}' to generate
+ Malvern~76. Then they are used as usual with \MF:
+$$
+ \hbox{\tt mf \char92 mode=luxo; mag={\it m}; input ma55a12}
+$$
+ where {\it m} is the magnification wanted, or `{\tt 1.0}' for no
+ magnification.
+
+\subsection{Values for {\it encoding}}
+ The variable {\it encoding} specifies the encoding to use -- in
+ other words, the subset of Malvern's glyphs to be generated.
+ It should be given one of the following values:
+\begintable
+ \it Encoding&\it Code&\it Description\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it encoding} = 1$& \tt a&
+ Malvern A (latin alphabets {\it a--z}, numerals, etc.)\cr
+ ${\it encoding} = 2$& \tt b&
+ Malvern B (superscripts, symbols etc.)\cr
+ ${\it encoding} = 3$& \tt c&
+ Malvern C (Cyrillic)\cr
+ ${\it encoding} = 5$& \tt e&
+ Malvern E (composite letters {\it \`a--\v z})\cr
+ ${\it encoding} = 7$& \tt g&
+ Malvern G (Greek letters $\alpha$--$\omega$,
+ $\it\acute\alpha$--$\it\tilde\omega$)\cr
+ ${\it encoding} = 19$& \tt s& \TeX\ text (the same as CM Roman)\cr
+ ${\it encoding} = 26$& \tt az& \TeX\ text, old-style numerals\cr
+\endtable
+ The code is the used in the font name -- for example, {\tt
+ ma55s10} for Malvern with the \TeX\ text encoding (${\it
+ encoding} = 19$), and so on.
+
+ The Malvern programs used to attempt to generate other encoding
+ schemes; with {\tt fontinst} this all becomes redundant and
+ those codes are obsolete.
+
+\subsection{Values for {\it weight}}
+ The variable {\it weight} specifies the weight (boldness) of the
+ font. It has the following values:
+\begintable
+ \it Weight&\it Style&\it NFSS~2& \it Berry&\it Description\cr
+ &\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it weight} = 1/4$& \tt 1& \tt ul& \tt t& ultra-light\cr
+ ${\it weight} = 1/2$& \tt 2& \tt el& \tt i& extra-light\cr
+ ${\it weight} = 3/4$& \tt 3& \tt\ l& \tt l& light\cr
+ ${\it weight} = 7/8$& \tt 4& \tt sl& \tt b& semi-light\cr
+ ${\it weight} = 1$& \tt 5& \tt\ m& \tt m& medium\cr
+ ${\it weight} = 1\.3$& \tt 6& \tt sb& \tt d& semi-bold\cr
+ ${\it weight} = 1\.6$& \tt 7& \tt\ b& \tt b& bold \cr
+ ${\it weight} = 2$& \tt 8& \tt eb& \tt x& extra-bold\cr
+ ${\it weight} = 3$& \tt 9& \tt ub& \tt u& ultra-bold\cr
+\endtable
+ The `style digit' is the first digit in the two-digit style
+ codes described in \refstylecodes. The `NFSS~2\ code' is the
+ first half of a corresponding NFSS~2\ `font series' code. The
+ `Berry code' is the code for this weight in Karl Berry's font
+ naming scheme.
+
+ Note that some of the character programs produce ugly results
+ for large values of {\it weight}.
+
+\subsection{Values for {\it hratio}}
+ The variable {\it hratio} specifies the ratio between horizontal
+ and vertical measurements: in other words, whether the font is
+ compressed or expanded. It may have the following values:
+\begintable
+ \it Hratio&\it Style&\it NFSS~2& \it Berry&\it Description\cr
+ &\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it hratio} = 0\.50$& {\tt 9} or {\tt 0}&
+ \tt ec&\tt o& extra compressed\cr
+ ${\it hratio} = 0\.80$& {\tt 7} or {\tt 8}&
+ \tt\ c&\tt c& compressed\cr
+ ${\it hratio} = 1\.00$& {\tt 5} or {\tt 6}&
+ \tt\ m&\tt r& normal width\cr
+ ${\it hratio} = 1\.15$& {\tt 3} or {\tt 4}&
+ \tt\ x&\tt x& expanded\cr
+ ${\it hratio} = 1\.30$& {\tt 1} or {\tt 2}&
+ \tt ex&\tt w& extra expanded\cr
+\endtable
+ The 'style digit' is the second half of the two-digit style
+ codes described in \refstylecodes. The `NFSS~2\ code' is the
+ second half of an NFSS~2\ `font series' code (for example,
+ bold expanded is ${\tt b} + {\tt x} = {\tt bx}$, compressed is
+ ${\tt m} + {\tt c} = {\tt c}$). The `Berry code' is for Karl
+ Berry's scheme.
+
+ Beware that the character programs do not all produce good
+ results when {\it hratio} is not 1.
+
+\subsection{Values for {\it slant} and {\it italicness}}
+ These two variables between them specify whether a font is to be
+ produced with italic letterforms or not:
+\begintable
+ \it Slant&\it Italic? &\it Style&\it NFSS~2&\it Berry&\it Description\cr
+ &&\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it slant} = 0$& ${\it italicness} = 0$& odd&
+ \tt n& \tt r& upright\cr
+ ${\it slant} = 1/8$& ${\it italicness} = 1$& even&
+ {\tt ti} or {\tt i}& \tt i& italic\cr
+ ${\it slant} = 0$& ${\it italicness} = 1$& --&
+ \tt ui& \tt u& `upright italic'\cr
+ ${\it slant} = 1/8$& ${\it italicness} = 0$& --&
+ {\tt sl} & \tt o& oblique\cr
+\endtable
+ The `NFSS~2\ code' is the `font shape' code. For italic this
+ might be `{\tt ti}' or `{\tt i}' depending on whom you ask. The
+ `Berry codes' are variant letters for Karl Berry's font naming
+ scheme.
+
+ The variable {\it slant} is common to many \MF\ programs, and
+ causes the glyphs to be obliqued. The {\it italicness} variable
+ signals that italic letterforms should be used for some letters.
+ It is possible to generate an obliqued font or an `upright
+ italic' with appropriate settings, but these cannot have `{\tt
+ ma}-' names because I~have not defined style codes for them.
+
+\section{Note on the {\it Handbook}}
+ The {\it Malvern Handbook}, {\tt doc/maman.tex} produces
+ cross-references automatically via an {\tt aux} file, and will
+ need to be run through \TeX\ twice to get the cross-references
+ right. The front matter (preface and table of contents) are
+ printed {\it last}, and should be transferred to the front of
+ the handbook before binding.
+
+\rightline{pdc 1994.10.07}
+\bye
+
+%Local Variables:
+%fill-prefix: " "
+%End:
diff --git a/fonts/malvern/doc/ma55doc.tex b/fonts/malvern/doc/ma55doc.tex
new file mode 100644
index 0000000000..c67d85aa26
--- /dev/null
+++ b/fonts/malvern/doc/ma55doc.tex
@@ -0,0 +1,310 @@
+%{{{ ma55doc.tex 1.1.10 1994/06/23 -- style file for documents in Malvern 55
+% Copyright (c) 1991-1994 Damian Cugley.
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \gdef\docversion{1.1.10} \gdef\lastedit{pdc 1994/06/23}
+}\the\toks0
+\message{\docversion\space \lastedit}
+
+\input pdchyex
+\input pdcimth
+\input pdcmigr
+\input pdcpars
+\input pdcfmt
+\input pdcoput
+\input pdcfsel
+\input maamac
+
+%{{{ Ensure top/bot margins large enough to fit headlines on
+% even if printed on American paper:
+\topmarge=297mm \advance\topmarge-11in \advance\topmarge7mm
+\botmarge=\topmarge
+\advance\topmarge\ht\strutbox \advance\topmarge\headlineskip
+\ifdim \topmarge<20mm \topmarge=20mm \fi
+\ifdim \botmarge<27mm \botmarge=27mm \fi
+
+\setpaper{210mm}{297mm}
+
+\hyphenpenalty=200
+\exhyphenpenalty=100
+%}}}
+%{{{ layout
+
+\setnkgrid{4}{3}
+\leftmargin=\gridwd
+\everypage={\setbox\leftbox=\hbox to \leftmargin{}}
+\colrule=0pt
+
+\everyfootnote={\notefonts}
+\def\footnotetextmark#1{$^{#1}$}
+\def\footnotenotemark#1{{\bf\n{#1}}}
+\everylinenum={\smallfonts}
+\everytag={\bf}
+
+%}}}
+%{{{ fonts
+
+\autoloadfonts
+
+\def\HEADINGtemplate
+{%
+ \f{rm}{ma75a}\f{mi}{eurb}\f{sy}{eusb}%
+ \f{it}{ma76a}\f{tt}{cmtt}\f{mf}{mf75s}\f{mfi}{mf76s}%
+}
+\ldfont\headingmi{eurb10 scaled \magstep4}
+\ldfont\headingsy{eusb10 scaled \magstep4}
+\ldfont\headingtt{cmtt10 scaled \magstep4}
+\ldfont\subheadingmi{eurb10 scaled \magstep2}
+\ldfont\subheadingsy{eusb10 scaled \magstep2}
+\ldfont\subheadingtt{cmtt10 scaled \magstep2}
+
+\fontset{subheading}\HEADINGtemplate{12}{14pt}{subheading}{subheading}
+\fontset{heading}\HEADINGtemplate{18}{20pt}{subheading}{subheading}
+
+\def\BODYtemplate
+{%
+ \m{rm}{ma55a}\m{it}{ma56a}%
+ \m{bf}{ma75a}\f{bi}{ma76a}%
+ \m{mi}{cmmi}\m{sy}{cmsy}%
+ \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ \f{tt}{cmtt}\f{tb}{cmttsl}%
+}
+
+\ldfont\bodytt{cmtt10 scaled \magstep2}
+\ldfont\notett{cmtt10 scaled \magstep1}
+\ldfont\smalltt{cmtt10 scaled \magstephalf}
+\ldfont\bodytb{cmttsl10 scaled \magstep2}
+\ldfont\smalltb{cmttsl10 scaled \magstep1}
+\ldfont\notetb{cmttsl10 scaled \magstephalf}
+\font\bodymi=cmmi10 scaled \magstep2
+\font\bodysy=cmsy10 scaled \magstep2
+\font\notemi=cmmi10 scaled \magstep1
+\font\notesy=cmsy10 scaled \magstep1
+\font\smallmi=cmmi10 scaled \magstephalf
+\font\smallsy=cmsy10 scaled \magstephalf
+
+\fontset{tiny}\BODYtemplate{7}{9pt}{tiny}{tiny}
+\fontset{small}\BODYtemplate{9}{11pt}{tiny}{tiny}
+\fontset{note}\BODYtemplate{10}{12pt}{tiny}{tiny}
+\fontset{body}\BODYtemplate{12}{14pt}{small}{tiny}
+
+\def\everyloadfont#1#2{\fontdimen3#1=0pt \fontdimen4#1=0pt}
+\rightskip=0pt plus 20mm
+\bodyfonts
+\tolerance=1000
+
+%}}}
+%{{{ malvern maths
+
+\mathcode`,="602C
+
+%}}}
+%{{{ TOC
+
+\newwrite\TOCfile
+\openout\TOCfile=\jobname.toc
+
+% #1 is \TOCentryfoo control sequence
+% #2 is stuff to be evaluated NOW -- e.g., section number
+% #3 is stuff to be evaluated WHEN PRINTED -- e.g., section title
+% folio is written after this in file
+\def\TOCwrite#1#2#3%
+{%
+ \def\tmp{#3}%
+ \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ \write\TOCfile\expandafter{\tmp{\folio}}
+}
+\def\TOCtrim#1:->{} % strip off "macro:->"
+
+\def\TOCentrypart#1#2#3%
+{
+ \smallskip
+ \dimen0=\hsize \advance\dimen0\leftmargin
+ \moveleft\leftmargin\hbox to\dimen0{\strut\bf #1. #2\hfil}
+ \smallskip
+}
+
+\def\TOCentrysection#1#2#3%
+{
+ \smallskip\noindent\llap{#1\quad}%
+ {\bf \ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+\def\TOCentrysubsec#1#2#3%
+{
+ \noindent{#1\enspace}{\ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+\def\TOCentrysubsubsec#1#2#3%
+{
+ \indent\indent\llap{#1\enspace}{\ignorespaces #2\quad\rm \n{#3}}\par
+}
+
+%}}}
+%{{{ sectioning
+
+% sections run continuously
+% divisions start new page but do not reset section counters
+
+\newcount\partno
+\def\thepartno
+{%
+ \ifcase\partno O\or I\or II\or III\or IV\or V\else
+ \expandafter\uppercase\expandafter{\romannumeral\partno}%
+ \fi
+}
+\def\part#1%
+{%
+ \advance\partno1
+ \newpageheading{2\baselineskip}{\headingfonts}{}{\thepartno.\quad#1}
+ \TOCwrite\TOCentrypart{\thepartno}{#1}
+}
+
+\newcount\secno \newcount\subsecno \newcount\subsubsecno
+
+\def\thesecno
+{%
+ \n{%
+ \number\secno
+ \ifnum\subsecno>0
+ .\number\subsecno
+ \ifnum\subsubsecno>0
+ .\number\subsubsecno
+ \fi
+ \fi
+ }%
+}
+
+\def\sectionheading#1{\dosectionheading{#1}}
+\def\dosectionheading#1%
+{
+ \par
+ \removelastskip
+ \vskip 0pt plus 0.3\vsize
+ \penalty-200
+ \vskip 1\bigskipamount plus -0.3\vsize
+ \begingroup \advance\leftskip-\leftmargin
+ \parskip=0pt \parindent=0pt
+ \hyphenpenalty=10000 \exhyphenpenalty=500
+ \interlinepenalty=100
+ \headingfonts
+ \hbox{\hskip-\leftmargin
+ \vrule height 2pt depth 0pt width \leftmargin
+ \vrule height 2pt depth 0pt width \hsize}
+ \nobreak\medskip
+ \Box\enspace#1\par
+ \nobreak\smallskip
+ \endgroup
+}
+
+\def\section#1%
+{
+ \counta=\secno \advance\counta1
+ \mark{\thesecno \noexpand\else \n{\number\counta}}% OLD \else NEW
+ \secno=\counta \subsecno=0 \subsubsecno=0
+ \dosectionheading{\thesecno\quad #1}
+ \mark{\thesecno \noexpand\else \thesecno}% NEW \else NEW
+ \TOCwrite\TOCentrysection{\thesecno}{#1}
+}
+
+\def\subsec#1%
+{%
+ \counta=\subsecno \advance\counta1
+ \mark{\thesecno \noexpand\else \n{\number\secno.\number\counta}}
+ \subsecno=\counta \subsubsecno=0
+ \doheading\medskipamount{\subheadingfonts}{}{\thesecno\quad#1}
+ \mark{\thesecno \noexpand\else \thesecno}
+ \TOCwrite\TOCentrysubsec{\thesecno}{#1}
+}
+
+\def\subsubsec#1%
+{%
+ \advance\subsubsecno+1
+ \doheading\smallskipamount{}{}{\ifdim\leftmargin=0pt\thesecno\quad\fi#1}
+ \TOCwrite\TOCentrysubsubsec{\thesecno}{#1}
+}
+
+\newif\ifnoheader
+\newif\iftwosided
+
+\footline={%
+ \ifnoheader
+ \global\noheaderfalse
+ \hfil\bodyfonts\n\folio\hfil
+ \else
+ \hfil
+ \fi
+}
+
+\headline={%
+ \ifnoheader
+ \hfil
+ \else
+ \bodyfonts \hskip-\leftmargin
+ \iftwosided
+ \ifodd\pageno
+ \iftrue\botmark\fi
+ \hfil
+ {\bf\n\folio}%
+ \else
+ {\bf\n\folio}\quad
+ \hfil
+ \expandafter\iffalse\topmark\fi
+ \fi
+ \else
+ \expandafter\iffalse\topmark\fi
+ \hfil
+ {\bf\n\folio}%
+ \fi
+ \fi
+}
+
+%}}}
+%{{{ abbrevs
+
+\def\pt{\,{\rm pt}}
+\def\mm{\,{\rm mm}}
+
+\def\MF{{\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi METAFONT}}
+\def\TeX{T\kern-0.1em \lower0.5ex\hbox{E}\kern-0.01em X}
+\def\La{L\kern-0.1667em \flushtop{\char"E1 }}
+\def\LaTeX{\La\kern-0.05em \TeX}
+\def\MagTeX{M{\char"E1 \char"E7 }\kern-0.1em \TeX}
+\csc{
+ \gdef\PS{PostScript}
+}
+
+\def\MSDOS{\hbox{MS-DOS}}
+
+\def\MFjob{{\mf MF}\kern-0.125em job} % Eberhard Mattes' emTeX MFjob
+
+{\plain|
+\gdef\dfn#1{\index{#1|idxunderline}{\bi #1}}
+}
+
+\def\<#1>{\leavevmode\hbox{\langle{\it#1\/}\rangle}}
+
+\active\* \def*#1*{{\it#1\/}}
+\append\verbatimplains\*
+
+% _xxx_ is xxx as typed by user to a program.
+\active\_
+\def_% _xxx_ is bold verbatim text
+{%
+ \ifmmode
+ \sb
+ \else
+ \begingroup % matched by closing _
+ \tb\setupverbatim
+ \plain\|\active\_%
+ \let_\endgroup
+ \fi
+}
+
+%}}}
+%}}} ma55doc.tex
+
+
+%Local variables:
+%fold-folded-p: t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/doc/mabib.tex b/fonts/malvern/doc/mabib.tex
new file mode 100644
index 0000000000..b0753169be
--- /dev/null
+++ b/fonts/malvern/doc/mabib.tex
@@ -0,0 +1,239 @@
+% mabib.tex -- Bibliography for Malvern Handbook
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-document {
+%%% filename = "mabib.tex",
+%%% version = "X",
+%%% date = "pdc 1994.10.11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family.",
+%%% dependencies = "ma55doc.tex, pdc*.tex, maamac.tex, texnical.tex,
+%%% mabib.tex, and many Malvern fonts",
+%%% }
+
+% This software is available freely but without warranty.
+% See the file 0copying.txt for details.
+
+%{{{ bibliography
+
+\section{References}
+
+\iflong\else
+ This section includes references not cited in the "Abridged
+ Malvern Handbook".
+\fi
+
+ The publication \TUGboat, referred to below, is the journal of
+ the \TeX\ Users Group (TUG), PO~Box~\n{9506}, Providence,
+ RI~$02940$--$9506$, United States of America. Their electronic
+ mail address is |TUG@Math.AMS.com|.
+
+ URLs (universal resource locators) describe documents available
+ over Internet. A URL of the form
+\begin display
+ |file://|\<host>|/|\<directory>|/|\<name>\cr
+\end display
+ represents a file called \<name> in directory \<directory> on an
+ FTP server called \<host>. CTAN is the Comprehensive \TeX\
+ Archive, for example
+\begin display
+ |file://ftp.tex.ac.uk/tex-archive|\cr
+ |gopher://gopher.tex.ac.uk/11/archive/|\cr\quad|Archive%20directory|\cr
+ |http://www.tex.ac.uk/tex-archive/|\cr
+\end display
+ and similarly
+\begin display
+ |file://ftp.dante.de/tex-archive|\cr
+ |file://ftp.shsu.edu/tex-archive|\cr
+\end display
+ and many mirrors.
+
+\def\Ibid{Ibid.\spacefactor1000 }
+
+\xreflabel{bib}{\S{\thesecno}}
+\begingroup
+\def\bibitem#1#2%
+{%
+ \smallbreak
+ \def\tmp{#1}
+ \edef\tmp{\string\expcs\string\def{xref-#2}%
+ {\expandafter\TOCtrim\meaning\tmp}}
+ \write\auxfile\expandafter{\tmp}
+ \setbox0=\hbox{\subheadingfonts {#1\/}}
+ \ifdim\wd0>\leftmargin
+ \noindent\hskip-\leftmargin \box0 \quad
+ \else
+ \noindent\llap{\hbox to \leftmargin{\hfil \unhbox0 \quad}}%
+ \fi
+ \ignorespaces
+}
+
+\counta=0
+\def\nbibitem%
+{%
+ \advance\counta 1
+ \expandafter\nnbibitem\expandafter{\the\counta}
+}
+\def\nnbibitem#1{\bibitem{\n{#1}}}
+
+\def\TB#1#2#3#4#5%
+{%
+ \TUGboat~\n{#1.#3} (\n{#2}), pp.\thinspace\n{#4}--\n{#5}%
+}
+
+\nbibitem{PS}
+ Adobe Systems Incorporated, {\it PostScript\registered\ Language
+ Reference Manual}, $2$nd Edition (Addison--Wesley, $1990$). The
+ definitive description of the Level-$2$ PostScript
+ page-decsription language.
+
+\nbibitem{Berry}
+ Karl Berry, `Filenames for Fonts', \TB{11}{1990}{4}{517}{520}.
+ This describes a system of conventions for assigning \TeX\
+ external names to fonts.
+
+\nbibitem{Berry2}
+ Karl Berry, {\it Filenames for Fonts}, version $1.6$
+ \url{file}{ftp.cs.umb.edu}{pub/tex}{fontnames-1.6.tar.gz}. As
+ above, with revisions, a longer list of family names, and some
+ ideas for long fontnames.
+
+\nbibitem{Bien}
+ Janusz S. Bie\'n, `On Standards for Computer-Modern Font
+ Extensions', \TB{11}{1990}{2}{175}{183}. Ennumerates the
+ special letters used in several languages.
+
+\nbibitem{KD}
+ K.~J. Dryllerakis (|kd@doc.ic.ac.uk|), {\it Typesetting Greek
+ Texts with Greek\TeX}, Greek\TeX~\n{3.1} (also known as KD Greek)
+ (CTAN |fonts/greek/kd|).
+
+
+\nbibitem{Cork}
+ Michael~J. Ferguson, `Report on Multilingual Activities',
+ \TB{11}{1990}{4}{514}{516}. This describes the font encoding
+ that resulted from discussions at the \TeX\ User Group
+ conference in Cork in September $1990$.
+
+\nbibitem{GPL}
+ Free Software Foundation, {\it GNU General Public License},
+ Version~$1$ (Free Software Foundation, Inc., $675$ Mass Ave,
+ Cambridge, MA~$02139$, USA) (Feb.\thinspace $1989$). The license
+ agreement descibes the rights and responsibilities of users of
+ GNU software. (Supplied as a file |COPYING| in all GNU
+ distributions.)
+
+\nbibitem{Hara}
+ Yannis Haralambous, `\TeX\ and Latin-Alphabet Languages',
+ \TB{10}{1989}{3}{342}{345}. An attempt to devise a system of
+ ligatures to cover all European Latin-alphabet languages.
+ Incorrectly states that no English words use composite letters.
+
+\nbibitem{Hart's}
+ Horace Hart, {\it Hart's Rules for Compositors and Readers at
+ the University Press, Oxford}, $39$th Edition (corrected)
+ (Oxford University Press, $1990$). A small book describing the
+ house style of the Oxford University Press.
+
+\nbibitem{Hart's13} \Ibid, p.\,$13$.
+\nbibitem{Hart's30} \Ibid, p.\,$30$
+\nbibitem{Hart's62} \Ibid, p.\,$62$
+\nbibitem{Hart's102} \Ibid, p.\,$102$.
+\nbibitem{Hart's120} \Ibid, pp.\,$120$--$121$.
+\nbibitem{Hart's135} \Ibid, p.\,$135$.
+
+\nbibitem{fontinst}
+ Alan Jeffrey ({\tt alanje@cogs.susc.ac.uk}), {\it The |fontinst|
+ package} (CTAN |fonts/utilities/fontinst|, June \n{1994}). See
+ \xref{s-fontinst}.
+
+\nbibitem{MFbook}
+ Donald E. Knuth, {\it The \MF book} (Addison--Wesley,
+ $1986$). Also published as Volume~C of the Computers and
+ Typesetting Series. The definitive user manual for \MF.
+
+\nbibitem{MFApp.F}
+ \Ibid, Appendix F.
+
+\nbibitem{TeXbook}
+ Donald E. Knuth, {\it The \TeX book} ($n$th printing,
+ Addison--Wesley, $1990$). Also published as Volume~A of the
+ Computers and Typesetting Series. The definitive user guide to
+ \TeX.
+
+\nbibitem{TeXchar}
+ {\TeX book}, Chapters $25$ and~$26$. \<character> is defined at the
+ start of Ch.\thinspace $26$ (Summary of Math Mode), but the concept is
+ used in Ch.\thinspace $25$ (Summary of Horizontal Mode).
+
+\nbibitem{TeX9}
+ {\it \TeX book}, Chapter \n9.
+\nbibitem{TeXB4}
+ {\it \TeX book}, Appendix B, \S$4$
+
+\nbibitem{TeXD1}
+ {\it \TeX book}, Appendix D, \S$1$.
+
+\nbibitem{TeXE}
+ {\it \TeX book}, Appendix E.
+
+\nbibitem{TeXF1}
+ {\it \TeX book}, Appendix F, Figure~\n1.
+
+\nbibitem{LaTeX}
+ Leslie Lamport, {\it \LaTeX: A Document Preparation System}
+ (Addison--Wesley, $1986$). An introduction and user guide for
+ \LaTeX.
+
+\nbibitem{lfonts}
+ Leslie Lamport et al., |lfonts.tex| (part of the standard
+ \LaTeX\ distribution). The only documentation for the standard
+ \LaTeX\ font-loading macros.
+
+\nbibitem{NFSS}
+ Frank Mittelbach and Rainer Sch\"opf, `The New Font Family
+ Selection: User Interface to Standard \LaTeX',
+ \TB{11}{1990}{2}{298}{}. This describes a version of the
+ so-called New Font Selection Scheme (\mc{NFSS}), used in some
+ \LaTeX\ installations.
+
+\nbibitem{ODWE}
+ {\it The Oxford Dictionary for Writers and Editors} (Oxford
+ University Press, $1990$). The companion dictionary to
+ \rcite{Hart's} above.
+
+\nbibitem{ODWEacc}
+ \Ibid, under "accents and special sorts".
+
+\nbibitem{ODWEcap}
+ \Ibid, under "capitalization/Postcodes". (Also the first line
+ of the title verso of the same book.)
+
+\nbibitem{Pei}
+ Mario A. Pei, {\it The World's Chief Languages}, $3$rd Edition
+ (Allen \& Unwin, $1949$). The only reference in my local
+ library to many of the languages that latin fonts are expected
+ to support.
+
+\nbibitem{nfss-malvern}
+ Sebastian Rahtz, {\tt malvern.sty} (in directory {\tt
+ /contrib/spqr} of the \package\ distribution). Specifies
+ Malvern fonts for \LaTeX \n{2.09} with NFSS.
+\par
+\endgroup
+%}}} bibliography
+
+%Local variables:
+%fold-folded-p: t
+%tex-mother-file: "maman"
+%fold-folded-p: t
+%fill-prefix: "\t"
+%End:
diff --git a/fonts/malvern/doc/magrmac.tex b/fonts/malvern/doc/magrmac.tex
new file mode 100644
index 0000000000..59fdc97b81
--- /dev/null
+++ b/fonts/malvern/doc/magrmac.tex
@@ -0,0 +1,85 @@
+% %M% 1.%I% %E% -- hacks for typesetting Greek
+
+% These macros are intended to be useful with the Malvern G fonts,
+% and should also work pretty much with the Levy or KD Greek fonts. In
+% the long term, I expect to merge what little extra support is needed
+% for Malvern into the GreekTeX distribution in some sense.
+
+% These macros are not in final form and are not intended to be
+% supported. Use them at your own risk. Enjoy!
+
+% Damian Cugley
+% Oxford University Computing Laboratory, UK
+% <Damian.Cugley@comlab.ox.ac.uk>
+
+%{{{ macros for greek
+
+\newtoks\everygreek
+
+%{{{ lunate sigma, curly phi
+
+{\catcode`\s=13 \catcode`\S=13
+\gdef\\%
+{%
+ \catcode`\s=13 \chardef s=`c%
+ \catcode`\S=13 \chardef S=`C%
+}}
+\let\grlunatesigma=\\
+
+{\uccode`\~=`\f \uppercase{
+\gdef\\%
+{%
+ \catcode`\f=13 \chardef~=92
+}}}
+\let\grvarphi=\\
+
+%}}} lunate sigma
+%{{{ accent
+
+{\catcode`\<=13 \catcode`\>=13 \catcode`\'=13 \catcode`\`=13
+\gdef\monotoniko
+{%
+ \catcode\lq\'=13 \catcode\lq\`=13 \catcode\lq\~=13
+ \catcode\lq\<=13 \catcode\lq\>=13 \catcode\lq\|=13
+ \chardef'=3 \chardef`=3 \chardef~=3
+ \chardef<=64 \chardef>=64 \chardef|=64
+}
+\gdef\plutoniko
+{%
+ \catcode\lq\'=12 \catcode\lq\`=12 \catcode\lq\~=12
+ \catcode\lq\<=12 \catcode\lq\>=12 \catcode\lq\|=12
+}
+}
+
+%}}} accent
+%{{{ define delims
+
+% Define #1 to be a "greek shift" in the way $ is a maths shift.
+% Like $, #1 stands for either \begingreek or \endgreek as required.
+% #1 must be a single token that is definable with \def -- either
+% a control sequence or an (already) active character.
+
+\def\grdelimiter#1%
+{
+ \def#1{\begingreek \let#1=\endgreek}
+}
+
+%}}} define delims
+
+\def\begingreek
+{%
+ \begingroup
+ \catcode`\~=12 \catcode`\|=12 \catcode`\"=12
+ \the\everygreek
+}
+\def\endgreek
+{%
+ \endgroup
+}
+
+%}}} macros for greek
+
+% Local variables:
+% fold-folded-p: t
+% tex-macros-p: t
+% End:
diff --git a/fonts/malvern/doc/magrman.fnt b/fonts/malvern/doc/magrman.fnt
new file mode 100644
index 0000000000..80834050d8
--- /dev/null
+++ b/fonts/malvern/doc/magrman.fnt
@@ -0,0 +1,25 @@
+cmr12
+cmr9
+cmti12
+cmti9
+cmbx12
+cmbx9
+cmmi12
+cmmi9
+cmsy9
+cmtt12
+logo10 at 12pt
+cmss10 scaled 1200
+cmbxti10 at 12pt
+cmr10
+cmr7
+cmti10
+cmti7
+cmbx10
+cmbx7
+cmmi10
+cmmi7
+cmsy10
+cmsy7
+cmbxti10 at 10pt
+cmtt10
diff --git a/fonts/malvern/doc/magrman.idx b/fonts/malvern/doc/magrman.idx
new file mode 100644
index 0000000000..69e1c7422c
--- /dev/null
+++ b/fonts/malvern/doc/magrman.idx
@@ -0,0 +1,6 @@
+\idx{Greek mode|idxunderline}{1}
+\idx{lunate sigma|idxunderline}{1}
+\idx{compound word mark|idxunderline}{2}
+\idx{`}{2}
+\idx{null glyph|idxunderline}{2}
+\idx{`}{4}
diff --git a/fonts/malvern/doc/magrman.tex b/fonts/malvern/doc/magrman.tex
new file mode 100644
index 0000000000..2eba5b34f0
--- /dev/null
+++ b/fonts/malvern/doc/magrman.tex
@@ -0,0 +1,602 @@
+% magman.tex -- info about Malvern Greek.
+%{{{ Malvern Greek manual
+%{{{ preamble
+
+\input cmdoc
+\input magrmac
+\input pdcidx
+
+\font\notegr=ma55g9
+\font\bodygr=ma55g11
+\macappend\BODYtemplate{\f{gr}{ma55g}}
+\bodyfonts
+
+\everygreek{\gr \baselineskip=14pt}
+
+\grdelimiter*
+
+\headline={\hfil\global\headline={\bodyfonts \hfil Typesetting Greek using
+ Malvern fonts\quad{\bf\folio}}}
+
+\def\thesecno
+{%
+ \number\subsecno
+}
+
+%{{{ font tables
+
+%% Code to typeset a font table -- lifted from my testfont.tex
+
+\newcount\tableN
+\newcount\hexcount
+\def\hexdigit#1{\ifcase#1\relax 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}
+
+\def\ntablecr
+{%
+ \cr
+ \noalign{\nointerlineskip}
+ \multispan2\hfill &\multispan{33}\hrulefill
+}
+\def\ntable
+{
+ \medskip
+ \begingroup \openup1\jot
+ \def\\{\char\tableN \global\advance\tableN 1}
+ \def\0##1{&\omit&\sevenrm##1}
+ \halign to \hsize
+ {%
+ \chartstrut\hss##\tabskip=0pt plus 10pt &
+ &\hss##\hss&##\vrule\cr
+ \lower 6.5pt\null
+ &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F
+ \ntablecr
+ \global\tableN=0
+ \ntablelines
+ \crcr
+ }
+ \medbreak
+ \endgroup
+}
+
+\def\ntablelines
+{%
+ \ifnum\tableN<256
+ \let\next\ntablecontinuation
+ \else
+ \let\next\relax
+ \fi
+ \next
+}
+
+\newcount\ntabtmp
+
+\def\ntablecontinuation
+{%
+ % Find out if none of this row are defined by making a horizontal
+ % list of all of them preceeded by a penalty of 1; if any of them
+ % are defined then \lastpenalty will be something other than 1:
+ \setbox0=\hbox{\penalty1
+ \def~{\char\tableN \advance\tableN 1}%
+ ~~~~~~~~~~~~~~~~\global\ntabtmp=\lastpenalty}%
+ % Now set the row in the table iff ntabtmp # 1:
+ \ifnum\ntabtmp=1
+ \global\advance\tableN 16 \let\next=\ntablelines
+ \else
+ \let\next=\ntablecontinuationcontinuation
+ \fi
+ \next
+}
+
+\def\ntablecontinuationcontinuation
+{%
+ \cr
+ \noalign{\nointerlineskip \penalty5000 }
+ & \hexcount=\tableN \divide\hexcount16 \sevenrm\hexdigit\hexcount
+ &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&
+ \ntablecr
+ \ntablelines
+}
+
+\def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}}
+
+%}}} font tables
+%{{{ two-column quotations
+
+\def\twocolgr
+{
+ \smallskip
+ \setbox0=\vbox\bgroup
+ \hsize=\bodywd \advance\hsize-\colsep \divide\hsize by 2
+ \begingreek \strut \ignorespaces
+}
+\def\endtwocolgr
+{%
+ \par\endgreek \egroup
+ \moveleft\leftmargin\vbox{
+ \hrule\smallskip
+ \rigidbalance{0}{2}{\ht\strutbox}{\bodywd}{\hfil}
+ \smallskip\hrule
+ }
+
+\smallbreak
+}
+%}}} two-column quotations
+%}}} preamble
+%{{{ bibliography
+
+\def\TB{{\it TUGboat}}
+
+\counta=0
+\newtoks\bibliography
+\newcount\bibcount
+
+\def\FAQnote
+{%
+ \par {\bf Note on FAQs}\quad An FAQ is an electronic document, posted
+ regularly to a USENET newsgroup, usually in the form of a list of
+ answers to frequently asked questions. Many FAQs are available on
+ the archive site |pit-manager.mit.edu| (alias |rtfm.mit.edu|)
+ [18.172.1.27] in the directory |pub/usenet/news.answers|. The
+ reference gives the name of the compiler, the title, the
+ last-modified date (in lieu of an edition or version number) and
+ name under which the FAQ is archived appears in parentheses.
+ \par
+}
+
+\def\bibdef#1#2%
+{
+ \expcs\edef{cite#1}%
+ {%
+ \noexpand\docite\noexpcs{cite#1}\noexpcs{refer#1}%
+ }
+ \toks0={#2}
+ \expcs\edef{refer#1}{\noexpand\bibitem{\expcs\noexpand{cite#1}}
+ \the\toks0}
+}
+\def\docite#1#2%
+{%
+ \global\advance\bibcount1
+ \global\bibliography=\expandafter
+ {\the\bibliography #2}%
+ \global\edef#1%
+ {[\the\bibcount]}#1%
+}
+
+\bibdef{Allen}
+{
+ W. Sidney Allen, {\it Vox Graeca: A Guide to Pronunciation of Classical
+ Greek}, 3rd Ed.\ (Cambridge University Press, 1987),
+ pp.\thinspace177--179.
+}
+
+\bibdef{KD}
+{
+ K.~J. Dryllerakis (|kd@doc.ic.ac.uk|), {\it Typesetting Greek Texts with
+ Greek\TeX}, Greek\TeX~3.1 (also known as KDGreek) (CTAN
+ |fonts/greek/kd|).
+}
+
+\bibdef{FAQ}
+{
+ Nikolaos Fotis (ed.), {\it soc.culture.greek} FAQ --
+ Linguistics ({\tt greek-\penalty\exhyphenpenalty faq\slash
+ linguistics}, 1993/03/06).
+}
+
+\bibdef{Yannis}
+{
+ Yannis Haralambous and Klaus Thull, Typesetting Modern Greek with 128
+ Character Codes, \TB\/ 10 (1989), pp.\thinspace354--359 (CTAN
+ |fonts/greek/yannis|).
+}
+
+\bibdef{Harts}
+{
+ Horace Hart, {\it Hart's Rules for Compositors and Readers at the
+ University Press, Oxford}, 39th Edition, revised (Oxford
+ University Press, 1989), pp.\thinspace111--116.
+}
+
+\bibdef{Levy}
+{
+ Silvio Levy, Using Greek Fonts with \TeX, \TB\/ 9 (1988),
+ pp.\thinspace20--24 (CTAN |fonts/greek/levy|).
+}
+
+\bibdef{COD}
+{
+ {\it The Concise Oxford Dictionary of Current English}, 8th Ed.
+ (Oxford University Press, 1990), p.\thinspace1453.
+}
+
+\def\bibitem#1%
+{%
+ \smallskip
+ \indent \llap{#1\hskip1pc}\ignorespaces
+}
+
+
+%}}} bibliography
+
+\leftline{\headingfonts Typesetting Greek using Malvern fonts}
+\bigskip
+\leftline{P. Damian Cugley}
+\leftline{Oxford University Computing Laboratory}
+\leftline{(|Damian.Cugley@comlab.ox.ac.uk|)}
+\leftline{April 1993}
+\bigskip
+
+\noindent
+ Malvern is a sanserif font family, implemented in \MF. This
+ document describes an early version of Malvern encoding~G (the Greek
+ alphabet). The Greek letters used to appear in Malvern~B, but I
+ decided to give them an encoding (code page?)\ of their own so that
+ there would be space for composite letters.
+
+\subsec{Using Malvern G}
+
+ Because most Latin-alphabet languages require additional composite
+ letter glyphs to be properly typeset by \TeX, most Malvern fonts
+ will be used as the raw material for composite fonts. In contrast,
+ the Malvern Greek font can be used directly to typeset Greek, both
+ with the old accent-and-breathing systems and the newer (post-1974)
+ one-accent system. It follows the conventions of Silvio Levy's
+ original |gr| family \citeLevy\ and K.~J. Dryllerakis's Greek\TeX\
+ (|kd| fonts) \citeKD. It is almost compatible with the reduced
+ Greek fonts (|rgr| and |mrgr| families) described by Yannis
+ Haralambous and Karl Thull \citeYannis.
+
+%{{{ typesetting
+
+\subsec{Macro file}
+
+ The file |grhacks.tex| has some macros for setting texts in plain
+ \TeX. A future production release may instead work as an option or
+ extension of Greek\TeX, with the objective of making it possible to
+ switch an existing document to Malvern without much editing.
+
+ Greek text is set within a \dfn{Greek mode}, delimited by macros
+ |\begingreek| and |\endgreek|. Each time Greek mode is entered, the
+ contents of the token register |\everygreek| is scanned first.
+ Since |grhacks| does {\it not} load a particular font by default, a
+ manuscript using |grhacks| will want to include an assignment like
+\begin display
+ |\everygreek={\gr}|\cr
+ |\catcode`\*=\active \grdelimiter*|
+\end display
+ where |\gr| has been bound to some Greek font or another such as
+ |ma55g12|. The macro |\grdelimiter| takes one parameter, an active
+ character (or control sequence) and makes that character into a
+ self-matching delimiter for Greek mode (like |$|--|$| works for
+ mathematics mode). Thus, `|*This is Greek*|' produces `*This is
+ Greek*'.
+
+
+\subsec{The alphabet}
+
+ The letters are transliterated as
+ follows:
+\begin table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ \gr a&\gr b&\gr g&\gr d&\gr e&\gr z&\gr h&\gr j&\gr i&\gr k&\gr
+ l&\gr m&\gr n&\gr x&\gr o&\gr p&\gr r&\gr ss&\gr c&\gr t&\gr
+ u&\gr f&\gr q&\gr y&\gr w\cr
+ \tt a&\tt b&\tt g&\tt d&\tt e&\tt z&\tt h&\tt j&\tt i&\tt k&\tt
+ l&\tt m&\tt n&\tt x&\tt o&\tt p&\tt r&\tt s&\tt c&\tt t&\tt u&\tt
+ f&\tt q&\tt y&\tt w\cr
+\noalign{\smallskip}%
+ \gr A&\gr B&\gr G&\gr D&\gr E&\gr Z&\gr H&\gr J&\gr I&\gr K&\gr
+ L&\gr M&\gr N&\gr X&\gr O&\gr P&\gr R&\gr S&\gr C&\gr T&\gr
+ U&\gr F&\gr Q&\gr Y&\gr W\cr
+ \tt A&\tt B&\tt G&\tt D&\tt E&\tt Z&\tt H&\tt J&\tt I&\tt K&\tt
+ L&\tt M&\tt N&\tt X&\tt O&\tt P&\tt R&\tt S&\tt C&\tt T&\tt U&\tt
+ F&\tt Q&\tt Y&\tt W\cr
+\end table
+ The letter *C c* is \dfn{lunate sigma} (see below).
+
+ A lower case sigma `*s@*' at the end of a word (or followed by
+ punctuation) is automatically changed to the final form `*s*'
+ through \TeX's ligature mechanism.\note{Occasionally \TeX's notion
+ of word boundaries causes the wrong glyph to appear. There are two
+ special invisible glyphs that can be used to control this in obscure
+ circumstances. The so-called \dfn{compound word mark} (or cwm) acts
+ as a word-boundary in the middle of a word. It has code~32, so
+ `|as^^`a|' produces `*as^^`a*', for example. The \dfn{null glyph}
+ is invisible, but, because it is not a boundary character, it can be
+ used to prevent a ligature with a following word boundary. It has
+ code 64, so `|as@|' produces `*as@*'.}
+
+\subsec{Composite letters}
+
+ The marks that go above the letters are obtained with the
+ following characters, which go before the letter:
+\begin table \gr#\hfil&\quad#\hfil&\quad #\hfil& \quad *#*\hfil\cr
+\noalign{\hrule height 1pt \vskip1\jot}%
+ \omit Mark\hfil&\omit\quad Char\hfil&
+ Name&\omit\quad Name in \citeYannis\hfil\cr
+\noalign{\vskip\jot \hrule \vskip\jot}
+ <@& |<|& asper (rough, = h)& dase'ia\cr
+ >@& |>|& lenis (smooth)& yil'h\cr
+ "@& |"| (double quote)&
+ diaeresis& dialutik'a\cr
+ '@& |'| (quote)&
+ acute accent& >oxe'ia\cr
+ `@& |`|& grave accent& bare'ia\cr
+ \char126 @& |~|& circumflex& perispwm'enh\cr
+\noalign{\vskip1\jot \hrule height 1pt\smallskip}%
+\end table
+ A breathing or diaeresis can be combined with an accent, thus
+ `|<~a|' for *<~a*, `|>'e|' for *>'e*.
+
+ The vowels *a*, *h* and *w* may have an iota beneath them, called
+ `subscript': *a|*, *h|*, *w|*. These are produced with a vertical
+ bar `||||' after the letter in Greek mode: `|a|||' makes *a|*,
+ `|<a|||' makes `*<a|*', and so on.
+
+ As an example: `*>en >arq~h| >~hn <o l'ogos*' is generated with `|>en
+ >arq~h|| >~hn <o l'ogos|'.
+
+% In old-style Greek, all vowels beginning a word require a breathing
+% -- but *u* may only have an asper (rough). In diphthongs (*ai*,
+% *ei*, *oi*, *ui*, *au*, *eu*, *hu*, *ou*, *wu*), breathings and
+% accents stand over the second letter: *a<i*, *o>u*. Double *rr*
+% used to be written *>r<r*.
+
+%\subsec{Apostrophe (sign of elision)}
+
+% The lenis is also used like an apostrophe, to mark the elision of
+% vowels at the end of a word when the next word starts with a vowel.
+% The Malvern-G fonts, like the Levy-derived fonts, also has a
+% separate apostrophe glyph, which can be set with `|''|' (two quote
+% characters) or `|'|' (one quote) at the end of a word. Thus you
+% have a choice of `|d>|' or `|d'|' (*d>* or *d'*).
+
+
+\subsec{Punctuation}
+
+ Here's a table of correspondences for punctuation:
+\begin table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ *.*&*,*&*;*&*:*&*!*&*?*&*''*&*((*&*))*\cr
+ |.|&|,|&|;|&|:|&|!|&|?|&|''|&|((|&|))|\cr
+\end table
+ The apostrophe is also generated by a single single-quote at the end
+ of a word: `*d'*' can be generated by `|d'|'. There are also
+ digits, parentheses, brackets, hyphen, dashes, slash, per cent sign,
+ asterisk, plus and equals signs.
+
+\subsec{One-accent Greek}
+
+ The easiest way to write modern Greek is simply to use |'| for the
+ accent and otherwise to use |\begingreek|--|\endgreek| as before:
+ `*en arq'h hn o l'ogos*' is generated with `|en arq'h hn o l'ogos|'.
+
+ Malvern also has glyphs for a symmetrical accent (*\char3*) and
+ composite letters (such as *\char3 a*, *"\char3u*). The macro
+ |\monotoniko|\note{This macro is so named for compatibility with the
+ |rgr|/|mrgr| macros \citeYannis. It might usefully go in
+ |\everygreek|.} in Greek mode makes |'| an active character,
+ expanding to the symmetrical accent. Then `|En'w|' produces
+ `*En\char3w*'. In fact, the other accent characters |`| and |~| are
+ also made to substitute `*\char3*', and |<|, |>| and |||| expand to
+ the null glyph, so that a text with all the breathings and accents
+ and be hacked into almost-correct one-accent Greek.\note{Again, for
+ compatibility with the |rgr|/|mrgr| macros. Because monosyllables
+ should not have accents at all in one-accent Greek, a complete
+ conversion from old-style to new-style requires changes to the
+ manuscript anyway, so the usefulness of this feature is debatable!}
+ For example, `|>En~w|||' becomes `*\monotoniko >En~w|*'.
+
+\subsec{Variant glyphs}
+
+ Sigma has a variant called lunate sigma, written *Cc*. These
+ letters can be obtained directly (produced by the character `|c|' in
+ the manuscript). So that a given text can be switched between the
+ two styles, there is also a macro |\grlunatesigma|, which redefines
+ `|s|' is as active character equivalent to `|c|'. Obviously this is
+ only useful when Greek mode is only used for plain texts, since it
+ prevents `|s|' from being used in control sequence names.
+
+ Similarly, there are two ways to write lower case phi: *f* and
+ *\char92 * (`|f|' and glyph~92). There is no difference in meaning
+ between *f* and *\char92 *; the choice of one or the other is only
+ made on aesthetic grounds. The macro |\grvarphi| redefines `|f|' as
+ an active character equivalent to `*\char92 *', in effect replacing
+ *f* with *\char92 *.
+
+ Normally these macros, if used, will go in |\everygreek|.
+
+%}}} typesetting
+\iffalse
+%{{{ background
+\subsec{Background}
+
+ This section is optional reading.
+
+\subsubsec{Development of the Levy-derived font families}
+
+ Silvio Levy's |gr| fonts \citeLevy\ used the \TeX~2 ligature system
+ to make *s* become *s@* when followed by a letter, and had glyphs
+ for almost all the composite letters.
+
+ Yannis Haralambous and Klaus Thull created a set of reduced
+ (128-glyph) fonts, for \TeX\ systems still unable to manage
+ 256-glyph fonts \citeYannis. These fonts (the |rgr| and |mrgr|
+ families) still used Levy's character programs. Because they could
+ not include glyphs for all the composite letters, many composite
+ letters had to be obtained with macros rather than ligatures. The
+ |mrgr| family is for new-style (one-accent) Greek.
+
+ Finally K.~J. Dryllerakis's Greek\TeX\ package (also called KDGreek)
+ \citeKD\ uses the Levy character programs again, but takes advantage
+ of the new ligature features of \TeX~3 to make *s@* become *s*
+ (without needing compound glyphs for every combination of *s@* with
+ a letter). The fonts are given names starting with |kd|.
+ Greek\TeX\ also includes format files for plain \TeX\ and \LaTeX,
+ transliteration programs and other useful things.
+
+\subsubsec{Designing Greek letters for Malvern}
+
+ My Malvern-G encoding is intended to be `ligature-compatible' with
+ Levy's and Dryllerakis's, meaning that `|<'a|||' will produce
+ `*<'a|*' in each of them, even though this is glyph~141 in
+ |grreg10|, 201 in |kdgr10| and some random number in |ma55g10|. The
+ punctuation characters have the same encoding.
+
+ Designing a sanserif Greek lower case alphabet (*alfabet*?) is tricky
+ because the lower case letters have a very cursive style, as if
+ hand-drawn with a brush by a scribe in a hurry -- which is pretty
+ much the opposite of most sanserif styles. I~made sketches (on
+ paper) of Greek letters forced into the same sorts of shapes as
+ other Malvern letters, and the results were uniformly horrid. The
+ original idea of Malvern was to make a humanist/geometric hybrid, so
+ I tried approaching it from the from the humanist end this time.
+
+%}}} background
+\fi
+%{{{ references
+
+\subsec{References}
+
+ Since I don't speak a word of Greek -- the only word I know is
+ *barbaroi* and I don't know how to spell it -- I have relied on
+ reading between the lines of the documentation for other systems for
+ typesetting Greek, including Hart's Rules \citeHarts.
+
+ CTAN is the Comprehensive \TeX\ Archive Network, a collection of FTP
+ sites (such as |ftp.tex.ac.uk|, under directory |tex-archive|).
+
+\begingroup \parskip=0pt \parindent=0pt
+ \the\bibliography
+\endgroup
+
+%}}} postamble
+\vfill\eject
+%{{{ samples
+
+\subsec{Examples of text in Malvern 55 and 56}
+
+\iffalse
+ This quotation is used by Haralambous and Thull \citeYannis\ as an
+ example of the old-style accent-and-breathing system:
+%{{{ Popess Johanna
+
+\begin twocolgr
+ >En~w| <esp'eran tin`a >exantl'hsas t`a murol'ogi'a tou
+ >ekoim~ato <o Froum'entios >ep`i t~hs >'ammou t~hs paral'ias,
+ katab`as >ex o>uran~wn <o >ap'ostolos >eke~inos t~wn Sax'onwn
+ >'hnoixe di`a maqa'iras t`a st'hjh to~u koimwm'enou,
+ e>is'hgage to`us <iero`us dakt'ulous tou e>is t`hn >op`hn kai
+ >exag`wn t`hn kard`ian >eb'ujisen a>ut'hn e>is l'akkon pl'hrh
+ <'udatos, <'oper <hg'iasen prohgoum'enws. <H fl'egousa
+ >eke'inh kard'ia >'efrizen e>is t`o <'udwr <ws smap`is >ent`os
+ to~u thgan'iou, >afo~u d`e >ekr'uwsen, >'ejese p'alin a>ut`hn
+ <o <'agios e<is t`on t'opon ths ka`i kle'isas t`hn plhg`hn
+ >ep'estreyen e>is t`on >idik'on tou.
+
+ >'Etuq'e pote, >anagn~wst'a mou, n`a >apokoimhj~h|s m`e
+ >anup'oforon b~hqa, koim'wmenos n`a <idr'wsh|s ka`i >exupn'hsas
+ n`a e<urej~h|s >iatreum'enos? >Agn~wn <'oti e>~isai
+ kal`a >ano'igeis mhqanik~ws t`o st'oma, <'ina plhr'wsh|s e>is
+ t`on >epikat'araton b~hqa t`on sun'hjh f'oron. >All`a
+ p'oshn a>isj'anesai qar'an, m`h e<ur'iskwn e>is t`on l'arugga
+ t`o >oqlhp`on jhr'ion! O<'utw <'ama >'hnoixe ka`i <o
+ Froum'entios to`us >ofjalmo'us, <htoim'asjn n`a prosf'erh|
+ e>is t`hn >aq'ariston >Iw'annan t`hn sun'hjh dakr'uwn
+ spond'hn, >all`a par`a p~asan prosdok'ian o<i >ofjalmo'i
+ tou e<ur'ejhsan xhro`i ka'i n`a progeumat'ish| m~allon >`h
+ n`a kla'ush| >h|sj'aneto >'orexin met`a polu'hmeron nhste'ian
+ <o kal`os Benedekt~inos.
+\end twocolgr
+\rightline{\csc{Emmanouil Ro\"{\i}dis}, `The Popess Johanna (1896)'}
+\vskip 0pt plus \baselineskip
+
+%}}} Popess Johanna
+\fi
+
+ The following paragraph is set in 11-point Malvern~55 (11-point
+ Malvern has comprable x-height to 12-point Computer Modern). This
+ quotation is used as one of the examples in Levy's article
+ \citeLevy:
+\begin twocolgr
+ >All' >ako'usontai, >enper e>~u dok~h|s l'egein. t'ode d'e sou
+ >ene'ohsa <'ama l'egontos, ka`i pr`os >emaut`on skop~w; e>i <'oti
+ m'alist'a me E>uj'ufrwn did'axeien, <ws o<i jeo`i <'apantes t`on
+ toio~uton j'anaton <hgo~untai >'adikon e>~inai, t'i m~allon >eg`w
+ mem'ajhka par' E>uj'ufronos, t'i pot' >est`in t`o <'osi'on te ka`i
+ t`o >an'osion? jeomis`es m`en g`ar to~uto t`o >'epgon, <ws
+ >'eoiken, e>'in >'an; >all`a g`ar o>u to'utw| >ef'anh >'arti
+ <wrism'ena t`o <'osion ka`i m'h; t`o g`ar jeomis`es >`on ka`i
+ jeofil`es >ef'anh. <wste to'utou m`en >af'ihm'i se, >~w E>uj'ufron;
+ e>i bo'ulei, p'antes a>ut`o <hge'isjwn jeo`i >'adikon ka`i p'antes
+ miso'untwn. >all' >~ara to~uto n~un >epanorj'wmeja >en t~w| l'ogw|,
+ <ws <`o m`en p'antes o<i jeo`i mis~wsin, >an'osi'on >estin, <`o d'
+ >`an fil~wsin, <`osion; <`o d' >`an o<i m`en fil~wsin, o<i d`e
+ mis~wsin, o>ud'etera >`h amf'otera? >~ar' o<'utw bo'ulei <hm~in
+ <wr'isjai n~un per`i to~u <os'iou ka`i to~u >anos'iou?
+\end twocolgr
+ \rightline{Plato, `Euthyphro'}
+\vskip 1\medskipamount plus \baselineskip
+
+
+ This quotation (similarly stolen) is in Malvern~56 and has
+ |\grvarphi| and |\grlunatesigma| in effect:
+
+\begin twocolgr \font\f=ma56g11 \f \grvarphi \grlunatesigma
+ T`h stigm`h to'uth ni'wjw p'oso bar'u ''nai t`o must'hrio t~hs
+ xomol'oghshs. <Ws t'wra, kane`is d`en x'erei p~ws p'erasa t`a du`o
+ qr'onia mou st`o <'Agion >'Oros. O<i f'iloi mou jarro~un p`ws p~hga
+ n`a d~w buzantin`a kon'ismata >`h >ap`o mustikop'ajeia n`a z'hsw
+ mi`a perasm'enh >epoq'h. Ka`i t'wra, n'a, ntr'epomai n`a mil'hsw.
+
+ P~ws n`a t`o p~w? Jumo~umai <'ena >anoixi'atiko deilin'o, po`u
+ kat'ebaina t`on Ta"'ugeto, mi`a xafnik`h j'uella m`e k'uklwse kont`a
+ sto'us Pentaulo'us. T'oso fober`os >anemos'ifounas, po`u >'epesa
+ katag~hs gi`a n`a m`hn gkremist~w. O<i >astrap`es m' >'exwsan
+ <olo~uje ki >'ekleisa t`a m'atia m`hn tuflwj~w, ka`i kat'aqama,
+ p'istoma, per'imena. <'Olo t`o pan'uyhlo boun`o >'etreme, ka`i du`o
+ >'elata d'ipla mou tsak'isthkan >ap' t`h m'esh ka`i br'onthxan
+ q'amou. >'Eniwja t`o jei'afi to~u kerauno~u st`on >a'era, ka`i
+ xafnik`a x'espase <h mp'ora, >'epesen <o >'anemos, ka`i qontr'es,
+ jerm'es st'ales broq`h qt'uphsan t`a dentr`a ka`i t`o q~wma. T`o
+ jum'ari, <h jro'umpa, t`o fask'omhlo, t`o flisko'uni, qtuphm'ena
+ >ap' t`o ner'o, t'inaxan t`is murwdi'es tous ki <'olh <h g~hs
+ m'urise.
+\end twocolgr
+\rightline{\csc{Kazantzakis}, `Symposium'}
+\vskip 0pt plus \baselineskip
+
+%}}} samples
+\iffalse
+%{{{ table
+
+*\ntable*
+\smallskip \noindent
+ This is a working encoding, and will likely be different in future
+ versions.
+%}}} table
+\fi
+%{{{ 24-pt sample
+
+\font\biggr=ma55g24
+\bigbreak
+\moveleft\leftmargin \vbox{ \hsize=\bodywd
+\hrule height 1pt \bigskip
+\begingreek \biggr\baselineskip=30pt
+\centerline{((ABGDEZHJIKLMNXOPRSCTUFQYW))}
+\centerline{](abgdezhjiklmnxoprss^^`ctuf\char92 qyw)[}
+\centerline{=0123456789---\%\char42 +/--''!,:;?.-}
+\centerline{\char3 '@ `@ ~@ <@ <'@ <`@ <~@ >@ >'@ >`@ >~@ "@ "'@ "`@ "~@
+ "\char3 @}
+\endgreek
+\medskip\hrule height 1pt
+}
+%}}} 24-pt sample
+
+\bye
+%}}} Malvern Greek manual
+
+% Local variables:
+% fill-prefix: "\t"
+% fill-column: 76
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/doc/magrman.toc b/fonts/malvern/doc/magrman.toc
new file mode 100644
index 0000000000..2de8ced2e6
--- /dev/null
+++ b/fonts/malvern/doc/magrman.toc
@@ -0,0 +1,9 @@
+\TOCentrysubsec{1}{Using Malvern G}{1}
+\TOCentrysubsec{2}{Macro file}{1}
+\TOCentrysubsec{3}{The alphabet}{1}
+\TOCentrysubsec{4}{Composite letters}{2}
+\TOCentrysubsec{5}{Punctuation}{2}
+\TOCentrysubsec{6}{One-accent Greek}{2}
+\TOCentrysubsec{7}{Variant glyphs}{3}
+\TOCentrysubsec{8}{References}{3}
+\TOCentrysubsec{9}{Examples of text in Malvern 55 and 56}{4}
diff --git a/fonts/malvern/doc/makeind.rc b/fonts/malvern/doc/makeind.rc
new file mode 100644
index 0000000000..0f0004ff4d
--- /dev/null
+++ b/fonts/malvern/doc/makeind.rc
@@ -0,0 +1,36 @@
+% style file for makeindex
+
+% INPUT
+
+keyword "\\idx"
+level '/'
+range_open '+' range_close '-'
+
+% OUTPUT
+
+preamble ""
+
+postamble "}\n"
+
+setpage_prefix "\n\\pageno=" setpage_suffix " "
+
+group_skip "}\n\n\\medskip\n"
+lethead_prefix "\\leftline{\\bodybi "
+lethead_suffix "}\n\\smallskip{"
+lethead_flag -1
+
+item_0 "}\n\n\t"
+item_1 "}\n\n\t\\indent\\hskip1em\n"
+item_2 "}\n\n\t\\indent\\hskip2em\n"
+item_01 "}\n\n\t\\indent\\hskip1em\n"
+item_x1 "\n\n\t\\indent\\hskip1em\n"
+item_12 "}\n\n\t\\indent\\hskip2em\n"
+item_x2 "\n\n\t\\indent\\hskip2em\n"
+
+delim_0 "\\ \\n{"
+delim_1 "\\ \\n{"
+delim_2 "\\ \\n{"
+delim_n "}, \\n{"
+delim_r "}--\\n{"
+
+
diff --git a/fonts/malvern/doc/maman.aux b/fonts/malvern/doc/maman.aux
new file mode 100644
index 0000000000..1011b0b479
--- /dev/null
+++ b/fonts/malvern/doc/maman.aux
@@ -0,0 +1,54 @@
+\expcs\def {xref-s-stylecodes}{\S $ \textfont 0=\font 2.2 $\ on page\penalty \@M \ $ \textfont 0=\font 4 $}
+\expcs\def {xref-s-font-names}{\S $ \textfont 0=\font 2.3 $\ on page\penalty \@M \ $ \textfont 0=\font 4 $}
+\expcs\def {xref-tab-encoding-codes}{\S $ \textfont 0=\font 2.3 $\ on page\penalty \@M \ $ \textfont 0=\font 5 $}
+\expcs\def {xref-s-kb-names}{\S $ \textfont 0=\font 2.4 $\ on page\penalty \@M \ $ \textfont 0=\font 6 $}
+\notedatum{1}{6}
+\notedatum{2}{8}
+\notedatum{3}{9}
+\expcs\def {xref-s-LaTeX-fnames}{\S $ \textfont 0=\font 4.3 $\ on page\penalty \@M \ $ \textfont 0=\font 9 $}
+\expcs\def {xref-s-maamac}{\S $ \textfont 0=\font 5 $\ on page\penalty \@M \ $ \textfont 0=\font 9 $}
+\expcs\def {xref-s-ranging}{\S \kern .16667em $ \textfont 0=\font 5.4 $\ on page\penalty \@M \ $ \textfont 0=\font 11 $}
+\notedatum{4}{12}
+\expcs\def {xref-tab-charcodes}{\S $ \textfont 0=\font 6.1 $\ on page\penalty \@M \ $ \textfont 0=\font 12 $}
+\expcs\def {xref-tab-charcodes-a}{\S $ \textfont 0=\font 6.2 $\ on page\penalty \@M \ $ \textfont 0=\font 12 $}
+\expcs\def {xref-tab-charcodes}{Table\penalty \@M \ $ \textfont 0=\font 1 $\ on page\penalty \@M \ $ \textfont 0=\font 13 $}
+\expcs\def {xref-tab-charcodes-b}{\S $ \textfont 0=\font 6.3 $\ on page\penalty \@M \ $ \textfont 0=\font 14 $}
+\expcs\def {xref-tab-charcodes-c}{\S $ \textfont 0=\font 6.4 $\ on page\penalty \@M \ $ \textfont 0=\font 15 $}
+\expcs\def {xref-tab-charcodes-g}{\S $ \textfont 0=\font 6.5 $\ on page\penalty \@M \ $ \textfont 0=\font 15 $}
+\notedatum{5}{18}
+\notedatum{6}{19}
+\expcs\def {xref-s-fontinst}{\S $ \textfont 0=\font 10 $\ on page\penalty \@M \ $ \textfont 0=\font 23 $}
+\expcs\def {xref-bib}{\S {$ \textfont 0=\font 12 $}\ on page\penalty \@M \ $ \textfont 0=\font 25 $}
+\expcs\def{xref-PS}{\n {1}}
+\expcs\def{xref-Berry}{\n {2}}
+\expcs\def{xref-Berry2}{\n {3}}
+\expcs\def{xref-Bien}{\n {4}}
+\expcs\def{xref-KD}{\n {5}}
+\expcs\def{xref-Cork}{\n {6}}
+\expcs\def{xref-GPL}{\n {7}}
+\expcs\def{xref-Hara}{\n {8}}
+\expcs\def{xref-Hart's}{\n {9}}
+\expcs\def{xref-Hart's13}{\n {10}}
+\expcs\def{xref-Hart's30}{\n {11}}
+\expcs\def{xref-Hart's62}{\n {12}}
+\expcs\def{xref-Hart's102}{\n {13}}
+\expcs\def{xref-Hart's120}{\n {14}}
+\expcs\def{xref-Hart's135}{\n {15}}
+\expcs\def{xref-fontinst}{\n {16}}
+\expcs\def{xref-MFbook}{\n {17}}
+\expcs\def{xref-MFApp.F}{\n {18}}
+\expcs\def{xref-TeXbook}{\n {19}}
+\expcs\def{xref-TeXchar}{\n {20}}
+\expcs\def{xref-TeX9}{\n {21}}
+\expcs\def{xref-TeXB4}{\n {22}}
+\expcs\def{xref-TeXD1}{\n {23}}
+\expcs\def{xref-TeXE}{\n {24}}
+\expcs\def{xref-TeXF1}{\n {25}}
+\expcs\def{xref-LaTeX}{\n {26}}
+\expcs\def{xref-lfonts}{\n {27}}
+\expcs\def{xref-NFSS}{\n {28}}
+\expcs\def{xref-ODWE}{\n {29}}
+\expcs\def{xref-ODWEacc}{\n {30}}
+\expcs\def{xref-ODWEcap}{\n {31}}
+\expcs\def{xref-Pei}{\n {32}}
+\expcs\def{xref-nfss-malvern}{\n {33}}
diff --git a/fonts/malvern/doc/maman.fnt b/fonts/malvern/doc/maman.fnt
new file mode 100644
index 0000000000..0adfc6cb8a
--- /dev/null
+++ b/fonts/malvern/doc/maman.fnt
@@ -0,0 +1,32 @@
+ma55a12
+ma55a9
+ma56a12
+ma56a9
+ma75a12
+ma75a9
+ma55a48
+ma75a18
+cmtt10 scaled 1440\relax
+logo10 at 12pt
+ma75a12
+ma55b12
+ma76a12
+ma57a12
+ma53a12
+ma55a10
+ma55a7
+ma56a10
+ma56a7
+ma75a10
+ma75a7
+cmmi7
+cmsy7
+ma55b10
+ma55g10
+ma55g12
+cmtt10 scaled 2074\relax
+ma55c12
+ma55c12
+logosl10 at 12pt
+cmtt10 scaled 1200\relax
+ma75a72
diff --git a/fonts/malvern/doc/maman.idx b/fonts/malvern/doc/maman.idx
new file mode 100644
index 0000000000..700b989d70
--- /dev/null
+++ b/fonts/malvern/doc/maman.idx
@@ -0,0 +1,121 @@
+\idx{Backus--Naur formalism}{2}
+\idx{extended Backus--Naur Formalism}{2}
+\idx{composite letter|idxunderline}{2}
+\idx{base glyph|idxunderline}{2}
+\idx{mark|idxunderline}{2}
+\idx{quotation marks}{3}
+\idx{apostrophe}{3}
+\idx{inverted comma}{3}
+\idx{comma}{3}
+\idx{left quote}{3}
+\idx{quote|idxunderline}{3}
+\idx{backquote|idxunderline}{3}
+\idx{guillemets}{3}
+\idx{Univers}{4}
+\idx{Frutiger, Adrien}{4}
+\idx{Malvern}{4}
+\idx{MS-DOS}{5}
+\idx{font name@\<font name>}{5}
+\idx{size@\<size>}{5}
+\idx{MS-DOS}{5}
+\idx{fontinst@{\tt fontinst}}{6}
+\idx{note}{6}
+\idx{LaTeX2e@\LaTeXe |+}{6}
+\idx{NFSS\vn 2|+}{6}
+\idx{NFSS}{6}
+\idx{LaTeX3@\LaTeX \vn 3}{6}
+\idx{T1fmv.fd@{\tt T1fmv.fd}}{7}
+\idx{MakeTeXPK@{\tt MakeTeXPK}}{7}
+\idx{Jeffrey, Alan}{7}
+\idx{fontinst@{\tt fontinst}}{7}
+\idx{LaTeX2e@\LaTeXe |-}{7}
+\idx{NFSS\vn 2|-}{7}
+\idx{LaTeX2.09@\LaTeX ~\n {2.09}|+}{7}
+\idx{newfont@{\tt \char `\\newfont}}{7}
+\idx{footnotesize@{\tt \char `\\footnotesize}}{7}
+\idx{large@{\tt \char `\\large}}{7}
+\idx{NFSS}{7}
+\idx{Rahtz, Sebastian P.~Q.}{8}
+\idx{malvern.sty@{\tt malvern.sty}}{8}
+\idx{fmvnfss.sty@{\tt fmvnfss.sty}}{8}
+\idx{fmv9nfss.sty@{\tt fmv9nfss.sty}}{8}
+\idx{sc@{\tt \char `\\sc}}{8}
+\idx{size-changing commands}{8}
+\idx{getfont@{\tt \char 92\char 64 getfont}}{8}
+\idx{normalsize@{\tt \char 92\char 64 normalsize}}{8}
+\idx{getfont@{\tt \char 92\char 64 getfont}}{8}
+\idx{fmvpltx.sty@{\tt fmvpltx.sty}}{9}
+\idx{fmv9pltx.sty@{\tt fmv9pltx.sty}}{9}
+\idx{sc@{\tt \char `\\sc}}{9}
+\idx{Malvern~\n {1.0}}{9}
+\idx{note}{9}
+\idx{LaTeX2.09@\LaTeX ~\n {2.09}|-}{9}
+\idx{maamac.tex@{\tt maamac.tex}|+}{9}
+\idx{maamac.tex@{\tt maamac.tex}}{9}
+\idx{note}{9}
+\idx{malvern.tex@{\tt malvern.tex}}{9}
+\idx{pounds@{\tt \char `\\pounds}}{10}
+\idx{cents@{\tt \char `\\cents}}{10}
+\idx{currency@{\tt \char `\\currency}}{10}
+\idx{permille@{\tt \char `\\permille}}{10}
+\idx{yen@{\tt \char `\\yen}}{10}
+\idx{florin@{\tt \char `\\florin}}{10}
+\idx{times@{\tt \char `\\times}}{10}
+\idx{minus@{\tt \char `\\minus}}{10}
+\idx{langle@{\tt \char `\\langle}}{10}
+\idx{rangle@{\tt \char `\\rangle}}{10}
+\idx{cdot@{\tt \char `\\cdot}}{10}
+\idx{bullet@{\tt \char `\\bullet}}{10}
+\idx{Box@{\tt \char `\\Box}}{10}
+\idx{degrees@{\tt \char `\\degrees}}{10}
+\idx{Mc@{\tt \char `\\Mc}}{10}
+\idx{No@{\tt \char `\\No}}{10}
+\idx{orda@{\tt \char `\\orda}}{10}
+\idx{ordo@{\tt \char `\\ordo}}{10}
+\idx{careof@{\tt \char `\\careof}}{10}
+\idx{copyright@{\tt \char `\\copyright}}{10}
+\idx{registered@{\tt \char `\\registered}}{10}
+\idx{trademark@{\tt \char `\\trademark}}{10}
+\idx{old style numerals}{11}
+\idx{ranging numerals}{11}
+\idx{csc@{\tt \char `\\csc}}{11}
+\idx{sc@{\tt \char `\\sc}}{11}
+\idx{mc@{\tt \char `\\mc}}{11}
+\idx{caps@{\tt \char `\\caps}}{11}
+\idx{lc@{\tt \char `\\lc}}{11}
+\idx{sc@{\tt \char `\\sc}}{11}
+\idx{smc@{\tt \char `\\smc}}{11}
+\idx{cmcsc10@{\tt cmcsc10}}{11}
+\idx{O@{\tt \char `\\O}}{11}
+\idx{ae@{\tt \char `\\ae}}{11}
+\idx{maamac.tex@{\tt maamac.tex}|-}{12}
+\idx{encoding|idxunderline}{12}
+\idx{character code|idxunderline}{12}
+\idx{Cyrillic}{15}
+\idx{wncy@{\tt wncy}}{15}
+\idx{Greek}{15}
+\idx{patch level|idxunderline}{18}
+\idx{Wall, Larry}{18}
+\idx{patch@{\tt patch}}{18}
+\idx{mff@{\tt mff}}{18}
+\idx{Jeffrey, Alan}{18}
+\idx{fontinst@{\tt fontinst}}{18}
+\idx{Berry, Karl}{19}
+\idx{note}{19}
+\idx{Greek}{20}
+\idx{note}{20}
+\idx{Jeffrey, Alan}{20}
+\idx{fontinst@{\tt fontinst}}{20}
+\idx{note}{21}
+\idx{fontinst@{\tt fontinst}}{21}
+\idx{Free Software Foundation}{23}
+\idx{distribution}{23}
+\idx{copying}{23}
+\idx{mailing list}{23}
+\idx{bugs}{23}
+\idx{Jeffrey, Alan}{23}
+\idx{foninst@{\tt foninst}}{23}
+\idx{virtual fonts}{23}
+\idx{Cork encoding}{23}
+\idx{New Font Selection Scheme|see{NFSS}}{i}
+\idx{Knuth, Donald E.}{ii}
diff --git a/fonts/malvern/doc/maman.ilg b/fonts/malvern/doc/maman.ilg
new file mode 100644
index 0000000000..d5d67d7e1b
--- /dev/null
+++ b/fonts/malvern/doc/maman.ilg
@@ -0,0 +1,7 @@
+This is makeindex, portable version 2.4 [20-Mar-88].
+Scanning style file makeind.rc........................done (24 attributes redefined, 0 ignored).
+Scanning input file maman.idx....done (121 entries accepted, 0 rejected).
+Sorting entries....done (900 comparisons).
+Generating output file maman.ind....done (284 lines written, 0 warnings).
+Output written in maman.ind.
+Transcript written in maman.ilg.
diff --git a/fonts/malvern/doc/maman.ind b/fonts/malvern/doc/maman.ind
new file mode 100644
index 0000000000..69be61876c
--- /dev/null
+++ b/fonts/malvern/doc/maman.ind
@@ -0,0 +1,284 @@
+\leftline{\bodybi a}
+\smallskip{}
+
+ {\tt \char `\\ae}\ \n{11}
+
+ apostrophe\ \n{3}
+
+\medskip
+\leftline{\bodybi b}
+\smallskip{}
+
+ backquote\ \n{\idxunderline{3}}
+
+ Backus--Naur formalism\ \n{2}
+
+ base glyph\ \n{\idxunderline{2}}
+
+ Berry, Karl\ \n{19}
+
+ {\tt \char `\\Box}\ \n{10}
+
+ bugs\ \n{23}
+
+ {\tt \char `\\bullet}\ \n{10}
+
+\medskip
+\leftline{\bodybi c}
+\smallskip{}
+
+ {\tt \char `\\caps}\ \n{11}
+
+ {\tt \char `\\careof}\ \n{10}
+
+ {\tt \char `\\cdot}\ \n{10}
+
+ {\tt \char `\\cents}\ \n{10}
+
+ character code\ \n{\idxunderline{12}}
+
+ {\tt cmcsc10}\ \n{11}
+
+ comma\ \n{3}
+
+ composite letter\ \n{\idxunderline{2}}
+
+ copying\ \n{23}
+
+ {\tt \char `\\copyright}\ \n{10}
+
+ Cork encoding\ \n{23}
+
+ {\tt \char `\\csc}\ \n{11}
+
+ {\tt \char `\\currency}\ \n{10}
+
+ Cyrillic\ \n{15}
+
+\medskip
+\leftline{\bodybi d}
+\smallskip{}
+
+ {\tt \char `\\degrees}\ \n{10}
+
+ distribution\ \n{23}
+
+\medskip
+\leftline{\bodybi e}
+\smallskip{}
+
+ encoding\ \n{\idxunderline{12}}
+
+ extended Backus--Naur Formalism\ \n{2}
+
+\medskip
+\leftline{\bodybi f}
+\smallskip{}
+
+ {\tt \char `\\florin}\ \n{10}
+
+ {\tt fmv9nfss.sty}\ \n{8}
+
+ {\tt fmv9pltx.sty}\ \n{9}
+
+ {\tt fmvnfss.sty}\ \n{8}
+
+ {\tt fmvpltx.sty}\ \n{9}
+
+ {\tt foninst}\ \n{23}
+
+ {\tt fontinst}\ \n{6}, \n{7}, \n{18}, \n{20}, \n{21}
+
+ \<font name>\ \n{5}
+
+ {\tt \char `\\footnotesize}\ \n{7}
+
+ Free Software Foundation\ \n{23}
+
+ Frutiger, Adrien\ \n{4}
+
+\medskip
+\leftline{\bodybi g}
+\smallskip{}
+
+ {\tt \char 92\char 64 getfont}\ \n{8}
+
+ Greek\ \n{15}, \n{20}
+
+ guillemets\ \n{3}
+
+\medskip
+\leftline{\bodybi i}
+\smallskip{}
+
+ inverted comma\ \n{3}
+
+\medskip
+\leftline{\bodybi j}
+\smallskip{}
+
+ Jeffrey, Alan\ \n{7}, \n{18}, \n{20}, \n{23}
+
+\medskip
+\leftline{\bodybi k}
+\smallskip{}
+
+ Knuth, Donald E.\ \n{ii}
+
+\medskip
+\leftline{\bodybi l}
+\smallskip{}
+
+ {\tt \char `\\langle}\ \n{10}
+
+ {\tt \char `\\large}\ \n{7}
+
+ \LaTeX ~\n {2.09}\ \n{7}--\n{9}
+
+ \LaTeXe \ \n{6}--\n{7}
+
+ \LaTeX \vn 3\ \n{6}
+
+ {\tt \char `\\lc}\ \n{11}
+
+ left quote\ \n{3}
+
+\medskip
+\leftline{\bodybi m}
+\smallskip{}
+
+ {\tt maamac.tex}\ \n{9}--\n{12}
+
+ mailing list\ \n{23}
+
+ {\tt MakeTeXPK}\ \n{7}
+
+ Malvern\ \n{4}
+
+ {\tt malvern.sty}\ \n{8}
+
+ {\tt malvern.tex}\ \n{9}
+
+ Malvern~\n {1.0}\ \n{9}
+
+ mark\ \n{\idxunderline{2}}
+
+ {\tt \char `\\Mc}\ \n{10}
+
+ {\tt \char `\\mc}\ \n{11}
+
+ {\tt mff}\ \n{18}
+
+ {\tt \char `\\minus}\ \n{10}
+
+ MS-DOS\ \n{5}
+
+\medskip
+\leftline{\bodybi n}
+\smallskip{}
+
+ {\tt \char `\\newfont}\ \n{7}
+
+ New Font Selection Scheme\ \n{\see{NFSS}{i}}
+
+ NFSS\ \n{6}, \n{7}
+
+ NFSS\vn 2\ \n{6}--\n{7}
+
+ {\tt \char `\\No}\ \n{10}
+
+ {\tt \char 92\char 64 normalsize}\ \n{8}
+
+ note\ \n{6}, \n{9}, \n{19}, \n{20}, \n{21}
+
+\medskip
+\leftline{\bodybi o}
+\smallskip{}
+
+ {\tt \char `\\O}\ \n{11}
+
+ old style numerals\ \n{11}
+
+ {\tt \char `\\orda}\ \n{10}
+
+ {\tt \char `\\ordo}\ \n{10}
+
+\medskip
+\leftline{\bodybi p}
+\smallskip{}
+
+ {\tt patch}\ \n{18}
+
+ patch level\ \n{\idxunderline{18}}
+
+ {\tt \char `\\permille}\ \n{10}
+
+ {\tt \char `\\pounds}\ \n{10}
+
+\medskip
+\leftline{\bodybi q}
+\smallskip{}
+
+ quotation marks\ \n{3}
+
+ quote\ \n{\idxunderline{3}}
+
+\medskip
+\leftline{\bodybi r}
+\smallskip{}
+
+ Rahtz, Sebastian P.~Q.\ \n{8}
+
+ ranging numerals\ \n{11}
+
+ {\tt \char `\\rangle}\ \n{10}
+
+ {\tt \char `\\registered}\ \n{10}
+
+\medskip
+\leftline{\bodybi s}
+\smallskip{}
+
+ {\tt \char `\\sc}\ \n{8}, \n{9}, \n{11}
+
+ \<size>\ \n{5}
+
+ size-changing commands\ \n{8}
+
+ {\tt \char `\\smc}\ \n{11}
+
+\medskip
+\leftline{\bodybi t}
+\smallskip{}
+
+ {\tt T1fmv.fd}\ \n{7}
+
+ {\tt \char `\\times}\ \n{10}
+
+ {\tt \char `\\trademark}\ \n{10}
+
+\medskip
+\leftline{\bodybi u}
+\smallskip{}
+
+ Univers\ \n{4}
+
+\medskip
+\leftline{\bodybi v}
+\smallskip{}
+
+ virtual fonts\ \n{23}
+
+\medskip
+\leftline{\bodybi w}
+\smallskip{}
+
+ Wall, Larry\ \n{18}
+
+ {\tt wncy}\ \n{15}
+
+\medskip
+\leftline{\bodybi y}
+\smallskip{}
+
+ {\tt \char `\\yen}\ \n{10}
diff --git a/fonts/malvern/doc/maman.tex b/fonts/malvern/doc/maman.tex
new file mode 100644
index 0000000000..7a9c7c653d
--- /dev/null
+++ b/fonts/malvern/doc/maman.tex
@@ -0,0 +1,3246 @@
+% maman.tex -- Top level of Malvern documentation
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-document {
+%%% filename = "maman.tex",
+%%% version = "X",
+%%% date = "pdc 1994.07.20",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family.",
+%%% dependencies = "ma55doc.tex, pdc*.tex, maamac.tex, texnical.tex,
+%%% mabib.tex, and many Malvern fonts",
+%%% }
+
+% This software is available freely but without warranty.
+% See the file 0copying.txt for details.
+
+%{{{ maman.tex
+%{{{ Preamble
+
+%**start of header
+
+\input ma55doc
+\input pdcidx
+\input pdcdcap
+
+%{{{ fonts
+
+\twosidedfalse % change to TRUE for book-style printing, FALSE for 1-sided
+\newif\ifPS \PSfalse % change to TRUE iff have PostScript fonts
+\newif\iflong \longfalse % chnage to TRUE if you want as longer manual
+
+\newfam\cpfam \newfam\xpfam \newfam\rmbfam \newfam\rmcfam \newfam\grfam
+\newfam\rmxfam \newfam\rmsfam \newfam\cyfam
+\def\extrafontsmap{\f{rmb}{ma55b}\f{rmc}{ma55c}%
+ \@\f{rmx}{fmvmq10}\@\f{rms}{fmvm10}%
+ \f{cp}{ma57a}\f{xp}{ma53a}\f{gr}{ma55g}\f{cy}{ma55c}}
+\xfontset{tiny}\extrafontsmap{7}
+\xfontset{small}\extrafontsmap{9}
+\xfontset{note}\extrafontsmap{10}
+\xfontset{body}\extrafontsmap{12}
+\def\\{\macappend\BODYtemplate} \expandafter\\\expandafter{\extrafontsmap}
+\bodyfonts
+%}}} fonts
+%{{{ customize footnotes & environments
+
+\def\footnotetextmark#1{{\rmb#1}}
+\def\footnotenotemark#1{{\rmb#1}}
+\def\TOCentrysubsubsec#1#2#3{}
+
+\def\n#1{$ \textfont0=\font #1 $}
+\mathcode`\.="70AE % make "." in maths mode centred dot
+
+% In the index, references are enclosed in $...$, so
+% we have to change the "encapsulation" macros:
+\def\idxunderline#1{\underline{#1}}
+\def\see#1#2{$ {\rmb \char1 } #1 $}
+
+%%%% \everylines={\smallfonts}
+
+\everybnf={\def\>{{\rmb\char1 }}\def\\{{\rmb\char124 }}}
+
+\def\notepar
+{
+ \smallskip
+ \index{note}
+ \begingroup \it
+ \setbox\parbox=\hbox{\it note}
+}
+\def\endnotepar
+{
+ \smallbreak
+ \endgroup
+}
+
+\def\example
+{
+ \penalty\predisplaypenalty
+ \smallskip \parskip=0pt
+ \obeylines % every line is indented; blank lines ignored
+ \the\everylines
+ \let\end=\linesend
+}
+\def\endexample
+{
+ \smallbreak \global\noindenttrue
+}
+%}}} environment tweaking
+%{{{ full-page Part headings
+
+% if in long mode, part headings omitted.
+\def\BIGmap{\f{rm}{ma55a}\@\f{mf}{logo10}}
+\fontset{big}\BIGmap{48}{56pt}{big}{big}
+\ldfont\hugerm{ma75a72}
+
+\def\part#1%
+{%
+\iflong
+ \advance\partno1
+ \mark{{\thesecno}{\thesecno}}
+ \vfill\eject
+ \iflong \line{} \vfill \fi
+ \begingroup
+ \parskip=0pt \parindent=0pt \hyphenpenalty=10000
+ \bigfonts
+ \rightskip=0pt plus 2em
+ \iflong
+ {\hugerm \thepartno}\bigskip
+ \else
+ \noindent\llap{\thepartno\enspace}%
+ \fi
+ #1 \par
+ \TOCwrite\TOCentrypart{\thepartno}{#1}
+ \counta=\secno \advance\counta1
+ \mark{{\n{\the\counta}}{\n{\the\counta}}}
+ \iflong \headline={\hfil} \footline={\hfil} \eject \fi
+ \endgroup
+\fi
+}
+%}}} full-page part headings
+%{{{ symbol tables
+
+\def\symtabrule#1%
+{%
+ \nointerlineskip
+ \moveleft\leftmargin \hbox
+ {%
+ \vrule height #1 width \dimen0 depth 0pt
+ }%
+ \nointerlineskip
+}
+
+\def\symtab
+{%
+ \noindent$$ % matching $$ is in endsymtab
+ \def\dag{{\rm\char170 }}
+ \let\\=\symtabentry \counta=0
+ \openup1\jot
+ \dimen0\hsize \advance\dimen0\leftmargin
+ \halign to \hsize\bgroup\hskip-\leftmargin
+ \hfil##\unskip\hfil \tabskip=0pt plus 1em minus 0.5em
+ &\quad\tt##\unskip\hfil
+ &&\qquad\hfil##\unskip\hfil&\quad\tt##\unskip\hfil\cr
+ \noalign{\symtabrule{1pt}\medskip}%
+}
+\def\endsymtab
+{%
+ \crcr
+ \noalign{\nobreak\medskip \symtabrule{0.5pt}}%
+ \egroup$$ %% matches $$ in above
+}
+
+\def\symtabentry#1|#2|%
+{%
+ #1&
+ \def\tmp{#2}\expandafter\stripMacro\meaning\tmp
+ \global\advance\counta1
+ \ifnum\counta=3
+ \global\counta=0
+ \def\next{\cr}%
+ \else
+ \def\next{&}%
+ \fi
+ \next
+}
+
+\def\stripMacro#1:->{}
+
+%}}} symbol tables
+%{{{ font tables
+
+%% Code to typeset a font table -- lifted from my testfont.tex
+
+\newcount\tableN
+\newcount\hexcount
+\def\hexdigit#1{\ifcase#1\relax 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}
+
+\def\ntablecr
+{%
+ \cr
+ \noalign{\nointerlineskip}
+ \multispan2\hfill &\multispan{33}\hrulefill
+}
+\def\ntable
+{
+ \medskip
+ \begingroup \openup1\jot
+ \def\\{\char\tableN \global\advance\tableN 1}
+ \def\0##1{&\omit&\sevenrm##1}
+ \halign to \hsize
+ {%
+ \chartstrut\hss##\tabskip=0pt plus 10pt &
+ &\hss##\hss&##\vrule\cr
+ \lower 6.5pt\null
+ &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F
+ \ntablecr
+ \global\tableN=0
+ \ntablelines
+ \crcr
+ }
+ \medbreak
+ \endgroup
+}
+
+\def\ntablelines
+{%
+ \ifnum\tableN<256
+ \let\next\ntablecontinuation
+ \else
+ \let\next\relax
+ \fi
+ \next
+}
+
+\newcount\ntabtmp
+
+\def\ntablecontinuation
+{%
+ % Find out if none of this row are defined by making a horizontal
+ % list of all of them preceeded by a penalty of 1; if any of them
+ % are defined then \lastpenalty will be something other than 1:
+ \setbox0=\hbox{\penalty1
+ \def~{\char\tableN \advance\tableN 1}%
+ ~~~~~~~~~~~~~~~~\global\ntabtmp=\lastpenalty}%
+ % Now set the row in the table iff ntabtmp # 1:
+ \ifnum\ntabtmp=1
+ \global\advance\tableN 16 \let\next=\ntablelines
+ \else
+ \let\next=\ntablecontinuationcontinuation
+ \fi
+ \next
+}
+
+\def\ntablecontinuationcontinuation
+{%
+ \cr
+ \noalign{\nointerlineskip \penalty5000 }
+ & \hexcount=\tableN \divide\hexcount16 \sevenrm\hexdigit\hexcount
+ &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&
+ \ntablecr
+ \ntablelines
+}
+
+\def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}}
+
+%}}} font tables
+%{{{ aux file
+%%
+%% Hacks using the ".aux" file to store information between runs
+%%
+%% This allows cross-references and per-page footnotes.
+%% Normally I don't bother if a document is short enough not to need
+%% cross-references or an index.
+%%
+%% Often TeX must be run twice to get the Xrefs sorted out :-(
+%%
+
+%{{{ xrefs
+
+% Cross-refernces require two passes; one to write the xref
+% to the .aux file with \xreflabel, and one to use the resulting \def.
+% A footnote to the effect that a ref has been omitted is generated.
+% Perhaps this is not a great idea.
+
+\def\xref#1%
+{%
+ \expcs\ifx{xref-#1}\relax
+ \message{Warning: xref (#1) not known; you will need to TeX
+ this file again}%
+ <<{#1}>>%
+ \footnote{{\rm\dag}}{Cross-references in this document are
+ produced automatically. The values of Xrefs are written
+ into a file called \jobname.aux, which is read at the start of
+ the next run of \TeX\ on this file. Unknown Xrefs are replaced with the tag
+ name used within the document, enclosed in guillemets.}%
+ \gdef\xref##1{\expcs\ifx{xref-##1}\relax <<{##1}>>%
+ \else\csname xref-##1\endcsname\fi}%
+ \else
+ \csname xref-#1\endcsname
+ \fi
+}
+
+% #1 -- string of characters -- internal label for this xref
+% #2 -- TeX text -- what is produced by \xref{#1} on subsequent runs.
+\def\xreflabel#1#2%
+{%
+ \edef\tmp{\string\expcs\def{xref-#1}{#2\ on page~\n{\noexpand\folio}}}%
+ \write\auxfile\expandafter{\tmp}%
+}
+
+\def\rcite#1{{\xref{#1}}} % direct reference
+\def\cite#1{[{\xref{#1}\/}]} % parenthetically
+\def\ncite#1#2{[{\xref{#1}\/}, #2]} % with a note
+
+\def\lcite#1% #1 is \\-list macro of cites!
+{%
+ \def\tmplist{#1}%
+ \lop\tmp\tmplist
+ [{\xref\tmp\def\\##1{, \xref{##1}}\tmplist}]%
+}
+
+%}}}
+%{{{ footnotes -- numbered within pages!
+
+% Data accumulated during the previous TeX run is used to
+% number footnotes consecutively within pages. (Obviously
+% this fails when footnotes changed -- but the same applies to
+% xrefs anyway.)
+
+% This is done by keeping two numbers per footnote -- the reference
+% number (increases throughout the document, and is used internally)
+% and the mark number (used in the completed document).
+
+% Before the first footnote on a given page, the mark number is reset to 0.
+% This can't be done by simply assigning it during the output routine
+% because TeX might have set the footnote on the next page just before
+% shipping out the current one. Therefore I keep a list -- call it xs
+% -- of footnotes that were the 1st note on a page during the previous
+% run. Thus xs will be an increasing list starting with 1 (because the
+% 1st footnote in a file is automatically the first on a page!)
+
+% Then the algorithm for each note is to increment the reference
+% number, and check it against head(xs); if it is equal then set the
+% mark number to 1 and xs := tail(xs). Otherwise, it is less than head(xs)
+% hence on the same page as previously, so increment the mark number.
+
+% For efficiency (ha!) xs is represented by \notelisthead (a countdef
+% name, set to head(xs)), and \notelist (a list macro, set to tail(xs)).
+
+\def\notelist{} % set by reading .aux file
+\newcount\notelisthead
+
+\newcount\notemarkcount
+\newcount\noterefcount
+
+\def\note % start a footnote
+{%
+ \global\advance\noterefcount1
+ \ifnum\noterefcount=\notelisthead
+ \ifx\notelist\empty
+ \global\notelisthead=10000
+ \else
+ \glop\tmp\notelist
+ \global\notelisthead=\tmp
+ \fi
+ \notemarkcount=0
+ \fi
+ \global\advance\notemarkcount1
+ \edef\tmp{\string\notedatum{\the\noterefcount}{\noexpand\folio}}%
+ \write\auxfile\expandafter{\tmp}%
+ \footnote{\number\notemarkcount}%
+}
+
+
+% The data in the .aux file is (reference number, folio) pairs
+% This is converted into a list of reference numbers for which
+% the folio is different from the preceeding one, stored in macro
+% \notedatumlastpage.
+
+\def\notedatumlastpage{--!--}
+
+\def\notedatum#1#2%
+{
+ \def\tmp{#2}
+ \ifx\notedatumlastpage\tmp \else
+ \gappend\notelist{#1}
+ \gdef\notedatumlastpage{#2}
+ \fi
+}
+
+%}}} footnotes
+
+\catcode`@=11
+\inputifexists{\jobname.aux}
+\catcode`@=12
+\newwrite\auxfile \openout\auxfile=\jobname.aux
+
+\ifx\notelist\empty
+ \notelisthead=10000 % No footnote data
+\else
+ \lop\tmp\notelist \notelisthead=\tmp % set up notelisthead
+\fi
+%}}} aux file
+%{{{ abbrevs
+
+\def\url#1#2#3#4{(\urlnoparens{#1}{#2}{#3}{#4})}
+\def\urlnoparens#1#2#3#4%
+{%
+ URL {\tt#1:\allowbreak
+ //#2/\allowbreak
+ #3/\allowbreak
+ #4}%
+}
+
+\newif\ifkbnames
+
+% Captions for \topins items
+\newcount\tablecount
+\def\caption#1{\global\advance\tablecount1
+ \medskip\noindent {\bf Table~\n{\the\tablecount}}\quad #1\par}
+
+\def\cmrname#1{{\tt\lowercase{#1}}}
+
+\def\ISO#1{ISO~\n{#1}}
+
+% Use \vn{N} for version number after `\LaTeX' or `NFSS': \LaTeX\vn2e
+% This is because they prefer no space between name and version ID
+% whereas I think there ought to be one.
+\def\vn{~\n}
+\def\LaTeXe{\LaTeX\vn2e\note{Note that `\LaTeX\thinspace\n2\lower0.5ex\hbox{\gr
+ e}' and `\LaTeX\vn2e' are the same thing. The lowered `{\gr e}'
+ is merely an excessively fancy way of saying
+ `e'.}\global\def\LaTeXe{\LaTeX\vn2e}}
+
+\def\texchar#1{\hbox{`{\tt#1}'}}
+\def\oct#1{\hbox{\showmark\'$\it#1$}}
+\def\hex#1{\hbox{\showmark\H\tt#1}}
+
+\def\TUGboat{{\it TUGboat}}
+
+\def\frac#1/#2%
+{%
+ {\rmb\lowercase{#1}/\uppercase{#2}}%
+}
+
+\def\showmark#1% #1 is an \accent command
+{\hbox to 0.5em{%
+ \def\typeImark##1{\char##1\relax}%
+ \def\typeIImark##1{\char##1\relax}%
+ \hss #1{}\hss
+}}
+
+
+\def\marginchar#1%
+{%
+ \vadjust
+ {
+ \moveleft\leftmargin \vbox to 0pt
+ {
+ \vss
+ \hbox to \leftmargin{\bigrm \hss#1\hss\hskip1pc}%
+ }
+ }%
+}
+
+%% Put this LAST!!
+\active\" \append\verbatimplains\"
+\def"#1"{\hbox{\it#1\/}}
+
+
+%}}} abbrevs
+
+\def\package{Malvern~\n{1.2}}
+\def\ttpackage{Malvern-1.2}
+
+%**end of header
+
+%}}} preamble
+%{{{ Introduction
+%{{{ demo
+
+\vfill\eject
+\begingroup \def\line#1{\hbox to \hsize{\kern-\leftmargin #1}}
+\bigrm \baselineskip=52pt plus 1pt
+\line{A\A\AE BCD\DH E\E FG\hfil.,:;`',,``''}
+\line{HIJKL\L MN\NG O\O\OE\hfil?`!`!?}
+\line{PQRST\TH UV\hfil a\a\ae bcd\dh\vd}
+\line{WXYZ\hfil e\e f\/ff\/fi\/fl\/ffi\/fflgh\h i\i}
+\line{-\/-->>\hfil j\j kl\l\vl mn\ng o\o\oe pqrs\ss}
+\line{\copyright\registered\hfil <<--- t\vt\th uvwxy\&z}
+\line{\rbrace\rbrack\char41 \rangle\hfil
+ >\degrees\char42 \trademark\Box \careof \char152\char153
+ \char155 <
+ \hfil \langle\char40 \lbrack\lbrace}
+\line{\spaceskip=0pt plus 1fil
+ \dag\ \ddag\ \P{}\ \S{}\ @\ \#\ \$\ \%\ \&\ \cents\ \pounds\
+ \currency\ \permille\ \yen\ \florin}
+\line{123456\hfil\cdot/+=\times\char175\bullet\hfil\uppercase{1234}}
+\line{7890 \hfil\uppercase{567890}}
+
+\vskip-\prevdepth
+\nointerlineskip
+\vbox to 0pt
+{
+ \vss
+ \centerline{\headingrm 48-pt Malvern 55}
+}
+
+\headline={\hfil}
+
+\eject
+\endgroup
+
+%}}} demo.tex
+
+\part{Introduction}
+
+\iflong
+%{{{ about TeX and LaTeX
+
+\section{About \TeX\ and \LaTeX}
+
+\subsec{How to pronounce `\TeX'}
+
+ The "X" in "\TeX" is intended to stand for a Greek letter chi
+ ({\gr Qq}), which is like the "ch" in Scottish "loch" or German
+ "ach", and is usually pronounced `k' by people whose languages
+ do not include that sound. Therefore `\TeX' should be
+ pronounced either `te"ch"' or simply `teck'. It is *not*
+ pronounced `tecks'.
+
+ Moreover, the lowering of the "E" in "\TeX" is intended to
+ remind us that it stands for epsilon ({\gr Ee}). When it is not
+ possible to print the "E" lowered, \TeX\ should be referred to
+ as `TeX' (but not `Tex' or `TEX').
+
+ ^^{Lamport, Leslie} Lamport suggests that "\LaTeX" might be
+ pronounced `lay-\TeX', `lah-\TeX', or even `lay-teks'! On
+ systems without the capability to exactly reproduce his logo you
+ might try `L\kern-0.2em\raise 0.5ex\hbox{a}\TeX', `La\TeX', or
+ `LaTeX'.
+
+\subsec{\TeX}
+
+ \TeX\ is a powerful and flexible typestting program. It was
+ devised by ^^{Knuth, Donald E.} Donald~E.\ Knuth with the
+ intention of producing with a computer typeset text (including
+ mathematics and complex tables) as good as that of a
+ professionally-produced book. \TeX\ goes to extraordinary
+ lengths to produce optimal line-breaks and correctly aligned and
+ spaced mathematics, in a way in which no DTP program currently
+ does. Because \TeX\ is a free program---that is, anyone can get
+ a copy of the |WEB| code and create a version that runs on their
+ computer---and uses plain text files, it is very widely used for
+ producing documents and exchanging them between different
+ computer systems, especially those containing a lot of
+ mathematical notation.
+
+ Knuth describes \TeX\ in {\it The \TeX book}~\cite{TeXbook}.
+ While this manual lacks the three-level section numbering that
+ computer users are accustomed to, it does describe everything
+ there is to know about \TeX, from writing simple manuscripts to
+ designing macros and producing new formats.
+
+ \TeX\ was designed to be used on a variety of different systems,
+ at a time when the pictorial user-interfaces popular today were
+ still rare. Therefore \TeX\ is entirely text-based: the user
+ feeds \TeX\ a manuscript with typesetting commands embedded in
+ it, produced with a normal text editor. \TeX\ operates in a
+ manner similar to a compiler, converting the textual
+ representation of the document into a compact format called DVI
+ (from `device-independent'), analogous to machine code. The
+ file of DVI information is printed using a separate
+ printer-driver program.
+
+\subsec{\LaTeX}
+
+ \LaTeX\ is a front-end to \TeX, written in \TeX's own macro
+ language. It is often used in an attempt to evade the full
+ complexity of operating with \TeX. Strictly speaking, \LaTeX\
+ is a \TeX\ \dfn{format}, that is, a package of \TeX\ macros
+ compiled into a compact form.
+
+ As the first macro package to offer facilities for automated
+ sectioning, bibliography, and table-of-contents generation,
+ \LaTeX\ has become a very popular way of producing technical
+ documents.
+
+ The standard introduction to \LaTeX\ is {\it\LaTeX: A Document
+ Preparation System}~\cite{LaTeX} by the designer of \LaTeX,
+ ^^{Lamport, Leslie} Leslie Lamport. This book includes a
+ summary of the \LaTeX\ macros, but stops short of describing how
+ to go about augmenting \LaTeX's facilities with new styles and
+ style options.
+
+ At the time of writing, two new versions of \LaTeX\ are under
+ development. \LaTeX\vn3 will be a complete rewrite; in the
+ meantime, \LaTeXe\ will be released as a new standard \LaTeX.
+
+\subsec{Fonts for \TeX}
+
+ The fonts used with \TeX\ documents are described in two parts.
+ The first part, the font metrics (called the TFM file), is used
+ by \TeX\ itself when generating the DVI file. The second
+ describes how the characters are drawn by the printer; it is in
+ a format that depends on the particular font, driver and
+ printer. Common formats for the second part of a font
+ description are GF (`generic fonts' produced by \MF), PK
+ (produced from GF files and used by many printer drivers), VF
+ (composite fonts, that is, fonts formed by combining several
+ other fonts), and \PS\ types~$1$ or $3$ (used on \PS\ printers).
+
+
+ Normally, computer fonts are created from designs drawn on paper
+ at a large size (a cap-height of $100\,\rm mm$, say) and then
+ the outlines of the letters are scanned in by locating points
+ along the curves with a probe (or by scanning the shapes and
+ having a program calculate the outlines from the resulting
+ bitmaps). Normally by the time the font is being scanned, all
+ the design decisions have been taken and the role of the
+ computer operators is merely to produce a faithful rendering in
+ the correct format.
+
+ \MF\ is a program which converts outlines to bitmaps and creates
+ GF files (which contain a bitmap for each glyph). The outlines
+ are described using \MF's own programming language, with a
+ \dfn{character program} for each letter. Traditionally \MF\
+ font design delays some aesthetic decisions until well into the
+ programming stage---in Knuth's example ("\MF\/book", Ch.~$5$),
+ sixteen trial letters "I" are generated with different stem
+ widths so that they can be compared against a sample letter "O".
+
+ \MF\ programs can be arbitrarily complex (although the peverse
+ nature of the \MF\ language ensures that any attempt to be too
+ clever is severely punished). A given program can be used to
+ generate different fonts---light and boldface, for example.
+ Because \MF\ programs know what device the font is being
+ generated for, they can include code intended to make the font
+ digitize well (that is, ensure that the bitmaps resemble the
+ original intention of the designer even on low-resolution
+ devices). The practical upshot of this is that the facilities
+ of the latest fancy formats for other systems (`multiple
+ masters', `intelligent scaling', `hints') were available in \MF\
+ systems years ago, but the programming skill required to use
+ them prevented them from being widely used.
+
+%}}} about TeX and LaTeX
+\fi
+%{{{ Nomenclature
+
+\section{Conventions used in this handbook}
+
+ A distinctive font will be used for examples of literal text
+ such as commands to the computer and the contents and names of
+ text files:
+\begin example
+ |ABCDEFGHIJKLMNOPQRSTUVWXYZ|
+ |abcdefghijklmnopqrstuvwxyz|
+ |0123456789"#$%&@*+-=,.;:?!|
+ |()<>[]{}`'\||/_^~|
+\end example
+ Italic letters are used for the names of some \MF\ variables,
+ for metasyntactic variables, for words mentioned in sentences
+ (such as the word "word" here), and for the titles of books and
+ so on.
+
+ Boldface is sometimes used for \MF\ `sparks'. A bold italic
+ face is used for the first occurence of technical terms.
+
+\subsec{Citations and references}
+
+ Numbers appearing in square brackets (for example, [$1$]) refer
+ the reader to other sources for more information; they are
+ listed in \xref{bib}.
+
+\subsec{Syntax descriptions}
+
+ Occasional syntax descriptions will be given in the usual
+ ^^{Backus--Naur formalism}^{extended Backus--Naur Formalism}
+ (extended BNF, or EBNF): in other words, an extension of the
+ notation described at the start of Chapter~$24$ of the {\it\TeX
+ book} \cite{TeXbook}, `Summary of Vertical Mode'. Syntactic
+ entities are written with angle brackets, thusly: \langle{\it
+ dimen\/}\rangle. The arrow `{\rmb\char1}' is read as `is
+ defined as', and the vertical bar `{\rmb\char124}' as `or'.
+ Literal text is enclosed in quotation marks.
+
+ Square brackets on the RHS of the arrow enclose optional text.
+\iflong
+ As an example, take this definition from Chapter~$24$:
+\begin bnf
+ \<unit of measure> \> \<optional spaces> \<internal unit>
+ \\~\<optional {\tt true}> \<physical unit>.
+
+ \<optional {\tt true}> \> |true| \\ \<empty>.
+
+ \<optional spaces> \> \<empty> \hfil\break
+ \\ \<space token> \<optional spaces>.
+\end bnf
+ Using brackets the first two rules can be replaced by just one:
+\begin bnf
+ \<unit of measure> \> \<optional spaces> \<internal unit>
+ \hfil\break
+ \\~[ |true| ] \<physical unit>.
+\end bnf
+\fi
+ Braces enclose text that may repeated, or rather text which may
+ appear any number of times including zero.
+\iflong
+ For example,
+ \<optional spaces> can be defined as:
+\begin bnf
+ \<optional spaces> \> \{ \<space token> \}.
+\end bnf
+ Or we could rewrite the whole of the above definition of \<unit
+ of measure> as follows:
+\begin bnf
+ \<unit of measure> \> \{ \<space token> \} \<internal unit>
+ \hfil\break
+ \\~[ |true| ] \<physical unit>.
+\end bnf
+\fi
+ There is no conflict with the use of brace tokens in the
+ {\it\TeX book}\/: all such tokens will be written in quotation
+ marks in syntax rules (`|{|' and `|}|' rather then \lbrace\ and
+ \rbrace), and besides, I~will not be referring to brace tokens.
+
+\iflong
+\subsec{Typefaces, founts and fonts}
+
+ In traditional English usage, a \dfn{typeface} (or \dfn{face})
+ is the design of a set of letters, figures and symbols at any
+ size: an abstract concept. A \dfn{fount} is an implementation
+ of a typeface at a particular size; normally this refers to a
+ phyiscal object, such as a set of punches or a phototypesetter
+ film strip. By analogy with "program", I will use "font" for an
+ analagous computer resource, whether it describes a typeface at
+ any size (as a \PS\ scalable font does) or at a particular
+ design size (as \TeX\ fonts do).
+
+\subsec{Italic, slanted, oblique, latin, roman and upright}
+
+ The term \dfn{italic} used to refer to a cursive variation of a
+ typeface. In phototypesetting days, sanserif faces with no
+ italic could have an obliqued form produced using prisms.
+ Generally \dfn{slanted} was used to mean either italic (if
+ available) or obliqued. Nowadays almost all faces are supplied
+ with a slanted form; for sanserif fonts these are inconsistently
+ referred to as "italic" or "oblique". So far as I~know,
+ Computer Modern is the only type family to include three
+ different slanted alphabets---italic, obliqued and so-called
+ `math italic'.
+
+ The word "roman" is used to mean ordinary upright letters, as
+ distinct from italic or bold and the like. I~shall generally
+ distinguish between this use of "roman" and the use of "latin"
+ to refer to the alphabets derived from the alphabet devised for
+ writing the Latin language in classical times, as compared with
+ the Greek and Cyrillic alphabets, for example.
+
+\iffalse
+\subsec{Families and super-families}
+
+ A family is a collection of typefaces, intended to be compatible
+ with each other. For example, the ITC Avant-Garde Gothic family
+ has members such as ITC Avant-Garde Gothic Demi and ITC
+ Avant-Garde Gothic Light Oblique, and Univers has family members
+ (also called variants) like Univers~$55$ and Univers~$48$.
+
+ Most families consist of a few different weights of italic and
+ upright faces. There are a few `super-families', such as ITC
+ Stone, Lucida and Computer Modern, which contain many different
+ variants such as sanserif, typewriter, informal. ITC Stone
+ Sans, ITC Stone Serif and ITC Stone Informal may be viewed as
+ three separate families that were designed together
+ (collectively a `super-family'); or, ITC Stone can be viewed as
+ is a family with Sans Semibold Italic, Informal Italic and so on
+ as faces within it.
+
+ I~personally prefer the `splitter' approach; it keeps the number
+ of names of font variants a document manager needs to know about
+ relatively small, and does not greatly increase the number of
+ family names, because there are very few super-families compared
+ with the enormous number of normal-sized families. It also
+ makes the design of menu-based font-selectors more
+ straightforward. (The names Adobe uses for its fonts indicate
+ that they are `splitters' too.) Unfortunately, \LaTeX\ was
+ designed on the implicit assumption that `sans serif', `slanted'
+ and `caps and small caps' are variants present in *any* family.
+
+ Super-families are an intuitively pleasant concept for
+ classifying fonts, but they are not relevant to any
+ document-processing program I~can think of off the top of my
+ head. That is, given document~$A$ with ITC Stone Serif and Sans
+ and document~$B$ with Palatino and Univers, there's nothing
+ useful that a computer can do with the information that $A$
+ takes all its faces from one super-family and $B$ does not.
+
+\fi % end of iffalse
+\fi % end if iflong
+
+\subsec{Composite letters}
+
+ I will use the phrase \dfn{composite letter} to refer to letters
+ which, regardless of their meaning in their respective
+ languages, are *written* (not necessarily typeset) as one of the
+ letters {\it A}--{\it Z} (called a \dfn{base glyph}) with that
+ addition of some sort \dfn{mark}. Thus composite letters
+ include German umlauts ({\it\"a}, {\it\"o}, {\it\"u}), accented
+ letters in languages like Spanish ({\it\'a}, {\it\'e}, etc.),
+ and special letters like {\it\aa}, {\it\"a} and {\it\"o} in
+ Scandinavian languages.
+
+ As well as marks that go above letters, there are some that go
+ below ({\it\c c}, {\it\a}) and through letters ({\it\l},
+ {\it\o}). Normally it will be useful to distinguish between
+ composite letters with the mark above them and the latter two
+ categories. For example, "\A" is the same height as the letter
+ "A", but if the letter "\AA" is to have the same height as "A"
+ then the base glyph must be shrunk slightly.
+
+\subsec{Hyphens and dashes}
+
+ To prevent confusion, I~shall use the word "dash" to refer only
+ to the en- and em-dash symbols (`--' and `---'), and I~will use
+ the word "hyphen" for hyphens (`-').
+\iflong
+ Hyphens (produced with
+ one ASCII minus sign) are used in English for joining words
+ ("ear-ring", "get-at-able"), to disambiguate a few odd compounds
+ ("re-cover", "co-operate"), and when dividing words at the ends
+ of lines. Short (en) dashes (|--|) are used in joining pairs
+ where there is movement or tension between them ("London--Oxford
+ route", "\n{1980}--\n{85}"). Long (em) dashes (|---|) are used
+ in a similar way to parentheses or a colon.
+\fi
+
+\subsec{Sundry quotation marks}
+
+ In English printing, the ^{quotation marks} are an ^{apostrophe}
+ (') and an ^{inverted comma}---with hot metal typesetting this
+ was a literally a ^{comma} that had been put in place
+ upside-down. In German, a rather more sensible arrangement is
+ used where two commas start quotations, and two inverted commas
+ close them: ,,so``. To prevent confusion, I~shall consistently
+ refer to the character `\,`\,' as an inverted comma rather than
+ `^{left quote}', because it is not always a *left* quotation mark:
+\begin display
+ , & comma & ,, & double comma\cr
+ ` & inverted comma & `` & double inverted comma\cr
+ ' & apostrophe & '' & double apostrophe\cr
+\end display
+ There is some potential for confusion with regards to the ASCII
+ characters `|`|'and `|'|', used by \TeX\ to stand for an
+ inverted comma and apostrophe respectively. ASCII was designed
+ with typewriter-like devices in mind, and |'| was intended as a
+ combined neutral single quotation mark, acute accent and
+ apostrophe, which is not quite the same as \TeX's use for it.
+ Traditional UNIX names for these two characters are \dfn{quote}
+ and \dfn{backquote}.
+
+ When I~am referring to French ^{guillemets}, I~shall use `left
+ guillemet' to refer to the one that points to the left (<<). In
+ French and many other languages, this is used as an opening
+ quotation mark <<\,thus\,>>; in German it is sometimes used as a
+ closing quotation mark >>so<<.
+
+\subsec{How to refer to Malvern fonts}
+
+ The name `Malvern' is spelled as a normal proper noun (no fancy
+ typography is necessary). In English it is pronounced with the
+ accent on the first syllable, with the "a" pronounced as in
+ either "pal" or "pall" (natives of the town it is named after
+ say `*mawl*-v{\rmb\char116 }n', I~tend to pronounce it
+ `*mal*-v{\rmb\char116 }n'). In other languages it may as well
+ be pronounced and declined according to the orthography of the
+ language.
+
+ When describing a particular version of Malvern, convention
+ favours an unbreakable space between name and number:
+ Malvern~$1.1$ is `|Malvern~1.1|' (like Henry~VIII, Occam~$2$,
+ Fortran~$9$X). The same applies to naming members of the
+ Malvern font family (Malvern~$55$, Malvern~$76$) and Malvern
+ font encoding family (Malvern~A, Malvern~B). In the latter case
+ the letters need not be italicized.
+
+%}}} Nomenclature
+%{{{ Numeric style suffixes
+
+\section{Malvern's font names}
+
+%{{{ Univers
+
+\subsec{Numeric style codes}
+
+ The first font family designed as a unit was ^{Univers}. The
+ designer, Adrien Frutiger\index{Frutiger, Adrien}, introduced
+ two-figure codes to describe the different variations, instead
+ of a names like `bold italic' and `light condensed'. For
+ example, the `roman' face is called Univers~$55$, italic
+ Univers~$56$, boldface Univers~$75$ and lightweight condensed
+ italic Univers~$38$. Frutiger has used his system in all his
+ subsequent font families. ^{Malvern} and other new fonts I~make
+ use a similar system.
+
+%}}} univers
+%{{{ Malvern suffixes
+
+\subsec{The style codes used with Malvern}
+
+\xreflabel{s-stylecodes}{\S\thesecno}
+ Just as with Frutiger's system, the first digit gives the weight
+ of the font and the second digit gives the width (in the sense
+ of `{\cp compressed}' vs.\ `{\xp expanded}'), as in the
+ following table:
+\begin table \strut$#$\hfil\quad&#\hfil\qquad&$#$\hfil\quad&#\hfil\cr
+ & \it first digit & & \it second digit\cr
+ \noalign{\smallskip}%
+ 1 & ultra-light (hairline) & 1, 2 & extra expanded \cr
+ 2 & extra-light (thin) \cr
+ 3 & light & 3, 4 & expanded/extended \cr
+ 4 & book (semi-light) \cr
+ 5 & medium & 5, 6 & normal width \cr
+ 6 & demi (semi-bold) \cr
+ 7 & bold & 7, 8 & condensed/compressed \cr
+ 8 & extra-bold \cr
+ 9 & ultra-bold & 9, 0 & extra compressed \cr
+%%%% 0 & black \cr
+\end table
+ The second digit is even for a slanted face, odd for an
+ upright face---so that the italic version of Malvern~$55$ is
+ $56$, and of $19$ is~$10$.
+
+ This in theory gives $90$ styles. The middle odd-numbered
+ weights ($3$, $5$, and $7$) are expected to be the more commonly
+ used ones. Similarly, the three middle widths are expected to
+ be used more often than $1$ and~$9$. The practical upshot of
+ this is (a)~they are more likely to be available as \mc{PK}
+ files and (b)~they are more likely to have had their \MF\
+ programs tested and debugged.
+
+ This system of names only allows one slanted form and cannot
+ distinguish `compressed' from `condensed'. Normally this
+ fine---before Knuth's Computer Modern came along, it was only
+ heretics with \PS\ or phototypesetters without italics available
+ who would resort to obliqued fonts. The \MF\ programs that
+ describe Malvern have the capacity to produce `vertical italic'
+ and obliqued forms, but these are not part of the standard
+ Malvern pantheon. They are *not* intended to be used in normal
+ bookwork.
+%}}} Malvern suffixes
+%{{{ TeX fonts names
+
+\subsec{\TeX\ font names}
+
+\xreflabel{s-font-names}{\S\thesecno}
+ The question now is how to represent these fonts using
+ reasonably portable \TeX\ font names. Recall that only
+ lowercase letters and digits can be used, and that names must be
+ limited to a length that even stupid filesystems like ^{MS-DOS}
+ can handle.
+
+ I~have my own system of external font names of the following
+ form:
+\begin bnf
+ ^\<font name> \> \<family> \<style> \<encoding> \<size>.
+
+ \<family> \> \{ \<letter> \\ \<digit> \} \<letter>.
+
+ \<style> \> \<digit> \<digit>.
+
+ \<encoding> \> \<letter> [ \<letter> ].
+\end bnf
+ Where a \<size> is the design size in points, possibly including
+ `|p|' as a decimal point, or `|m|' to indicate millimetres:
+\begin bnf
+ ^\<size> \> \<points> \\ \<millimetres>.
+
+ \<points> \> \<digits> [ |p| \<digits> ].
+
+ \<millimetres> \> \<digits> |m| [ \<digits> ].
+
+ \<digits> \> \<digit> \{ \<digit> \}.
+\end bnf
+ In the case of Malvern, the \<family> is |ma|. The \<encoding>
+ describes the subset of all the Malvern characters that this
+ font contains---for example |s| is the \TeX\ Text character set.
+
+ Thus $10$-pt Malvern~$55$ with \TeX\ Text encoding is
+ given the name |ma55s10|, which fits nicely into the eight
+ characters allowed by ^{MS-DOS} filenames. More eccentric
+ sizes, like $7\cdot2\pt$ have names like |ma55s7p2| (eight
+ characters) or |ma55s12p5| (nine characters).
+
+ Here's a partial list of encoding codes:
+\begin display
+ \tt a& Malvern A (latin), see \xref{tab-charcodes-a}\cr
+ \tt b& Malvern B (supplement), see \xref{tab-charcodes-b}\cr
+ \tt c& Malvern C (Cyrillic), see \xref{tab-charcodes-c}\cr
+ \tt g& Malvern G (Greek), see \xref{tab-charcodes-g}\cr
+ \tt s& \TeX\ Text \cite{TeXF1}\cr
+ \tt az& \TeX\ Text with old-style numerals\cr
+ \tt aa& \TeX\ Text with small capitals replacing lower case letters\cr
+ \tt ab& \TeX\ Text with old-style numerals and small capitals\cr
+ \tt ar& \TeX\ Extended Text---Latin (Cork) \cite{Cork}\cr
+ \tt as& Cork with old-style numerals\cr
+ \tt at& Cork with small capitals\cr
+ \tt au& Cork with old-style numerals and small capitals\cr
+\end display
+ \xreflabel{tab-encoding-codes}{\S\thesecno}
+
+%}}} TeX fonts names
+%{{{ Berry's scheme
+
+\subsec{Naming Malvern fonts in Karl Berry's system}
+
+ Karl Berry has described a system for naming fonts newly
+ introduced to the `\TeX\ world' \lcite{\\{Berry}\\{Berry2}}. A
+ subset of the Karl Berry's syntax for font names is as follows:
+\begin bnf
+ \<font name> \> |fmv| \<style> \<size>.
+
+ \<style> \> \<weight> \<variant> \{ \<variant> \} [ |r| \\ \<width> ]
+ \hfil\break \\ \<weight> |r| \<width>
+ \hfil\break \\ \<weight>.
+
+ \<weight> \> |t| \\ |i| \\ |l| \\ |k| \\ |m| \\ |d| \\ |b| \\
+ |x| \\ |u| \\ |c|.
+
+ \<variant> \> |i| \\ |9| \\ |o| \\ |u| \\ |q| \\ |c|.
+
+ \<width> \> |x| \\ |c|.
+
+ \<size> \> \<digit> [ \<digit> ].
+\end bnf
+ This definition is incomplete, because the rules governing the
+ order of variant letters and when variant and width letters may
+ be omitted are complicated\iffalse:
+\begin bullets
+\\
+ If \<variant> letters are present, arrange them in alphabetical
+ order.
+\\
+ If there is a \<variant>, and there is no \<width>, and the
+ last \<variant> is a digit or a valid \<width>, then the
+ trailing |r| must be present. Otherwise it must be omitted.
+\end bullets
+\else.\fi
+
+ The \<weight> letters listed above correspond to the first
+ digit's values of $1$, \dots, $9$, $0$. A \<variant> of |i|,
+ |o| or |u| indicates a slanted, obliqued or `upright italic'
+ style instead of upright; |9| is old-style digits; |c| is caps
+ \& small caps; |q| is the Cork encoding (instead of the \TeX\
+ Text encoding). Fonts with |c| or |q| variants have to be
+ created as virtual fonts, using Alan Jeffrey's ^|fontinst|
+ package (\xref{s-fontinst}). Fonts using \TeX\ Text encoding
+ may be generated directly with \MF.
+
+ This gives names like `|fmvm12|' for $12$-point Malvern~$55$,
+ `|fmvdic18|' for Malvern~$68$. Malvern~\n{55} with old-style
+ numerals would be |fmvm9r10|. On the other hand, Malvern~\n{68}
+ with old-style numerals would be `|fmvd9ic10|'---nine
+ characters---and we haven't even specified a base encoding yet.
+
+\ifkbnames\else
+\begin notepar
+ As of October~\n{1994}, the font names standard does not allow
+ for combinations for more than two variants (where `variants'
+ includes encodings and font shape) without breaking the
+ \n8-character limit imposed by stupid filesystems like MS-DOS
+ and ISO~\n{9960}. The only temporary solution I~can offer is to
+ extend the nonstandard `\/{\tt ma}\/-' naming scheme to include
+ encoding codes for the fonts used by plain \LaTeX, NFSS and
+ NFSS\vn2. Therefore `\/{\tt fmv}\/-' names are not used at
+ present.
+\end notepar
+\fi
+
+\xreflabel{s-kb-names}{\S\thesecno}
+
+%}}} Berry's scheme
+%}}}
+%}}} Introduction
+%{{{ Using Malvern
+
+\part{Using Malvern in \TeX\ documents}
+%{{{ LaTeX 2e
+\section{Using Malvern with \LaTeXe\ or NFSS\vn2}
+
+\index{LaTeX2e@\LaTeXe|+}
+\index{NFSS\vn2|+}
+
+\subsec{Background to \LaTeXe}
+
+ The release of the so-called New Font Selection Scheme (^{NFSS})
+ has left the \LaTeX\ world in a slightly confused state, with
+ neither plain \LaTeX\ nor \LaTeX\ augmented with NFSS considered
+ `standard' anymore. This is partly because \LaTeX+NFSS is not
+ quite compatible with plain \LaTeX, so older documents might
+ have to be edited to suit the new system.
+
+ \LaTeX\ version \n3 is intended to put an end to this confusion,
+ but it will be some time before ^^{LaTeX3@\LaTeX\vn3} \LaTeX\vn3
+ is generally available. In the meantime a new, `standard'
+ version has been released, called \LaTeXe. \LaTeXe\ is
+ backwards-compatible with \LaTeX-\n{2.09} documents, using a new
+ syntax to access the newer features.
+
+\subsec{NFSS\vn2}
+
+ \LaTeXe\ includes a new FSS called NFSS\vn2 which uses font
+ family definition ({\tt fd}) files to tell it how to obtain
+ fonts in a given font family and encoding family. For example,
+ a file describing Cork-encoded Malvern is called `^|T1fmv.fd|':
+ "T\n1" is the NFSS\vn2 code for the Cork encoding, and "fmv" is
+ Karl Berry's code for Malvern. Once such an {\tt fd} file is
+ installed, to use Malvern fonts in a document you would use
+ something like the following:
+\begin display
+ |\fontencoding{T1}|\cr
+ |\fontfamily{fmv}|\cr
+ |\selectfont|\cr
+\end display
+ This might go in a document preamble, but normally such changes
+ to the overall look of a document belong in a package.
+
+\subsec{Malvern in NFSS\vn2}
+
+ The Malvern includes a sample set of {\tt tfm}, driver, {\tt vf}
+ and {\tt fd} files so that Malvern should be usable with
+ \LaTeXe\ or NFSS\vn2 without very much effort, both with the
+ \TeX\ Text and Cork encodings (OT$1$ and T$1$). This assumes
+ that
+\begin bullets
+ \\ {\tt dvi} previewers and printer drivers that understand virtual
+ fonts are available;
+ \\ printer fonts (such as {\tt pk} files) will be generated
+ automatically when needed (for example, by invoking a
+ ^|MakeTeXPK| script on UNIX-\TeX\ systems).
+\end bullets
+ These files were generated with ^^{Jeffrey, Alan} Alan Jeffrey's
+ ^|fontinst| package (see \xref{s-fontinst}). They do not
+ include support for italic caps-and-small-caps because there is
+ at present no font-shape name for this combination.
+
+\index{LaTeX2e@\LaTeXe|-}
+\index{NFSS\vn2|-}
+
+%}}} LaTeX 2e
+%{{{ LaTeX/NFSS
+
+\section{Using Malvern with \LaTeX~\n{2.09}}
+
+\index{LaTeX2.09@\LaTeX~\n{2.09}|+}
+
+ In \LaTeX, It is possible to use a font or two in an
+ ad-hoc fashion using the ^|\newfont| command:
+\begin display
+ |\newfont{twlgr}{ma55g12}|\cr
+ |\newcommand{\textgreek}[1]{{\twlgr#1}}|\cr
+\end display
+ Then `|\textgreek{alfa}|' generates `{\gr alfa}'. The problem
+ here is that fonts loaded this way do not change size
+ automatically when commands like ^|\footnotesize| or ^|\large|
+ are used; as a result they will not work properly in footnotes
+ or section headings. They also will not work in maths mode.
+
+\subsec{Using NFSS}
+
+ The so-called New Font Selection Scheme (^{NFSS}) is an
+ extension of \LaTeX~\n{2.09} to make it easier to switch between
+ fonts \cite{NFSS}. The \LaTeX\ system I have access to does not
+ use NFSS, so I~can not test NFSS code and I~do not know how much
+ documentation on adding new fonts is supplied with the package.
+ I have included \index{Rahtz, Sebastian P.~Q.} Sebastian Rahtz's
+ ^|malvern.sty| \cite{nfss-malvern}, and also style files named
+ ^|fmvnfss.sty| and ^|fmv9nfss.sty|\note{"Fmv" is Karl Berry's
+ code for Malvern, and "nfss" distinguishes it from the plain
+ \LaTeX\ version and any \LaTeXe\ version. The digit `$9$' is
+ the Berry code for old style figures.} which are modelled on
+ |malvern.sty|, but which use the fonts included in the Malvern
+ distribution. They do not have support for the ^|\sc|
+ declaration.
+
+\subsec{Making fonts change size without NFSS}
+
+ To make fonts that change size properly requires a style file
+ that reprograms plain \LaTeX's size-changing commands (I~shall
+ refer to \LaTeX\ version~\n{2.09} without NFSS as `plain
+ \LaTeX~\n{2.09}', and to \LaTeX~\n{2.09} with NFSS as
+ \LaTeX~\n{2.09} + NFSS'). To do this requires some knowledge of
+ the way plain \LaTeX's size-changing and font-changing commands
+ work \cite{lfonts}.
+
+ The ^{size-changing commands} like |\normalsize| and
+ |\footnotesize| work by calling internal commands |\|"size"|pt|
+ and |\@|"size"|pt|, where "size" is the type size in points,
+ expressed as roman numerals. For example, in a $10$-pt
+ document, |\normalsize| invokes |\xpt| and |\@xpt| in order.
+ The |\@|"size"|pt| macros are initially defined to expand to
+ nothing. The |\|"size"|pt| macros link font nicknames |\rm|,
+ |\it| etc.\ with real fonts like |\tenrm| or invocations of
+ |\@getfont|\index{getfont@{\tt\char92\char64 getfont}}. The
+ macro |\@getfont| allows some fonts to be loaded on demand
+ rather than preloaded when \LaTeX\ starts up (saving some memory
+ when they are not used). When expanded, |\@getfont| appends
+ assignments to |\@|"size"|pt| that override the definition in
+ |\|"size"|pt|. The practical upshot of this is that |\@getfont|
+ is only invoked the first time the font is referred to;
+ subsequent uses of that font use the assignment added to
+ |\@|"size"|pt|.
+
+ There are two ways to add new fonts to add new fonts to \LaTeX's
+ lists. The quick kludge is to let |\@getfont| do the work. For
+ example, the following code might go in a {\tt sty} file:
+\ifkbnames
+\begin lines
+ |\@getfont{\prm}{0}{\@xpt}{fmvr10}|
+ |\@getfont{\prm}{0}{\@xipt}{fmvr11}|
+ |\@getfont{\prm}{0}{\@xiipt}{fmvr12}|
+\smallskip
+ |\@normalsize|
+\end lines
+\else
+\begin lines
+ |\@getfont{\prm}{0}{\@xpt}{ma55s10}|
+ |\@getfont{\prm}{0}{\@xipt}{ma55s11}|
+ |\@getfont{\prm}{0}{\@xiipt}{ma55s12}|
+\smallskip
+ |\@normalsize|
+\end lines
+\fi
+ This loads the fonts and adds assignments to the |\@|-commands
+ so that they are used in $10$, $11$ and $12$-pt text. It also
+ has unwanted side-effects like changing the size and current
+ font, which are cancelled out by the
+ ^^{normalsize@{\tt\char92\char64 normalsize}} |\@normalsize| at
+ the end.
+
+ A solution that is more efficient if more than a handful of
+ fonts are being changed is to make a copy of |lfonts.tex| and
+ edit it to load Malvern fonts instead of Computer Modern fonts.
+ This approach allows the new fonts to be demand-loaded using
+ ^^{getfont@{\tt\char92\char64 getfont}} |\@getfont| and so on.
+ This is used two sample style files included in the
+ distribution, ^|fmvpltx.sty| and ^|fmv9pltx.sty|.\note{"Fmv" is
+ the code for Malvern in Karl Berry's system, and "pltx" short
+ for `plain \LaTeX'.} They do not include support for the
+ caps-and-small-caps declaration ^|\sc|.
+
+\subsec{Which fonts to use with \LaTeX\ \n{2.09}}
+
+ In the ^{Malvern~\n{1.0}} documentation I~suggested that Malvern
+ fonts with the standardized font names
+ \lcite{\\{Berry}\\{Berry2}} and Cork encoding \cite{Cork} be
+ used with \LaTeX, on the grounds that the Cork encoding is due
+ to become the standard for \LaTeX. Since then the situation has
+ changed a little. The introduction of NFSS\vn2 means that
+ future versions of \LaTeX\ will not be tied down to just one
+ encoding scheme after all. Also, new versions of the
+ font-naming scheme include encoding codes amongst the variant
+ letters, implying that the default is the standard \TeX\ Text
+ encoding.
+
+ It follows that the standard names (starting `{\tt fmv}-')
+ should be used with the standard `\TeX\ Text' encoding when
+ using Malvern fonts with \LaTeX~\n{2.09}, whether with NFSS or
+ not. This way the macros that work with the old encoding (such
+ as |\ae|, |\'|, and the like) will not need to be changed.
+ NFSS~\n2 will take care of redefining these macros when
+ appropriate.
+
+\ifkbnames\else
+\begin notepar
+ As of October~\n{1994}, the font names standard does not allow
+ for combinations for more than two variants (where `variants'
+ includes encodings and font shape) without breaking the
+ \n8-character limit imposed by stupid filesystems like MS-DOS
+ and ISO~\n{9960}. The only temporary solution I~can offer is to
+ extend the nonstandard `\/{\tt ma}\/-' naming scheme to include
+ encoding codes for the fonts used by plain \LaTeX, NFSS and
+ NFSS\vn2. Therefore `\/{\tt fmv}\/-' names are not used at
+ present.
+\end notepar
+\fi
+
+\xreflabel{s-LaTeX-fnames}{\S\thesecno}
+
+\ifkbnames
+ Malvern \n{75} is intended as the boldface counterpart to
+ Malvern~\n{55}, so the font used for \n{10}-pt |\bf| should be
+ |fmvb10| rather than |fmvbrx10|.
+\fi
+
+\index{LaTeX2.09@\LaTeX~\n{2.09}|-}
+%}}} LaTeX/NFSS
+%{{{ plain TeX -- maamac.tex
+\section{Using Malvern with plain \TeX: {\tt maamac.tex}}
+
+\xreflabel{s-maamac}{\S\thesecno}
+ This ^^{maamac.tex@{\tt maamac.tex}|+} section describes a file
+ ^|maamac.tex| of definitions to customize \TeX\ to work with the
+ Malvern~A conventions. It covers roughly the same territory as
+ Chapter~\n9 of the "\TeX book" \cite{TeXbook}, and assumes you
+ have already have macros in place to load Malvern fonts with the
+ Malvern~A encoding \lcite{\\{TeXB4}\\{TeXE}}. At a minimum:
+\begin example
+ |\input maamac|
+ |\font rm=ma55a10 \rm|
+\end example
+
+\begin notepar
+ The file |maamac.tex| (`*Ma*lvern *A* *mac*ros') was formerly
+ called simply ^|malvern.tex|. The new name is intended to be
+ less ambiguous, while still acceptable to file systems with
+ short file names.
+\end notepar
+
+\subsec{Ligatures}
+
+ The letter ligatures "ff", "fi", "fl", "ffi", "ffl" and
+ punctuation ligatures `--', `---', `!`', `?`',
+ `\thinspace``\thinspace' and `\thinspace''\thinspace' work as in
+ Computer Modern. In addition, |fj| produces "fj" and |<<| and
+ |>>| produce the guillemets `<<' and `>>'. Note that you must
+ use `|''|' to stand for a double-apostrophe---with Computer
+ Modern, some people use `|"|', which will not work.
+
+\subsec{Special letters}
+ In addition to the special letters "\oe", "\ae", "\aa", "\o",
+ "\l", "\ss", "\i" and "\j" there are:
+\begin display
+ |\A|&\A&|\a|&\a& Polish "a" with ogonek\cr
+ |\E|&\E&|\e|&\e& Polish "e" with ogonek\cr
+ |\TH|&\TH&|\th|&\th& Icelandic thorn\cr
+ |\DH|&\DH&|\dh|&\dh& Icelandic eth\cr
+ |\NG|&\NG&|\ng|&\ng& Lappish eng\cr
+ |\vd|&\vd&|\vt|&\vt& alternatives to "\v d", "\v t"\cr
+ |\vl|&\vl&|\h|&\h& alternatives to "\v l", "\^h"\cr
+\end display
+ The commands producing composite letters (|\'e| for "\'e",
+ etc.)\ work as before, except that they use different marks on
+ capital letters: "\'E" instead of "\accent8 E"\iflong\space (see
+ \xref{s-composites} for more information)\fi.
+
+\subsec{Sundry symbols}
+
+ The commands |\$|, |\#|, |\%| and |\&| produce `\$', `\#', `\%'
+ and `\&' as in plain \TeX\ (|\$| does not produce a pounds sign
+ `\pounds' in italics).
+ In addition, the commands |\P|, |\S|, |\dag| and |\ddag| produce
+ signs "\P", "\S", "\dag", "\ddag" that come from the current
+ font rather than the mathematical symbol font.
+
+ There are the following additional symbols:
+\begin display
+ ^|\pounds|& \pounds&
+ Pounds-sterling sign\cr
+ ^|\cents|& \cents&
+ Cents sign (alternative to "c")\cr
+ ^|\currency|& \currency&
+ Currency sign\iflong , see \cite{s-currency}\fi\cr
+ ^|\permille|& \permille&
+ Per-mille (per-thousand) sign\cr
+ ^|\yen|& \yen&
+ Japanese Yen sign\cr
+ ^|\florin|& \florin&
+ Florin sign (alternative to italic "f\/")\cr
+\noalign{\smallbreak}%
+ ^|\times|& \times&
+ multiplication sign\cr
+ ^|\minus|& \minus&
+ minus sign\cr
+ ^|\langle|, ^|\rangle|& \langle, \rangle&
+ angle brackets\cr
+ |\{|, |\}|& \{, \}&
+ braces\cr
+ ^|\cdot|& \cdot&
+ raised dot (British decimal point)\cr
+ ^|\bullet|& \bullet&
+ a bullet\cr
+ ^|\Box|& \Box&
+ a ballot box\cr
+ ^|\degrees|& \degrees&
+ degrees sign\cr
+\noalign{\smallbreak}%
+ ^|\Mc|& \Mc&
+ `Mac', as in \Mc{Donald}\cr
+ ^|\No|& \No&
+ `Number' or `numero'\cr
+ ^|\orda|& \orda&
+ feminine ordinal numbers\cr
+ ^|\ordo|& \ordo&
+ masculine ordinal numbers\cr
+ ^|\careof|& \careof&
+ indicates indirect address\cr
+ ^|\copyright|& \copyright&
+ international sign of copyright\cr
+ ^|\registered|& \registered&
+ registered trade mark sign\cr
+ ^|\trademark|& \trademark&
+ trade mark sign\cr
+\end display
+ The inclusion of `\times', `\minus', `\degrees', `\cdot' makes
+ it possible to say `\minus17\cdot6\thinspace\degrees C' or
+ `50\thinspace mm \times\ 100\thinspace mm' without using maths
+ mode (and therefore in the current font). The symbols that are
+ named the same as mathematics symbols in plain \TeX\ use
+ |\ifmmode| so that they can use the plain \TeX\ definition in
+ formulas and the Malvern character in horizontal mode.
+
+\subsec{Old-style and ranging numerals}
+
+ By default, ^{old style numerals} are used: 0123456789. These
+ are for use in non-technical text, where old style numerals are
+ usual when using serif fonts. To get ^{ranging numerals}
+ $0123456789$ use one of:
+\begin display
+ |$0123456789$|\cr
+ |$\textfont0=\font 0123456789$|\cr
+ |\uppercase{0123456789}|\cr
+ |\caps{0123456789}|\cr
+\end display
+ The switch to ranging numerals in mathematics mode reflects the
+ assumption that mathematics mode is mainly used in documents
+ with technical content (besides, old style numerals look wrong
+ in anything but the simplest formulas). Normally a given
+ document should not use both styles---which implies that if you
+ are using formulas then all numerals in the manuscript must be
+ encosed in mathematics delimiters.
+
+\xreflabel{s-ranging}{\S\thinspace\thesecno}
+
+\subsec{Small captials}
+
+ The following macros do not work in \TeX's mouth, meaning that
+ they will not have the intended result when expanded in an
+ |\edef|, for example\iflong
+ \space (see \xref{s-alphabets} for more
+ information)\fi.
+\begin display
+ |\sc{ABC\DH}|&\sc{ABC\DH}&
+ Even small capitals\cr
+ |\mc{ABC\DH}|&\mc{ABC\DH}&
+ Medium capitals\cr
+ |\csc{ABC\DH abc\dh}|&\csc{ABC\DH abc\dh}&
+ Caps and small caps\cr
+ |\caps{ABC\DH abc\dh}|&\caps{ABC\DH abc\dh}&
+ All-capitals\cr
+ |\lc{ABC\DH abc\dh}|&\lc{ABC\DH abc\dh}&
+ Lower case\cr
+\end display
+ ^^|\csc| ^^|\sc| ^^|\mc| ^^|\caps| ^^|\lc| For example, I set my
+ postcode with `|\sc{OX1~3QD}|' to get `\sc{OX1~3QD}', and I can
+ write `\csc{PostScript}' with `|\csc{PostScript}|'. Because the
+ small capital alphabets are included in all styles, we can write
+ `|\csc{\it Fred}|' to get `\csc{\it Fred}', and even produce the
+ \LaTeX\ logo in italics: {\it\LaTeX}. Note that these macros
+ work differently from the ^|\sc| or ^|\smc| declarations in
+ \LaTeX\ and other formats, which switch to ^|cmcsc10|, a
+ separate caps-and-small-caps font.
+
+ The last two transliterate into capitals and lower case---the
+ differences between these macros and the |\uppercase| and
+ |\lowercase| primitives are:
+\begin bullets
+ \\ |\caps| and |\lc| (and all the others) make assignments, and so
+ can not be expanded in \TeX's mouth; and
+ \\ |\uppercase| and |\lowercase| do not affect letters like {\it\O}
+ and {\it\ae} when they are produced with control sequences (like
+ ^|\O| and ^|\ae|).
+\end bullets
+ The practical upshot is that the primitives are useful when
+ implementing strange macros involving creating control sequence
+ names on the fly etc.\ and for introducing strange characters
+ into definitions, whereas to produce an all-capitals headline
+ (or whatever), the macros are better.
+
+ ^^{maamac.tex@{\tt maamac.tex}|-}
+
+%}}} plain TeX -- maamac.tex
+\iflong
+\input texnical
+\fi
+% \input ldfontsdoc
+
+%}}} Unsing Malvern
+\iflong
+%{{{ Implementing Malvern
+
+\part{Implementing Malvern}
+
+\iffalse % This section largely superceeded by the installation summary
+%{{{ organization of the files
+\section{Organization of the files}
+
+ The implementation of Malvern is split into several files. The
+ file |ma.mf| is the `root' file, also called the generic driver
+ file. This reads in |makit.mf| (a collection of macros which
+ describe various pieces of letters), |maparams.mf| (which sets
+ most of the {\it ad hoc} parameters, and |maencode.mf| (which
+ describes the character encoding to be used), before reading in
+ the program files (which contain `character programs' which
+ actually produce the glyphs) and producing the ligature table.
+
+\subsec{The generic driver file}
+
+ The difference between my generic driver file and a driver file
+ like |cmbx12.mf| is that it must have certain variables given
+ values before it is read. At the very least the internal
+ \MF\ variable $designsize$ (set with the {\bf font\_size}
+ macro) should have a value. Other variables can be given values
+ to signal to the driver to produce a font other than roman (with
+ the \TeX\ text encoding):
+\begin table $#$\hfil
+ & \quad\vtop{\hsize=0.75\hsize \noindent#\strut\smallskip}\hfil\cr
+weight & Controls the average thickness of the strokes that make up the
+ letterforms. A value of $1$ means the normal weight, $1\cdot5$
+ is bolder, $0\cdot75$ is lighter.\cr
+hratio & Horizontal ratio: controls the average width of the characters.
+ The shapes of the characters will be squeezed or expanded (as if
+ by a |xscaled| transform) but the thickness of strokes will
+ remain the same. This is used to obtain compressed or expanded
+ fonts.\cr
+slant & The transform `slanted $slant$' is catenated to
+ $currenttransform$, so that all the glyphs are obliqued.
+ Normally only non-zero if $italicness$ is defined and
+ nonzero.\cr
+italicness & A number from $0$ to $1$, where $1$ represents an italic
+ font (some letters are drawn in a more flamboyant manner) and
+ $0$ a roman font.\cr
+encoding & An integer, used to select one of a set of character
+ encodings for the font (see \xref{s-encoding}).\cr
+\end table
+ If these are left unknown, then $weight$ and $hratio$ default to
+ $1\cdot0$ (medium, normal width), $slant$ and $italicness$
+ default to $0$ (upright) and $encoding$ defaults to $0$ (the
+ standard \TeX\ encoding).
+
+\subsec{Creating a font}
+
+ The procedure for creating Malvern fonts is not much different
+ from normal \MF\ fonts. Normally the \MF\ program
+ is run with a `first line' (after the `|**|' prompt) along the
+ lines of
+\begin example
+ |\mode=...; font_size 10pt#; weight=1.4; input ma; bye|
+\end example
+ This produces files called something like `|ma.tfm|' and
+ `|ma.200gf|'. These generic file names must be changed to
+ `|ma65s10.tfm|' and `|ma65s10.200gf|', say, and the |gf| file
+ might need to be converted into a different format used by the
+ printer driver (for example, |GFtoPK| might be used to create a
+ file `|ma65s10.200pk|').
+
+\subsubsec{Automating this process with {\tt mff}}
+
+ This is altogether too much bother, especially if, like me, you
+ must produce fonts on demand rather than installing a large
+ number of them once and for all. I~use a small UNIX program
+ |mff| which does all the above automatically: it deduces the
+ values for the parameters $weight$ etc.~from the font name. The
+ command
+\begin example
+ |mff ma65s10|
+\end example
+ will do all the above automagically. (The tables used to parse
+ the font name are described in a file |mff.rc| shipped with the
+ \MF\ files, and also allow the use of names in Karl
+ Berry's font-naming scheme, such as `|fmvd10|'.)
+
+ The |mff| is intended to be useful for maintaining any family of
+ \MF\ fonts, not just Malvern\allowbreak---I~use it for all my
+ fonts. It should be available from the same source that
+ you obtained Malvern itself (the current version is $2.9$).
+
+\subsubsec{An alternative approach using less-generic driver files}
+
+ It is possible to avoid having to type such long commands to
+ \MF, at the expense of having many more small files lying
+ about. The setting of parameters is performed by small driver
+ files along these lines:
+\begin lines
+ |% fmvd.mf -- generic driver for demibold Malvern|
+\smallskip
+ |weight := 1.4; % demibold|
+ |encoding := -200; % Cork TeX Extended Text -- Latin |
+ |input ma|
+ |bye|
+\end lines
+ Then the command line to \MF\ is reduced to
+\begin example
+ |\mode=localfont; font_size 10pt#; input fmvd|
+\end example
+ (The files produced by \MF\ will now have names starting
+ `|fmvd.|', and will still need to be renamed.)
+
+ This can be taken one step further, by having driver files for
+ every font, thus |fmvd10.mf| would contain just the line
+ `|font_size 10pt#; input fmvd|'. Then the basename of the |.mf|
+ file is the same as that which the font is to be installed as.
+ (This is less of an advantage than it might at first seem,
+ because installing a font normally requires moving it into a
+ different file area, and therefore a renaming operation.)
+
+\subsubsec{Automating the process with {\tt MFjob}}
+
+ The program |MFjob| is part of em\TeX, a public-domain \TeX\
+ distribution for IBM PS/$1$s and PS/$2$s. It has the capacity
+ to generate use driver files in the style of |fmvd.mf| above to
+ create fonts at arbitrary sizes.
+
+%}}} organization
+\fi
+%{{{ file names
+\section{File names}
+
+ \MF\ source files for Malvern have names starting with with
+ `|ma|' (for "Malvern"). I have tried to choose names that fit
+ in with MS-DOS's lamentable naming conventions.
+\begin table \tt#\hfil&&\quad#\hfil\cr
+ ma.mf& Top-level generic driver file\cr
+ maaenc.mf& Malvern A encoding description\cr
+ mabenc.mf& Malvern B encoding description\cr
+ macenc.mf& Malvern C encoding description\cr
+ macy.mf& Malvern Cyrillic\cr
+ madenc.mf& Malvern D encoding description\cr
+ maencode.mf& Malvern encoding vectors\cr
+ mafigs.mf& glyph programs for numerals\cr
+ magenc.mf& Malvern G encoding description\cr
+ maglcaps.mf& glyph programs for Greco-latin capital letters\cr
+ magrcaps.mf& glyph programs for Greek capital letters\cr
+ magrlc.mf& glyph programs for Greek lower case\cr
+ makit.mf& macro definitions\cr
+ malc.mf& glyph programs for lower case\cr
+ malcco.mf& glyph programs for lower case Composite-Only\cr
+ malcnc.mf& glyph programs for lower case Non-Composite\cr
+ mamarks.mf& glyph programs for marks for making composites\cr
+ maparams.mf& computing the ad-hoc paramters\cr
+ mapunct.mf& glyph programs for punctuation\cr
+ masenc.mf& \TeX\ Text encoding description\cr
+ masyms.mf& glyph programs for miscellaneous symbols\cr
+\end table
+%}}} file names
+\iffalse
+%{{{ macro conventions
+\section{Conventions for macros that draw letters}
+
+ Definitions for macros that draw letters are written so that
+ they may be used to draw that letter in an position---for
+ example, so that the program for `c' may be used in drawing
+ `\copyright'.
+
+ By convention the header for letter "a" looks like:
+\begin display
+ |vardef draw_|"a"|@#(expr l, b, r, t, bl)|"other parameters"| =|
+\end display
+ Where $(l, b)$ is the bottom left and $(r,t)$ the top right
+ corner of the cell in which the glyph will be drawn, and $bl$ is
+ the $y$-value of the baseline. All should be whole numbers.
+ For a normal letter, they are |(l, -d, r, h, 0)|. The "other
+ parameters" are parameters specific to the letter itself: for
+ example, giving the relative distance between certain features
+ within the letter.
+
+%}}} macros conventions
+\fi
+
+\iflong
+\input encoding
+\fi
+% \input multiple
+
+%}}} Implementing Malvern
+%{{{ About Malvern
+
+\part{About Malvern}
+
+%{{{ design
+\section{The design of the Malvern font}
+
+ This section describes some of the design decisions made for
+ Malvern---this may not be strictly relevant to most people's use
+ of it. I~will start with general, overall style and then
+ continue to more specific details.
+
+ My main motivation for developing Malvern was that I~was that
+ I~do not use \TeX\ exclusively for technical documents.
+ I~produce leaflets, booklets and magazines in
+ non-scientific fields, where the determinedly old-fashioned
+ appearance of Computer Modern would jar terribly. These were
+ the sorts of situations where the simplicity and informality of
+ a sanserif font would be best suited.\note{Americans seem to be
+ more frail than Europeans when it comes to reading sanserif
+ text. It is true that serif faces---particularly oldstyle and
+ transitional faces---are more readable in continuous text, but
+ the difference is not so great as to override all other design
+ considerations. (The United States is noted for its addiction
+ to Bodoni, which is neither particularly readable nor
+ particularly legible, and is ugly besides.) Perhaps this
+ handbook is rather long to be set all in sanserif; I~hope that
+ not too many readers will be struck blind as a result, and that
+ they will allow that it is reasonable for the handbook to act as
+ a showcase for the typeface it describes.}
+
+%{{{ types of sanserif
+\subsec{Types of sanserif font}
+
+ One way of sub-dividing sanserif fonts is into the four flavours
+ \dfn{grotesque}, \dfn{humanist}, \dfn{geometric} and
+ \dfn{neo-grotesque}. While these are not cut-and-dried
+ divisions (there are many faces with a flavour all their own),
+ they can be a useful approach to thinking about the design of
+ typefaces.
+
+\subsubsec{Grotesque}
+
+ The grotesque styles were created during the Victorian period,
+ when poster printers out-did each other in combining as many
+ different typestyles as possible (one of many examples of how
+ the Victorians, who considered themselves the acme of civility
+ and good taste, exhibited terrible taste). They were so dubbed
+ because contemporary designers thought they were horribly ugly.
+ Today `grotesque' is simply a label, and has no more inherent
+ meaning than `modern' or `dutch' do when applied to serif
+ styles. Computer Modern Sans Serif is derived from Computer
+ Modern in the same way that grotesque fonts were derived from
+ the modern fonts (variations on Bodoni) of the time, so it might
+ be described as a grotesque.
+
+\subsubsec{Humanist}
+
+ The humanist styles emerged from the calligraphy revival of the
+ early twentieth century. They reflected the new emphasis on
+ carefully-crafted letter-shapes and proportions embodied in
+ Edward Johnston's Foundational Hand. Gill Sans and Johnston's
+ Underground Font---used in all London Regional Transport---are
+ examples.
+
+\subsubsec{Geometric}
+
+ The Bauhaus movement in $1930$s Germany gave rise to geometric
+ styles, in which the letter-shapes were progressively simplified
+ and unified, producing alphabets composed of arcs of circles and
+ straight lines, with many letters sharing components.
+ Latter-day geometric styles retain the appearance of being
+ constructed with ruler and compass, but incorporate subtle
+ shadings and distortions that allow for optical illusions and
+ distortions due to printing technology. ITC Avant Garde Gothic
+ is an example of a geometric font.
+
+\subsubsec{Neo-Grotesque}
+
+ Finally, neo-grotesques are more refined descendants of the
+ original grotesque typefaces. Neo-grotesque designs emphasize
+ legibility and uniformity of design. Their function is to
+ deliver the text of a message to the reader in as unobtrusively
+ as possible---they are ideal for signs, where legibility is of
+ paramount importance (more important than readability, for
+ example). The British Rail Alphabet---used in airports and the
+ like as well as BR itself---and the ubiquitous Helvetica are
+ neo-grotesque designs.
+
+%}}} types of sanserif
+%{{{ what flavour is Malvern?
+\subsec{What flavour is Malvern?}
+
+ When designing Malvern, I~was aiming for a mixture of geometric
+ and humanist features. I~have always liked the look of humanist
+ faces like Johnston's Underground Font. They are described as
+ crude, but I~think that this gives them more character than the
+ refined and refined neo-grotesques: Helvetica is a very
+ well-designed typeface, but text set in Helvetica looks boring.
+ I~wanted a face that was appealing to read in itself.
+
+ At the same time I~wanted to make a typeface that was simple and
+ elegant, without (apparant) variation in stroke width and with
+ an emphasis on rounded shapes (I~particularly wanted to have a
+ circular `O'). Since this was my first attempt to design a
+ typesetter font it seemed sensible to aim for character and
+ simplicity rather than sophistication.
+
+%}}} what flavour is Malvern?
+%{{{ global design features
+\subsec{Global design features}
+
+ There is one feature of Malvern that I~based on the Johnston
+ Underground Font, which is that the bowls and arches of letters
+ join the stems at a large angle, rather than curving toward a
+ tangent with the stem:
+\begin display
+ \font\sf=cmss17 scaled \magstep1\sf bpnu&
+ \ifPS \font\sf=phvr at 18pt \sf bpnu& \fi
+ \headingrm bpnu \cr
+ \noterm CMSS\n{17}&
+ \ifPS \noterm Helvetica& \fi
+ \noterm Malvern \n{65}\cr
+\end display
+ As well as forming a nice, uncluttered shape, this avoids having
+ to narrow the width of the stroke to avoid dark spots. (A
+ fortuitous side-effect is that these joins have a good chance of
+ digitizing well at low resolutions.)
+
+ Malvern has rounded terminals---that is, the ends of the strokes\marginchar{nb}
+ are rounded rather than squared off. Together with the lack of
+ tapering at curve joins, this means that Malvern looks as if it
+ were drawn with a circular pen. All this makes Malvern rather
+ easier to implement than most typefaces would be, because \MF\
+ has built-in operators to produce just such an effect. This was
+ not the reason for choosing to make Malvern look this way,
+ although it did affect my decision to make a stab at producing
+ Malvern rather than some other typeface.
+
+%}}} global design features
+%{{{ currency sign
+
+\subsec{The ISO currency symbol}
+
+ The symbol `\currency' is the \ISO{646} currency symbol. It
+ takes the place of the dollar sign in position \n{36} of the
+ \ISO{646} character encoding (which is the international
+ standard equivalent of ASCII). Thus, in theory, non-Americans
+ should all use \currency\ instead of \${}, and it should stand
+ for the local currency. (It has been used in some Scandinavian
+ countries at least: I~remember a book on \mc{BASIC} which had
+ \mc{A\currency\ = CHR\currency}($13$) instead of \mc{A\${} =
+ CHR\${}}($13$)).
+
+ Most fonts I~have encountered which have a `\currency'
+ character\marginchar{\currency} draw it as a small circle with
+ the four `ears' at right angles to each other: a small, square,
+ symbol that floats above the baseline like a binary operator.
+ My design is unusual, but I~prefer it, because is is the same
+ approximate size as other currency symbols (and looks like it
+ belongs in the font).
+
+\xreflabel{s-currency}{\S\thesecno}
+
+%}}} currency sign
+%{{{ odd symbols
+
+\subsec{Sundry oddly shaped symbols}
+
+ With some symbols, like the the per-cent sign, I have
+ deliberately ignored their origins, so `\%' does not much
+ resemble `$0/0$' or `\frac0/0', `\S' does not look much like two
+ `s's stacked on top of each other, and `\pounds' does not look
+ much like a script letter "L". This is partly in recognition of
+ the fact that they have long since been used as symbols in and
+ of themselves, and the link to their origins is weak.
+
+ So `\%' has similar proportions to other currency-like
+ signs\marginchar{\%\S{}} (\${}, \yen, \P, and the like), while
+ still having two generously-sized, circular rings. (My first
+ reaction to CM Typewriter was `How can I change that per cent
+ sign?') The crooked design for the section sign `\S{}' was
+ partly an attempt to ensure that the lines met at large angles,
+ to avoid blots without making it a taller character than the
+ dollar sign.
+
+%}}} odd symbols
+%}}} design
+%}}} About Malvern
+\fi
+%{{{ Appendix
+\part{Appendix}
+
+%{{{ encoding
+
+\section{The encoding of Malvern fonts}
+
+
+ An \dfn{encoding} for a computer font is a mapping from a
+ \dfn{character code} (a nonnegative integer less than
+ $256$) to characters in the font. (Encodings are like the `code
+ pages' defined by ISO standards such as $646$ and $8859$.)
+ Unlike \PS, any given \TeX/\MF\ font has its encoding hard-wired
+ into it, because characters are always referred to by code.
+
+ This section discusses some general aspects of \TeX\ font
+ encodings, and some `standard' font encodings, before describing
+ the Malvern font encodings. The encoding used is reflected in
+ the external name of the font (see \xref{s-font-names}).
+
+\iflong
+%{{{ in put != output
+
+\subsec{Input and output encodings need not be the same}
+
+\xreflabel{s-input-output}{\S\thesecno}
+ For the purposes of this handbook, we shall only need to discuss
+ the encodings of fonts produced with \MF\ to be used to typeset
+ pages produced by \TeX. The encoding used to interpret the
+ characters used as input to \TeX\ is usually different, because
+ it is usually dictated by what symbols the computer keyboard has
+ printed on its keys and how they are displayed on the screen,
+ whereas the encodings of fonts referred to by \mc{DVI} files
+ suffer no such restriction.
+
+ In fact, the encoding used for \TeX's output fonts need have *no
+ connection whatever* to the ASCII character set. This is
+ important, because good typesetting requires glyphs like `fi',
+ `\thinspace``\thinspace', `\S{}' and the like that do not exist
+ in the ASCII\ or \ISO{8859} characters sets (instead they have
+ characters like `{\rmb\char34 }' and `{\rmb\char94 }' which are
+ not of use in fine printing, except when simulating a computer
+ or typewriter).
+
+ In practice, the (assumed) input encoding and the encoding of
+ latin text fonts will have a common sub-encoding, because it is
+ so much easier if we arrange that the code of common characters
+ is the same as the code of the corresponding character in \TeX's
+ internal encoding. Thus `A', say, has encoding $65$ in text
+ fonts, matching the character `|A|' in position $65$ of ASCII.
+
+%}}} input != output
+%{{{ tex text
+
+\subsec{The \TeX\ Text encoding}
+
+ The encoding used for the Computer Modern text fonts is simply
+ called `\TeX\ Text' \cite{MFApp.F}, which has two
+ variations, `\TeX\ Typewriter Text' and `\TeX\ Text without
+ f-ligatures' (if changing the dollar sign into a pounds-sterling
+ sign in \mc{CM} Text-Italic is not counted as a different
+ encoding). The first two of these are displayed in Appendix~F of
+ the {\it\TeX book}.
+
+ Knuth stresses that other \TeX\ fonts might have different
+ conventions (addressed with different macros), so perhaps the
+ use of `\TeX' rather than `Computer Modern' in those names
+ should be interpreted as a historical artefact from the days
+ when \TeX\ and Computer Modern were almost synonymous. (Calling
+ them `CM Text', `CM Typewriter Text' etc.~would not have
+ prevented non-CM fonts from using the CM conventions, of
+ course.)
+
+ The \TeX\ Text encodings were devised when many programs in the
+ \TeX/\MF\ system limited fonts to $128$ characters, and so it
+ only uses the first $128$ codes. As well as the capital and
+ lowercase alphabets, ranging figures and usual punctuation and
+ symbols, it includes the ligatures used in Englsh-language
+ typesetting ("fi", "ffl", etc.), marks to make composite letters
+ with, and the uppercase ^{Greek} letters that do not have
+ similar Latin letters: {\gr G}\negthinspace, {\gr D},
+ \dots\thinspace, {\gr W}.
+
+ It lacks the Polish ogonek mark (\showmark\ogonek\enspace) used
+ to make "\A", "\E", "\a" and "\e";\note{And Lithuanian "\ogonek
+ i" and "\ogonek u" \cite{Pei}?} guillemets (the quotation marks
+ << and >>); pounds-sterling and a few other currency-sign-like
+ symbols (like "\yen" and "\P{}").
+
+
+ Malvern fonts named using \index{Berry, Karl} Karl Berry's
+ standard short font names (|fmv|\dots) use this encoding if no
+ other encoding is specified.
+
+\medskip
+
+ {\rms \ntable}
+\medskip
+\noindent
+ Notes:
+\smallskip
+\halign
+{#\hfil\quad&\hfil#&\quad\hfil#&\quad#\hfil\cr
+ \oct{000}--\oct{012}&\hex{00}--\hex{0A}&$0$--$10$&
+ non-latin Greek letters\cr
+ \oct{022}--\oct{030}&\hex{12}--\hex{18}&$18$--$24$&
+ marks for composite letters\cr
+ \oct{040}&\hex{20}&$32$&
+ slash that makes "\l" and "\L"\cr
+}
+
+%}}} tex text
+%{{{ Cork
+
+\subsec{The Cork encoding}
+
+ A new proposed standard encoding is described by Michael
+ Ferguson \cite{Cork}. I shall refer to this as the Cork
+ encoding, because it was devised at the \TeX\ users conference
+ held in Cork in September~$1990$. I~think that it is intended to
+ be used as \TeX's internal encoding as well as for `standard'
+ text fonts.\note{\TeX\ converts documents from the local
+ character set to its own as the first stage of the parsing
+ process---normally the local character set is ASCII, the same as
+ \TeX, so this stage is transparent. The advantage of extending
+ \TeX's internal encoding to include composite letters, assuming
+ \TeX\ is configured properly, would be that the code for
+ `{\tt\accent'23 e}' on a user's keyboard would be transformed
+ into the code for `\'e' in the Cork encoding. The disadvantage
+ of using the same encoding for \TeX's internal representation of
+ the input file and in the DVI file is that it requires the \MF\
+ fonts to match ASCII for codes $33$--$126$ (|'|, |-| and |`| are
+ each used in ASCII to stand for several different symbols, so
+ the match can't be exact). It also requires the input encoding
+ to include characters like `ffl', which are of little or no
+ utility in a computer character set. I feel it would make more
+ sense to have two encodings.} The Cork encoding includes a large
+ number of composite letters (all those of \ISO{8859/1} and
+ \ISO{8859/2}), so that most European languages can be typeset
+ without using the |\accent| primitive (Esperanto and some
+ European languages are not covered; and it lacks the dotted
+ consonants used when setting Irish in the traditional Celtic
+ alphabet, and dotted/underlined letters used in transliterating
+ Arabic).
+
+ It also includes a duplicate hyphen, and the \dfn{compound word
+ mark} (cwm), an invisible character. The point of cwm is to
+ allow the breaking of ligatures; in a language like German where
+ the `fl' ligature is sometimes used but is incorrect if the `f'
+ ends a syllable, this would be written as |f^^Wl| (or a control
+ sequence expanding to this).
+
+ The duplicate hyphen is intended as a kludge to cope with the
+ fact that \TeX\ will not break words containing hyphens except
+ at the hyphens, even if those hyphens are really part of a dash
+ ligature. The relevant paragraph of the article\note{`It
+ includes both a ``dash'' and an explicit ``hyphen char''. This
+ capability allows font designers the option of replacing the
+ ``-'' with an ``='' without losing the dash. Since the ``-'' is
+ no longer the hyphen char, it allows words with explicit dashes,
+ such as INRS-T\'el\'ecommunications[,] to be hyphenated.'} is
+ unclear because Ferguson uses `dash' without specifying whether
+ he includes hyphens as dashes. My guess is that the hyphen and
+ its duplicate are expected to both look the same, and that they
+ intend that \TeX\ normally be set up to hyphenate with character
+ $45$ as usual. People who want to treat hyphens as a normal
+ letter character will set |\hyphenchar| to the duplicate hyphen.
+
+ A discouraging point in the article is that the inclusion of the
+ typewriter-style ugly quotation mark character is described as a
+ desirable feature of the proposed standard:
+\begin quotation
+ This \dots\ removes an irritant in the use of [double quote
+ ligatures] in these fonts. The font designer can decide whether
+ [``], [''], and [{\rmb\char34 }] are distinguishable.
+\end quotation
+ Presumably the aim here is to make it as easy for \TeX ers to
+ produce lousy typesetting as it is for people using Macintoshes
+ and \MSDOS\ machines. I can accept that if it is assumed that
+ the same encoding must be used for \TeX's internal encoding as
+ for DVI output, then the ugly-quote character is unavoidable;
+ but it pains me to see it presented primarily as a boon for lazy
+ typists. One of the worst effects of the `DTP revolution' has
+ been the way in which typewriter-style quotation marks and
+ apostrophes have become common in typeset text, because they are
+ so much easier to generate on a Macintosh than the correct
+ quotation marks.
+
+% The article also states
+%\begin quotation
+% The standard also includes |<| |>| in the normal ASCII
+% location[s].
+%\end quotation
+% but this does not address the fact that the ASCII symbols `|<|'
+% and `|>|' are used both as the less-than and greater-than
+% relations {\rmb<} and {\rmb>} and as angle brackets \langle\ and
+% \rangle. These keys might also reasonably be used for single
+% guillemets < and > or normal (double) guillemets << and >>.
+
+
+ Future versions of \LaTeX\ will expect fonts using this encoding
+ to exist. In the Malvern~\n{1.0} documentation I~suggested that
+ \index{Berry, Karl} Karl Berry's names be used for these; there
+ is now a specal code letter `|q|' for the Cork encoding.
+\medskip
+ {\rmx \ntable}
+\medskip
+\noindent
+ Notes:
+\smallskip
+\halign
+{#\hfil\quad&\hfil#&\quad\hfil#&\quad#\hfil\cr
+ \oct{000}--\oct{014}&\hex{00}--\hex{0C}&$0$--$12$&
+ marks for composite letters\cr
+ \oct{015}&\hex{0D}&$13$&
+ German single quotation mark\cr
+ \oct{016}--\oct{017}&\hex{0E}--\hex{0F}&$14$--$15$&
+ single guillemets\cr
+ \oct{027}&\hex{17}&$23$&
+ compound word mark (cwm)\cr
+ \oct{030}&\hex{18}&$24$&
+ ring that combines with \% to make \permille\cr
+ \oct{040}&\hex{20}&$32$&
+ visible space\cr
+ \oct{042}&\hex{22}&$34$&
+ typewriter-style neutral quotation mark\cr
+ \oct{136}&\hex{5E}&$94$&
+ ASCII circumflex\cr
+ \oct{137}&\hex{5F}&$95$&
+ ASCII under{\rmb\char95 }score\cr
+ \oct{176}&\hex{7E}&$126$&
+ ASCII tilde/swung dash\cr
+ \oct{177}&\hex{7F}&$127$&
+ duplicate hyphen\cr
+}
+
+
+
+%}}} Cork
+%{{{ bag-of-characters
+
+\subsec{The `bag-of-characters' alternative}
+
+ The Cork encoding has as a central assumption that it is
+ possible and overridingly desirable to have *one* encoding that
+ is used in typesetting anything, and that this encoding shall be
+ used for input to \TeX, fonts used in DVI files, and as the
+ output of \MF. I~am of the opinion that it is not useful or
+ convenient to try to impose One True Encoding on all text fonts.
+
+ In fact, the Cork article does have as an unstated assumption
+ that different fonts are used for different languages (or rather
+ groups of languages): for example, the discussion of the use of
+ the cwm to separate ligatures in German but to join ligatures in
+ other contexts suggests a plethora of fonts with the identical
+ encoding and glyphs but different ligtables.
+
+ I~would argue that if separate fonts are being used then they
+ might as well have different encodings as well. This would
+ allow a German font to omit, say, "ffl" and "ffi" (not used in
+ German) and perhaps add "ck", "tz", "ch" ligatures. True {\it
+ Fraktur} faces require more ligatures, but do not include
+ composite letters other than umlauts. Guillemets for French use
+ should be created with extra space inside them <<\thinspace like
+ so\thinspace>>, whereas Germanic fonts should have guillemets
+ without the extra space >>like so<< \cite{Hart's102}. Allowing
+ different encodings would put Esperanto, Irish, Lappish, Welsh
+ etc.\ on equal footing with the larger languages. Assuming that
+ switching between languages already implies a switch in
+ hyphenation tables and other parameters of \TeX, switching fonts
+ as well seems like a minor problem, especially as it allows
+ great benefits.
+
+ Furthermore, the best way within the \TeX\ system to produce
+ several different fonts with almost the same collection of
+ glyphs is to use composite fonts. A composite font can draw its
+ characters from one or more base fonts. These base fonts are in
+ effect a bag of characters from which different selections can
+ be drawn to form language-group-specific fonts. There is no
+ reason for the base font(s) to have the same encoding as the
+ tailored fonts used by \TeX\ itself.
+
+%}}} bag-of-characters
+\fi
+%{{{ Malvern
+
+\subsec{The Malvern font-encoding conventions}
+
+ The Malvern typeface includes more than $256$ characters, so it
+ follows that no one font will contain every Malvern character.
+ Instead I have coding schemes called Malvern~A, Malvern~B,
+ Malvern~C and Malvern~G.\note{The use of `Malvern' in these
+ names is in order give them a unique name, not to restrict the
+ use of these encodings to Malvern fonts. If the encoding
+ conventions of later versions of Malvern are different for some
+ reason, then the version number can be appended to distinguish
+ the different encodings, giving `Malvern A $1.0$', say.}
+ Malvern~A is the simple latin text font; it has the base
+ alphabets (that is, it has "A--Z" and the rest but not "\`A--\v
+ Z"). Malvern~C and G are Cyrillic and Greek respectively
+ (Malvern~C is stil incomplete). Malvern~B is the latin text
+ supplement. (There might also be a Malvern~E of composite
+ letter glyphs in the future.)
+
+\xreflabel{tab-charcodes}{\S\thesecno}
+
+%}}} Malvern
+%{{{ macros for table notes
+
+% Much to my annoyance, the smart play is to give the codes in octal
+% since TeX can convert to hex and decimal easily.
+
+\def\hexnumber#1%
+{%
+ \hex{\chardef\tmp=#1 \expandafter\striptodoublequote\meaning\tmp}%
+}
+\begingroup\catcode`\"=12 \toks0={\endgroup
+ \def\striptodoublequote#1"{}
+}\the\toks0
+\def\decnumber#1%
+{%
+ \n{\number#1}%
+}
+
+
+\def\noteone#1#2%
+{%
+ \oct{#1}&\hexnumber{'#1}&\decnumber{'#1}&#2\cr
+}
+\def\notetwo#1#2#3%
+{%
+ \oct{#1}, \oct{#2}&
+ \hexnumber{'#1}, \hexnumber{'#2}&
+ \decnumber{'#1}, \decnumber{'#2}&#3\cr
+}
+\def\noterange#1#2#3%
+{%
+ \oct{#1}--\oct{#2}&
+ \hexnumber{'#1}--\hexnumber{'#2}&
+ \decnumber{'#1}--\decnumber{'#2}&#3\cr
+}
+
+%}}} macros for table notes
+%{{{ Malvern A
+%{{{ insert table
+
+\pageinsert % this one is too big for a normal insert
+\ntable
+\medskip
+\noindent
+ Notes:
+\smallskip
+\halign
+{#\hfil\quad&#\hfil&\quad#\hfil&\quad#\hfil\cr
+ \oct{006}--\oct{017}&\hex{086}--\hex{0F}&$6$--$15$&
+ marks for l.c. composites\cr
+ \oct{026}--\oct{027}&\hex{16}--\hex{17}&$22$--$23$&
+ marks for U\&lc composites\cr
+ \oct{060}--\oct{071}&\hex{30}--\hex{39}&$48$--$57$&
+ oldstyle digits\cr
+ \oct{074}, \oct{076}&\hex{3C}, \hex{3E}&$60$, $62$&
+ single guillemets\cr
+ \oct{206}--\oct{217}&\hex{86}--\hex{8F}&$134$--$143$&
+ marks for cap.\ composites\cr
+ \oct{234}&\hex{9C}&$156$& lower-case "d" with hook (\,=\,"\v d")\cr
+ \oct{235}&\hex{9D}&$157$& lower-case "t" with hook (\,=\,"\v t")\cr
+ \oct{236}&\hex{9E}&$158$& lower-case "h" with circumflex\cr
+ \oct{237}&\hex{9F}&$159$& lower-case "L" with hook (\,=\,"\v l"?)\cr
+ \oct{240}&\hex{A0}&$160$& ballot box\cr
+ \oct{244}&\hex{A4}&$164$& ISO-$646$ currency sign\cr
+ \oct{251}&\hex{A9}&$169$& `florin sign' (variant italic "f")\cr
+ \oct{256}&\hex{AE}&$174$& raised dot (British decimal point)\cr
+ \oct{260}--\oct{271}&\hex{B0}--\hex{B9}&$176$--$185$&
+ ranging figures\cr
+ \oct{300}&\hex{C0}&$192$& degrees sign\cr
+ \oct{333}, \oct{335}&\hex{DB}, \hex{DD}&$219$, $221$&
+ angle brackets\cr
+}
+\caption{Malvern A encoding.}
+\xreflabel{tab-charcodes}{Table~\n{\the\tablecount}}
+\endinsert
+%}}} insert table
+\subsec{Malvern A Encoding}
+
+\xreflabel{tab-charcodes-a}{\S\thesecno}
+ This is the latin text font, containing alphabets, two sets of
+ figures, punctuation marks, various symbols, and some special
+ letters. Although the eventual plan is that language-group
+ specific fonts be created, this encoding has been designed so
+ that it can be used on its own at a pinch. As with the \TeX\
+ Text encoding, words with composite letters in them will not
+ hyphenate properly, and any composite-letter characters
+ available on the user's keyboard will have to be made to expand
+ to control sequences to generate that character.
+
+ As well as the usual (large) capitals and lower case alphabets,
+ Malvern has two more capital alphabets: small capitals and
+ medium capitals. The font is divided into two halves, with the
+ first $128$ slots being an extension of a subset of normal
+ ASCII, and the upper $128$ characters largely `shadowing' the
+ lower half. For example, small capitals and medium capitals
+ `shadow' the lower case and large capital alphabets (`a' is
+ character \hex{61}, and `\sc{A}' (small cap.)\ is $\hex{61} +
+ \hex{80} = \hex{E1}$).
+
+ There are two sets of digits: old style (\lowercase{1234567890})
+ are the default; to get ranging digits (\uppercase{1234567890})
+ see \xref{s-ranging}. The usual block of marks (which may be
+ used to make composite letters) is designed to suit the lower
+ case letters, and the shadow set is designed to suit the medium
+ capitals\iflong (see \xref{sec-type-A})\fi.
+
+
+
+%}}} malvern A
+%{{{ Malvern B
+%{{{ insert table
+
+\topinsert
+ {\rmb \ntable}
+\medskip
+\noindent
+ Notes:
+\smallskip
+\halign
+{#\hfil\quad&\hfil#&\quad\hfil#&\quad#\hfil\cr
+ \noteone{40}{blank space}
+ \noteone{42}{seconds (and ASCII doublequote)}
+ \noteone{45}{Cork's ring for per mille}
+ \noteone{47}{minutes (and ASCII quote)}
+ \noteone{54}{German single quote}
+ \noteone{56}{three-dot ellipsis\dag}
+ \noteone{57}{slash for fractions}
+ \noterange{60}{72}{infoerior figures}
+ \noterange{60}{72}{inferior figures}
+ \notetwo{74}{76}{greater- \& less-than signs}
+ \noterange{101}{105}{Old English caps\dag}
+ \noterange{106}{145}{Old English lower case\dag}
+ \noterange{146}{153}{Ligatures "ch", "ck", "ct", "ft", "ij", "ll"\dag}
+ \noterange{154}{163}{Long "s" and ligatures}
+ \noteone{164}{Schwa}
+ \noterange{165}{173}{Font-specific variant letters}
+ \noterange{134}{137}{Cork glyphs}
+ \noteone{140}{reverse tick (ASCII backquote)}
+ \noteone{240}{Cork visible space}
+ \noterange{241}{246}{ISO \n{8859}/\n{1} glyphs}
+}
+\caption{Malvern B encoding.}
+\endinsert
+%}}} inster table
+\subsec{Malvern B Encoding}
+
+\xreflabel{tab-charcodes-b}{\S\thesecno}
+ This font is essentially a collection of random symbols and
+ alphabetical characters, some of them mathematical. I~have not
+ yet settled on a firm design for it---most of it is left as gray
+ areas to be filled in in later versions of Malvern. Also, even
+ in the final form of this font, some areas will be designated as
+ `font-specific'; other fonts using the Malvern conventions will
+ use them for whatever variant letters and unique characters the
+ designer wishes to include.
+ Superior and inferior---that is, raised and lowered---figures
+ (\lowercase{{\rmb 1234567890}}/\uppercase{{\rmb 123456789}})
+ take the place of the old-style and ranging figures. The glyphs
+ required by the Cork encoding, such as this visible space
+ `{\rmb\char160 }' and ASCII doublequote `{\rmb\char34 }', are
+ also included here.
+
+
+%}}} malvern B
+%{{{ Malvern C
+
+\subsec{Malvern C Encoding}
+
+\xreflabel{tab-charcodes-c}{\S\thesecno}
+ This will be the ^{Cyrillic} subset of Malvern, using the same
+ or simlar conventions to the existing ^|wncy| fonts. As yet,
+ several of these glyphs are missing. (Perversely enough, mainly
+ the ones appearing in the Latin and Greek alphabets, so I can
+ only say `AH{\gr G}{\cy LIQ}AH{\cy I}H' by borrowing `A' and `H'
+ from Malvern~A and `{\gr G}' from Malvern~G!) I'm not really in
+ a good position to produce a good Cyrillic font---I don't have
+ the slightest knowledge of Russian or any other language using
+ the Cyrillic alphabet.
+
+\topinsert
+ {\rmc \ntable}
+\caption{Malvern~C encoding (so far).}
+\endinsert
+
+%}}} Malvern C
+%{{{ Malvern G
+
+\subsec{Malvern G encoding}
+
+\xreflabel{tab-charcodes-g}{\S\thesecno}
+ This is the ^{Greek} text font encoding, based largely on the
+ Greek\TeX\ \cite{KD} fonts, so that, for example, `|<'a|||'
+ produces an alpha with breathing, accent and iota subscript:
+ `{\gr <'a\char124 }'. The document |magrman.tex| in the Malvern
+ distribution describes the use of this font.
+
+\topinsert
+ {\gr \ntable}
+\caption{Malvern G encoding.}
+\endinsert
+
+%}}} Malvern G
+%}}} encoding
+\dosupereject
+\iflong
+%{{{ type sizes
+\vfil
+\penalty-100
+\vfilneg
+\section{Sizes of type}
+
+ This is a table of sizes of type, descibed both in \TeX's
+ Anglo-American points ($0\cdot351\,{\rm mm}$ or $0\cdot01383''$)
+ and in millimetres, and also the cap heights for Malvern~55.
+ The choice of point sizes is a mixture of traditional sizes
+ ($10\pt$, $12\pt$, \dots, $48\pt$, $60\pt$ etc.) and the sizes
+ Computer Modern fonts are supplied in ($10\pt$, $12\pt$,
+ $17\cdot28\pt$ etc.), and a few sizes that are round figures in
+ metric units ($10\mm$ etc.).
+\medskip
+\moveleft\leftmargin\vbox{\advance\hsize\leftmargin
+\halign to \hsize{\hfil $#$\tabskip=0pt& $#$\hfil \tabskip=0pt plus 1fil&
+ &\quad\hfil $#$\tabskip=0pt& $#$\hfil \tabskip=0pt plus 1fil
+\cr
+ \noalign{\hrule height 1pt \vskip 1.5\jot}%
+ \multispan4Body size\hfil &
+ \multispan4\quad Cap.\ ht\hfil &
+ \multispan8\quad Pixels per em\hfil\cr
+ \noalign{\vskip\jot\nointerlineskip}%
+ \multispan4\hrulefill &
+ \multispan4\quad\hrulefill &
+ \multispan{12}\quad\hrulefill \cr
+ \multispan2pt\hfil &
+ \multispan2\quad mm\hfil &
+ \multispan2\quad pt\hfil &
+ \multispan2\quad mm\hfil &
+ \multispan2\quad $120$ &
+ \multispan2\quad $200$ &
+ \multispan2\quad $300$ &
+ \multispan2\quad $400$ &
+ \multispan2\quad $600$ &
+ \multispan2\quad $1000$\cr
+ \noalign{\vskip\jot \hrule \vskip 1.5\jot}%
+ \input typesizes
+ \noalign{\vskip2\jot \hrule height 1pt}
+}}
+\smallskip
+
+%}}} type sizes
+\fi
+%{{{ composite letters
+
+\section{Composite letters used in some languages}
+
+ This table lists composite letters listed as being
+ required to typeset several European languages. This list is
+ not particularly canonical\allowbreak---I~have merely combined
+ the OUP list \cite{ODWEacc}, the resources of my local library,
+ and \TUGboat\ articles \lcite{\\{Bien}\\{Hara}}. There are
+ probably omissions, especially of composites used in
+ loan-words\allowbreak---and I~would appreciate any information
+ which I~can include in later revisions.
+
+%{{{ macros to do footnotes in table
+
+\newcount\tabcount
+%\tabcount=7 \multiply\tabcount16 \advance\tabcount\itfam
+%\multiply\tabcount256 \advance\tabcount`a \advance\tabcount-1
+
+%% Normally footnotes into a table are lowercase letters
+%% In this case it seemed better to use numbers given that the
+%% entries are all letters...
+%%
+\def\tabnote#1%
+{%
+ \global\advance\tabcount1
+ \global\edef#1{\footnotetextmark{\the\tabcount}}%
+ #1%
+}
+\def\tabnotetext#1%
+{%
+% \ifvmode
+% \noindentfalse
+% \leavevmode\llap{#1}%
+% \else
+% \unskip \penalty10000 \hbox to \parindent{\hfil#1}%
+% \fi
+ \par \indent\llap{#1\enspace}%
+ \ignorespaces
+}
+
+%}}}
+%{{{ the table
+
+\medskip
+\moveleft\leftmargin\vbox\bgroup
+\advance\hsize\leftmargin
+\hrule height 1pt
+\vskip2\jot
+\halign to \hsize\bgroup #\unskip\hfil \tabskip=3pt plus 10pt&&#\unskip\hfil\cr
+Czech & \'a & \v c \v D\vd\tabnote\czech
+ &\'e\v e& & \'\i & \v n & \'o
+ & \v r\v s \v T\vt\czech
+ & \'u\ringmark u
+ & & \'y & \v z \cr
+Danish &\aa & & & & & & \o & & & & & & \ae \cr
+Dutch\tabnote\dutch & & &\'e\"e & & & &\'o\"o \cr
+English &\aa\tabnote\angstrom
+ & \c c &\'e\`e\tabnote\egravenote\"e
+ & &\"\i
+ & &\^o\"o\tabnote\odiaeresis &&& & & & \ae\oe\tabnote\aelig \cr
+Esperanto & & \^c & & \^g\h & & \^\j & & \^s & \u u \cr
+Finnish &\aa\"a
+ & & & & & & \"o \cr
+French%\tabnote\frenchnote
+ &\`a\^a & \c c & \'e\`e\"e & &\^\i\"\i
+ & & \^o & & \`u\^u\"u \cr
+German & \"a & & & & & & \"o & & \"u & & & & \ss%\tabnote\eszetnote
+\cr
+Hungarian & \'a & & \'e & &\'\i & &\'o\"o\H o & & \'u\"u\H u \cr
+Icelandic & \'a & & \'e & &\'\i & & & & & & & & \th\dh \cr
+Norwegian &\aa
+ & & & & & & \o & & & & & & \ae \cr
+Polish & \a & \'c & \e & & & \l\'n & \'o & \'s & & & & \'z\.z \cr
+Portuguese & \'a\`a\^a\~a
+ & \c c & \'e\`e\^e & &\'\i\`\i
+ & & \'o\`o\^o\~o && \'u\`u\"u\tabnote\portuguese \cr
+Romanian & \`a\^a\u a & & \`e & &\`\i\^\i && &\c{s}\c{t}
+ & \`u \cr
+Russian\tabnote\russian && &\`e\"e & &\u{\i} & &
+ & & & & \=y & \v z & \rmb '\thinspace \char34 \cr
+Spanish%\tabnote\spanish
+ & \'a & & \'e & &\'\i
+ & \~n & \'o & & \'u\"u \cr
+Swedish &\aa\"a && & & & & \"o \cr
+Turkish & \^a & \c c & &\u{g}
+ &\.I\i\tabnote\turkish \^\i
+ & & \"o &\c{s}
+ & \"u \cr
+Welsh%\tabnote\welsh
+ &\^a\'a & &\^e\"e & &\^\i\"\i
+ & & \^o\"o & &\^u & \^w & \^y \cr
+\crcr \egroup
+\vskip1\jot
+\hrule height 1pt
+\egroup
+\smallskip
+
+%}}}
+%{{{ text of footnotes
+
+\tabnotetext\czech
+ The letters "\vd" and "\vt" are used as alternatives to placing
+ a \showmark\v on letters with ascenders. They can also be
+ written \xyaccent{0.4 }{\dimen0=0pt }{13}{d} and \v{t}.
+\tabnotetext\dutch
+ "IJ~ij" counts as one letter.
+\tabnotetext\angstrom
+ "\aa ngstr\"om".
+\tabnotetext\egravenote
+ In poetry, "-\`ed" is us\`ed to show a syllable normally mute is
+ to be separately pronounced \cite{Hart's30}.
+\tabnotetext\odiaeresis
+ American "co\"operate" (Br. spelling is "co-operate"), "\aa ngstr\"om".
+\tabnotetext\aelig
+ Using the vowel ligatures "\ae" and "\oe" in English words
+ with Latin roots is a Victorian affectation---it is usual
+ nowadays to write "aesthetic", not "\ae sthetic"
+ \cite{Hart's62}. Americans write "esthetic", of
+ course.
+\tabnotetext\portuguese
+ The letter "\"u" is used in Brazil but not in Portugal
+ \cite{Hart's135}.
+\tabnotetext\russian
+ These are letters used in transliterating Russian and the other
+ languages that use the Cyrillic alphabet (Belorussian etc.)
+ \cite{Hart's120}.
+\tabnotetext\turkish
+ In Turkish, "I~\i" and "\.I~i" are separate letters. Sometimes
+ "\ringmark \i" or "\=\i" is used in manuscripts to indicate~"\i"
+ \cite{Hart's135}.
+
+%\tabnotetext\spanish
+% The digraphs "ch" and "ll" count as single letters.
+%\tabnotetext\welsh
+% Has $7$~digraphs: "ch", "dd", "ff", "ng" (ranked after "g"),
+% "ll", "ph", "rh" (except after vowels), "th".
+%\tabnotetext\eszetnote
+% "Es-zet", or `sharp "s"', originating as a {\it Fraktur\/}
+% ligature for long "s" and "z" ("\char157 3"), but treated as
+% "ss" in alphabetizing, and the upper-case equivalent is "SS".
+%\tabnotetext\ocircumflex
+% This is inconsistently used for words naturalized from French --
+% "role" (no circumflex) but "m\^el\'ee" \cite{ODWE}.
+
+%}}}
+%}}} composite letters
+\iflong
+%{{{ list maamac.tex
+\section{Listing of {\tt malvern.tex}}
+
+ This is a complete listing of |maamac.tex|, a file of \TeX\
+ definitions that redefine the usual accent commands etc.\ and
+ make some other definitions appropriate to the Malvern encoding.
+ It might be used by plain~\TeX
+
+\everylisting{\smallfonts}
+\listing{maamac.tex}
+%}}} malvern.tex
+\fi
+%{{{ installation hints
+
+\section{Installation summary}
+
+\subsec{Getting Malvern via FTP}
+
+ Malvern should be available from CTAN (the
+ Comprehensive \TeX\ Archive Network), in directory
+ |fonts/malvern|.
+
+ Where appropriate, Malvern now uses the same naming convention
+ as GNU software, so there should be a bundled distribution
+ called something like
+\begin display
+ {\tt\ttpackage.tar.gz}
+\end display
+ The file, as the suffix suggests, is a |tar| archive compressed
+ with GNU Zip, and on UNIX systems will likely be unpacked with
+ something like
+\begin display
+ {\tt zcat \ttpackage.tar.gz \char`\| tar xvf -}
+\end display
+
+ A version which has been `patched' will have a version ID like
+ `$1.2.05$', the `$05$' being the \dfn{patch level}. You apply
+ the patches (with ^^{Wall, Larry} Larry Wall's ^|patch|
+ program) in order (patch $01$ first, then $02$, and so on) to
+ the main distribution. Patch files have names like
+ `|malvern-1.2-patch05|'.
+
+ There is a document |dvi/install.dvi| included in teh package
+ that contains installation hints.
+
+\subsec{Generic driver file}
+ Malvern is unusual amongst \MF\ families in that it is supplied
+ with one {\it generic driver file} instead of one driver file
+ for each size and style the family comes in.\note{The package
+ also includes a selection of driver files.} The generic driver
+ file ({\tt ma.mf}) inspects the values of variables like
+ "designsize" and "weight" and gives the ad-hoc parameters
+ appropriate values, before reading the program files. On some
+ UNIX systems a small program called ^|mff| can be used to
+ generate fonts using this system. Otherwise other measures will
+ have to be taken, described below.
+
+\subsec{Malvern encodings}
+ Malvern uses a nonstandard encoding---in fact a family of
+ encodings, for example, Malvern~A (latin alphabets) and
+ Malvern~G (Greek). To create fonts for use with \LaTeXe\ and
+ the NFSS\vn2 font selection macros, use ^^{Jeffrey, Alan} Alan
+ Jeffrey's ^|fontinst| package \cite{fontinst} (see also
+ \xref{s-fontinst}). This generates the |fd| files and virtual
+ fonts so that Malvern fonts may be used in the same way as other
+ \LaTeXe\ families. (The glyphs needed to make fonts with the
+ Cork (T$1$) encoding are in Malvern~A and Malvern~B.) This has
+ already been done for you to make a selection of styles
+ available with both \TeX\ Text and T\n1 encodings.
+
+\subsec{Malvern font names}
+ The Malvern fonts generated with \MF\ will have \TeX\ names of
+ the following form:
+$$
+ \hbox{{\tt ma}\<style>\<encoding>\<size>}
+$$
+ where the \<style> is a two digit style code (described below),
+ \<encoding> is a code identifying a Malvern encoding (such as
+ `{\tt s}' or `{\tt az}'), and \<size> is the size in points
+ (e.g., `{\tt 12}' for $12\pt$). Thus {\tt ma55a12} ($12$-pt
+ Malvern $55$, encoding~A).
+
+ The two-digit style codes are based on Adrian Frutiger's system,
+ devised for the Univers family; see \xref{s-stylecodes}.
+
+ The \MF\ programs can also produce fonts in ^^{Berry, Karl}
+ Karl Berry's font naming scheme, with the \TeX\ Text encoding.
+ The names start with `{\tt fmv}'. This is so that these fonts
+ may be used in plain-\TeX\ and \LaTeX-$2.09$ documents without
+ too much confusion. The correspondance between Malvern's style
+ digits and weight, variant and expansion letters is given in the
+ tables below. NFSS\vn2 systems (indeed, any that use
+ non-\TeX-text encodings) will have to use virtual fonts.
+
+\ifkbnames\else
+\begin notepar
+ `\/{\tt fmv}\/-' names are not used at present; use
+ corresponding `\/|ma|\/-' names instead. See the note at the
+ end of \xref{s-kb-names}.
+\end notepar
+\fi
+
+\subsec{Unpacking Malvern}
+ The Malvern distribution includes \MF\ source files, some \TeX\
+ files such as this documentation, and a few other miscellaneous
+ files.
+
+\subsubsec{Source files ({\tt/source})}
+ On most \TeX\ systems, \MF\ fonts end up with their source files
+ stored in \MF's input file area. I~suggest that Malvern instead
+ be given its own file area. This avoids problems with different
+ font families having files with the same name, and makes it easy
+ to replace all the Malvern files in one go if you upgrade to a
+ newer version of Malvern.
+
+ With a new-style directory tree,\note{At the time of writing,
+ the \TeX\ Directory Standard (TeDiouS) is still in discussion.
+ This is my best guess based on a \TeX\ system I~recently had
+ installed.} the {\tt\ttpackage} directory may be placed in the
+ `|texmf/fonts/public|' directory, and the directories |source|
+ and |drivers| merged and renamed so that \MF\ can find them.
+
+ The files {\tt mff.rc} and {\tt fmv.mff} are input files for
+ {\tt mff} and may be ignored if you are not using {\tt mff} to
+ generate fonts.
+
+\subsubsec{Driver files ({\tt/drivers})}
+ These files are not strictly necessary but are included for
+ convenience. They are used when assignments to the generic
+ driver file's parameters on the \MF\ command line is impossible,
+ such as when using the standard {\tt MakeTeXPK} script. A
+ driver file is included for each {\tt tfm} supplied.
+
+\subsubsec{\TeX\ input files ({\tt/tex})}
+ These files belong in a system-wide \TeX\ inputs area. The
+ files ending with `|.fd|' are font family definition files,
+ used by NFSS\vn2 and \LaTeXe.
+
+ On new-style directory trees, the best approach is probably to
+ link or rename {\tt texmf/fonts/public/\ttpackage/tex} to
+ {\tt texmf/tex/\ttpackage}.
+
+\subsubsec{Documentation files ({\tt/doc}, {\tt/dvi})}
+ Files ending in `{\tt.tex}' are plain \TeX\ documents, and will
+ not work with \LaTeX. Compiled ({\tt dvi}) files are supplied
+ to save the installer having to run \TeX. Read {\tt
+ install.tex}, first. The ^{Greek} text encoding is described in
+ |magrman.tex|.
+
+ The "Malvern Handbook", |maman.tex| produces cross-references
+ automatically via an |aux| file, and will need to be run through
+ \TeX\ twice to get the cross-references right. The front matter
+ (preface and table of contents) are printed *last* and should be
+ transferred to the front of the handbook before binding.
+
+\begin notepar
+ Please do not install any of the macro files used to typeset the
+ documentation in the system-wide \TeX\ inputs area. They are
+ not supported, not necessarily generally useful, and very
+ nonstandard. Earlier releases of Malvern gave the macro files
+ generic enough names that they might clash with other macro
+ files. They have been renamed to start with `{\tt pdc}' in the
+ hope that this will avoid clashes if they are accidentally
+ installed.
+\end notepar
+
+\subsubsec{Virtual font files ({\tt/vf})}
+ These virtual fonts are generated using ^^{Jeffrey, Alan}Alan
+ Jeffrey's ^|fontinst| package \cite{fontinst}, and are Malvern
+ fonts with the Cork encoding. With NFSS\vn2 (or \LaTeXe) they
+ are used by specifying encoding `{\tt T1}' and family `{\tt
+ fmv}'. See \xref{tab-encoding-codes} for a list of encoding
+ codes.
+
+\subsubsec{Font metric files ({\tt/tfm})}
+ A selection of precompiled font metric files, including those
+ for virtual fonts in {\tt /vf} and the actual fonts needed to
+ use them, as well as fonts needed to print the documentation in
+ {\tt/dvi}.
+
+\subsec{Using mff to generate Malvern fonts}
+ First, install {\tt mff} and arrange that \MF\ will be able to
+ find the {\tt mf} files. Then to create a Malvern font, for
+ example $12$-pt Malvern~$55$ ({\tt ma55a12}), give the command:
+\begin example
+ |mff ma55a12|
+\end example
+ To generate Malvern~$55$ and $56$ at magsteps $0$, \frac1/2 and
+ $1$, for $300$-dpi and $1000$-dpi printers, you would type:
+\begin example
+ |mff --magstep=0,h,1 --dpi=300,1000 ma55a10 ma56a10|
+\end example
+ If all goes well, the {\tt tfm} and {\tt pk} files generated
+ will be installed in the correct directories automatically.
+
+\subsec{Generating Malvern fonts without mff}
+ This section presumes you know how to install a normal \MF\
+ font.
+
+ Create a driver file for each style of Malvern you want to be
+ able to use. It should have the following form:
+\begin lines
+ |% |\<name of file>| -- generate |\<size>|-pt Malvern |\<style>
+\smallskip
+ |font_size |\<size>| pt#;|
+ |encoding = |\<number>|; |
+ |weight = |\<number>|; hratio = |\<number>|;|
+ |slant = |\<number>|; italicness = |\<number>|;|
+ |input ma|
+ |bye.|
+\end lines
+ where \<size> is the design size in points, and the
+ values for the various variables are given below. The \<style>
+ is the two-digit style code described in \xref{s-stylecodes}.
+
+ These driver files should be named after the font they
+ correspond to---for example, `{\tt ma76a12.mf}' to generate
+ Malvern~$76$. Then they are used as usual with \MF:
+\begin example
+ |mf \mode=luxo; mag=|\<number>|; input ma55a12|
+\end example
+ where the \<number> is the magnification wanted, or `{\tt 1.0}'
+ for no magnification.
+
+\subsubsec{Values for {\it encoding}}
+ The variable {\it encoding} specifies the encoding to use---in
+ other words, the subset of Malvern's glyphs to be generated. It
+ should be given one of the following values:
+\begin display
+ \it Encoding&\it Letter&\it Description\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it encoding} = 1$& \tt a&
+ Malvern A (latin alphabets ABCdef.)\cr
+ ${\it encoding} = 2$& \tt b&
+ Malvern B (superscripts, symbols etc.)\cr
+ ${\it encoding} = 3$& \tt c&
+ Malvern C (Cyrillic A{\cy DIlz\char126 })\cr
+ ${\it encoding} = 5$& \tt e&
+ Malvern E (composite letters \AA \c C\^D\'e\u g\^\i)\cr
+ ${\it encoding} = 7$& \tt g&
+ Malvern G (Greek letters {\gr ABGdez})\cr
+ ${\it encoding} = 19$& \tt s&
+ \TeX\ text \cite{TeXF1}\cr
+ ${\it encoding} = 26$& \tt az&
+ \TeX\ text, old-style numerals\cr
+\end display
+ The letter is the letter used in the font name -- for example,
+ {\tt ma55s10} for Malvern with the \TeX\ text encoding (${\it
+ encoding} = 19$), and so on.
+
+\begin notepar
+ The Malvern programs used to attempt to generate other encoding
+ schemes; with ^|fontinst| this all becomes redundant and
+ those codes are obsolete.
+\end notepar
+
+\subsubsec{Values for {\it weight}}
+ The variable {\it weight} specifies the weight (boldness) of the
+ font. It has the following values:
+\begin display
+ \it Weight&\it Style&\it NFSS\vn2& \it Berry&\it Description\cr
+ &\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it weight} = 1/4$& \tt 1& \tt ul& \tt t& ultra-light\cr
+ ${\it weight} = 1/2$& \tt 2& \tt el& \tt i& extra-light\cr
+ ${\it weight} = 3/4$& \tt 3& \tt\ l& \tt l& light\cr
+ ${\it weight} = 7/8$& \tt 4& \tt sl& \tt b& semi-light\cr
+ ${\it weight} = 1$& \tt 5& \tt\ m& \tt r& medium\cr
+ ${\it weight} = 1.3$& \tt 6& \tt sb& \tt d& semi-bold\cr
+ ${\it weight} = 1.6$& \tt 7& \tt\ b& \tt b& bold \cr
+ ${\it weight} = 2$& \tt 8& \tt eb& \tt x& extra-bold\cr
+ ${\it weight} = 3$& \tt 9& \tt ub& \tt u& ultra-bold\cr
+\end display
+ The `style digit' is the first digit in the two-digit style
+ codes described in \xref{s-stylecodes}. The `NFSS\vn2\ code' is the
+ first half of a corresponding NFSS\vn2\ `font series' code. The
+ `Berry code' is the code for this weight in Karl Berry's font
+ naming scheme.
+
+ Note that some of the character programs produce ugly results
+ for large values of {\it weight}.
+
+\subsubsec{Values for {\it hratio}}
+ The variable {\it hratio} specifies the ratio between horizontal
+ and vertical measurements: in other words, whether the font is
+ compressed or expanded. It may have the following values:
+\begin display
+ \it Hratio&\it Style&\it NFSS\vn2& \it Berry&\it Description\cr
+ &\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it hratio} = 0.50$& {\tt 9} or {\tt 0}&
+ \tt ec&\tt o& extra compressed\cr
+ ${\it hratio} = 0.80$& {\tt 7} or {\tt 8}&
+ \tt\ c&\tt c& compressed\cr
+ ${\it hratio} = 1.00$& {\tt 5} or {\tt 6}&
+ \tt\ m&\tt r& normal width\cr
+ ${\it hratio} = 1.15$& {\tt 3} or {\tt 4}&
+ \tt\ x&\tt x& expanded\cr
+ ${\it hratio} = 1.30$& {\tt 1} or {\tt 2}&
+ \tt ex&\tt w& extra expanded\cr
+\end display
+ The `style digit' is the second half of the two-digit style
+ codes described in \xref{s-stylecodes}. The `NFSS\vn2\ code' is the
+ second half of an NFSS\vn2\ `font series' code (for example,
+ bold expanded is ${\tt b} + {\tt x} = {\tt bx}$, compressed is
+ ${\tt m} + {\tt c} = {\tt c}$). The `Berry code' is for Karl
+ Berry's scheme.
+
+ Beware that the character programs do not all produce good
+ results when {\it hratio} is not $1$.
+
+\subsubsec{Values for {\it slant} and {\it italicness}}
+ These two variables between them specify whether a font is to be
+ produced with italic letterforms or not:
+\begin display
+ \it Slant&\it Italic? &\it Style&\it NFSS\vn2&\it Berry&\it Description\cr
+ &&\it digit&\it code&\it code\cr
+\noalign{\kern\jot\hrule\kern1.5\jot}
+ ${\it slant} = 0$& ${\it italicness} = 0$& odd&
+ \tt n& \tt r& upright\cr
+ ${\it slant} = 1/8$& ${\it italicness} = 1$& even&
+ \tt it& \tt i& italic\cr
+ ${\it slant} = 0$& ${\it italicness} = 1$& odd&
+ \tt ui& \tt u& upright italic (!)\cr
+ ${\it slant} = 1/8$& ${\it italicness} = 0$& even&
+ \tt sl& \tt o& oblique\cr
+\end display
+ The `NFSS\vn2\ code' is the `font shape' code. The `Berry
+ codes' are variant letters for Karl Berry's font naming scheme.
+
+ The variable {\it slant} is common to many \MF\ programs, and
+ causes the glyphs to be obliqued. The {\it italicness} variable
+ signals that italic letterforms should be used for some letters.
+ It is possible to generate an obliqued font or an `upright
+ italic' with appropriate settings, but these cannot have `{\tt
+ ma}-' names, because I~have not defined style codes for them.
+
+%}}} installation hints
+%{{{ availability
+
+\section{Copying Malvern and reporting bugs}
+
+ Like \TeX\ and \MF\ themselves, the implementation of Malvern in
+ \MF\ for use with \TeX\ is free software in the sense used by
+ the ^{Free Software Foundation} \cite{GPL}. (The word `free' is
+ used to mean `free of restrictions', rather than `available for
+ free'; free software may be bought and sold on the understanding
+ that the buyer may make copies and distribute them.)
+^^{distribution}
+^^{copying}
+
+ There is a ^{mailing list} for discussion of Malvern problems
+ and solutions. Send ^^{bugs} bug reports, suggestions, and
+ ideas to |malvern@comlab.ox.ac.uk|. To subscribe to the list,
+ mail me at |malvern-request@comlab.ox.ac.uk|.
+
+%}}} availability
+%{{{ fontinst
+
+\section{Fontinst}
+
+ ^^{Jeffrey, Alan} Alan Jeffrey's ^|foninst| package
+ \cite{fontinst} is a set of \TeX\ macros which allows users to
+ install ^{virtual fonts}. It can combine fonts represented by
+ Adobe Font Metric ({\tt afm}) or \TeX\ font metric ({\tt pl})
+ files into virtual fonts. These virtual fonts can then be used
+ by \TeX.
+
+\xreflabel{s-fontinst}{\S\thesecno}
+
+ The package
+\begin bullets
+ \\ is written in \TeX, for maximum portability (at the cost of
+ speed);
+ \\ supports the full ^{Cork encoding};
+ \\ allows arbitrary `fake' glyphs -- for example, creating an "ij"
+ ligature by placing "i" next to a "j";
+ \\ allows capital-and-small-capital fonts with letter-spacing and
+ kerning;
+ \\ allows kerning information to be copied between glyphs -- for
+ example "ij" can be made to kern on the left like "i" and on the
+ right like "j";
+ \\ allows glyphs from several fonts to be combined to make a new one;
+ \\ automatically generates a {\tt fd} file for NFSS~\n2 and \LaTeXe;
+ \\ can deal with arbitrary font encodings.
+\end bullets
+ The current version is a beta release. It can be obtained from
+ the Comprehensive \TeX\ Archive Network (CTAN), in directory
+ |fonts/utilities/fontinst|.
+
+ By including some Cork-specific glyphs in the Malvern B
+ encoding, I~have managed to spin Cork-encoded Malvern fonts
+ (with variant encodings like cap \& small caps) from Malvern~A
+ and B fonts. The fonts generated have names in Karl Berry's
+ scheme, like `|fmvmq12|'.
+
+
+%}}} fontinst
+%{{{ to do
+
+\section{To-do list}
+
+ So far both Malvern and this handbook is incomplete---Malvern is
+ a spare-time project and progress has slowed to a crawl over the
+ last few months. For the present, the best strategy seems to be
+ to release a version that can be picked apart by more
+ knowledgable people in order that a later, complete, release be
+ that much better.
+
+ Tasks that need attention include:
+\begin bullets
+\\
+ Make guillemets space themselves automagically.
+%\\
+% Fix design of ogonek letters \A, \E, \a, \e.
+\\
+ Make head of \P{} solid.
+%\\
+% Tidy up the ^|fontinst| encoding files so that they can be
+% included in future releases.
+%\\
+% Need a two drop-in \LaTeX\ style option files---one for standard
+% \LaTeX, one for \LaTeX+NFSS.
+\\
+ The kerning table is incomplete---I need to develop a
+ systematic method for thrashing one out in the absence of a
+ decent typesetter or enough specialized knowledge. Donation of
+ a kerning table or clever software for generating same would be
+ appreciated.
+%\\
+% Need some way of generating VF or VPL files automatically.
+\\
+ Some composite letters are missing or hastily designed. I need
+ to do more research into other latin-alphabet languages (so that
+ I know how to draw their special letters).
+\\
+ Find example texts containing some of the more esoteric special
+ letters (such as "\NG").
+\\
+ Rethink the proportions of small-capital letters.
+%\\
+% Obtain more greek newspapers and magazines and design a
+% lower-case greek alphabet.
+\\
+ Learn Russian and design a Cyrillic alphabet.
+\\
+ Script alphabets. (Just an idea.)
+%\\
+% The figures need to be overhauled---the `8' fails horribly in
+% all sorts of conditions.
+%\\
+% Lower-case "e" should be different in italic.
+\\
+ Documentation of the \MF\ code is incomplete---and some of the
+ code might usefully be rationalized.
+\end bullets
+
+%}}} to do
+\input mabib
+%{{{ index
+
+\vfill\eject
+\begingroup \leftmargin=0pt \setncolumns3 \notefonts
+ \section{Index}
+
+ \leftskip=1em \parindent=-\leftskip \parskip=0pt plus 1pt
+ \let\vn=\n
+
+\inputifexists{\jobname.ind}
+
+\vfill\eject
+
+\endgroup
+
+\index{New Font Selection Scheme|see{NFSS}}
+
+
+%}}} index
+\iflong
+%{{{ colphon
+
+\vfill\eject
+
+\section{Colophon}
+
+ This manual was of course typeset using \TeX\ with Malvern
+ fonts. The manuscript was edited using Richard Stallman's GNU
+ Emacs extensible text-editor, with the CMU\TeX\ Major Mode by
+ Olin Shivers et al. The DVI files were previewed with |xdvi|,
+ and converted into \PS\ using Tomas Rokicki's excellent |dvips|
+ printer driver.
+
+ The body text is set in 10/12 pt Malvern~55, with Malvern~56
+ italics and Malvern~75 boldface.
+
+%}2}} colphon
+\fi
+
+%}}} Appendix
+%{{{ preliminary matter
+
+\vfill\eject
+\pageno=-1
+\mark{{}{}}
+
+\begingroup
+\headline={\hfil} \footline={\hfil}
+\iftwosided
+%{{{ half-title
+
+\null
+\vskip 0pt plus 1fil
+
+\line{\bigrm\spaceskip=0pt plus 1fil M A L V E R N}
+
+\vskip 0pt plus 1.5fil
+\eject
+
+\line{}\vfill\eject % fronticepiece
+
+%}}}
+\fi
+%{{{ title page + title verso
+
+\null
+\vfill
+
+\leftline{\bigrm The \iflong\else abridged\fi}
+\vskip 24pt
+\leftline{\hugerm\spaceskip=-0.05em M A L\kern-0.1em V E R N}
+\vskip 18pt
+\rightline{\hugerm\spaceskip=-0.05em h a n d b o\kern-0.025em o k}
+\vskip36pt
+ \leftline{\headingfonts P. Damian Cugley}
+\vfill
+
+\iftwosided
+ Alleged Literature, Oxford.
+
+ \eject\null\vfill
+\fi
+
+\parindent=0pt \parskip=1ex \leftskip=-\leftmargin
+
+ \copyright\ $1991$--$1994$ P. Damian Cugley.
+
+ The right of Damian Cugley to be identified as the author of
+ this work has been asserted in accordance with British copyright
+ law.
+
+ Permission is granted by the copyright holder to copy, use and
+ and distribute verbatim copies of the Malvern package and this
+ handbook without fee so long as ($1$)~the above copyright
+ messages and this permissions message are preserved intact on
+ all copies; and ($2$)~neither the name of Damian Cugley nor that
+ of Oxford University be used in any related promotion or
+ advertising without prior written consent. (Merely
+ acknowledging copyright would not count as contradicting~($2$).)
+
+ {\bf Caveat}\quad This documentation is incomplete.
+
+\bigskip
+ This document describes \package.
+
+ \TeX\ was run on this file on \today.
+\eject
+%}}}
+\endgroup
+
+%{{{ preface
+\sectionheading{Preface}
+
+\dropcap\hugerm
+ Malvern is a sanserif typeface family: a collection of typefaces
+ that have been designed together and are intended to coordinate
+ with each other. (`Sanserif' comes from the French {\it sans
+ serif\/} and means that the arms and stems of letters do not
+ have the small finishing strokes called serifs.) This handbook
+ describes an implementation of Malvern created for use with
+ \TeX, a fiendish typesetting system devised by ^^{Knuth, Donald
+ E.} Donald~E.\ Knuth. Like Knuth's own Computer Modern family,
+ Malvern is implemented as a set of files which are interpreted
+ by \MF, a companion program to \TeX\ which is included in most
+ \TeX\ systems.
+
+\iflong
+ The reader may be surprised that a typeface needs a `handbook'
+ like this one at all---after all, we do not see books called
+ `The Garamond User Guide' or `How to get more from your Bodoni'.
+ This is partly because of the nature and rarity of \MF\ fonts: they
+ are individually-crafted programs, whereas commercial fonts are
+ produced systematically using standard software. Partly it is
+ because the Computer Modern family is so thoroughly installed
+ into plain \TeX\ and standard \LaTeX\ that some effort is needed
+ to switch it over to another font family. And finally, there is
+ the fact that Malvern is itself eccentric and these
+ eccentricities need explaining.
+
+ My motivation to create Malvern comes from two sources.
+ Firstly, the \TeX\ system has always suffered from a dearth of
+ font designs: In the standard \TeX\ distribution, there are two
+ sanserif families (Computer Modern Sans Serif and CM Sans Serif
+ Quotation) both of which are derived from the same character
+ programs as the Computer Modern fonts. This is a nice gimmick,
+ but in practice the natures of sanserif and serif faces are so
+ much at odds that they cannot be usefully merged into one
+ `meta-design'.
+% In particular, the capitals of \cmrname{CMSS}
+% and \cmrname{CMSSQ} do not seem to me to coordinate well with
+% their lower case. The $x$-height for \cmrname{CMSS} is small
+% for a sanserif font, and makes it look top-heavy---but a
+% side-effect of increasing the $x$-height in \cmrname{CMSSQ} is
+% to make the capitals so extended as to be distended.
+% My attempts to coax what I~considered to be a nice sanserif face
+% out of the CM programs---with all sorts of hacks and
+% fudges---became more and more elaborate, but to no avail.
+ Of course there are many wonderful faces available
+ commercially---but I have no money with which to buy them. (One
+ of the great things about \TeX\ is that it is free, so that
+ quality typesetting is available to any sufficiently-motivated
+ pauper with access to a computer.)
+
+ The second main impetus was more immediate---it was the
+ publication of the proposed standard \TeX\ font encoding in
+ \TUGboat\ (the \TeX\ User Group journal). I~wanted to write an
+ article or letter about this---but to do so I~needed to be able
+ to include many peculiar symbols in a \TeX\ document. After my
+ first attempts (creating a font to augment Computer Modern) it
+ seemed obvious that designing a new font from scratch would be
+ less effort in the long run than trying to come up with a bodge
+ to patch existing fonts.
+\fi
+
+ This handbook describes my implementation of Malvern and some
+ ways in which Malvern can be used with \TeX\ (both plain \TeX\
+ and with the \LaTeX\ macro package).
+\iflong
+ It also includes
+ information that relates to Malvern in general, as opposed to
+ any one implementation in particular. It is possible that at
+ some future date someone will make versions of Malvern fonts for
+ other systems, in which case they will surely supply their own
+ handbook to supplement this one.
+
+ Different parts of this handbook will be relevant to different
+ people. The first sections describe Malvern as it is used in
+ \TeX\ (or \LaTeX) documents, including the developement of \TeX\
+ macros to take advantage of Malvern's features (these are aimed
+ at \TeX\ experts and should be ignored by people who want merely
+ to have a system that works).
+
+ Later sections give an outline of the \MF\ code used to
+ implement Malvern. I~will not describe it in great detail but
+ I~will attempt to outline some of its weirder features. This
+ section is for the satisfaction of myself and other \MF-hackers,
+ and is of even less interest to the typical Malvern user than
+ the \TeX\ programming.
+\fi
+
+ The appendix includes a summary of how to install Malvern, some
+ of the code described in previous sections, some tables (useful
+ or otherwise) and a list of books and articles referenced
+ elsewhere.
+
+\rightline{Damian Cugley, June \n{1994}}
+
+%}}}
+%{{{ TOC
+\sectionheading{Table of Contents}
+
+\immediate\closeout\TOCfile
+\begingroup
+
+\def\TOCentrysubsec#1#2#3{#1\ #2\quad}
+
+\input \jobname.toc
+\endgroup
+%}}}
+%}}} preliminary matter
+\bye
+%}}} maman.tex
+
+
+%Local variables:
+%fold-folded-p: t
+%tex-has-children: t
+%fill-prefix: "\t"
+%End:
+
diff --git a/fonts/malvern/doc/maman.toc b/fonts/malvern/doc/maman.toc
new file mode 100644
index 0000000000..b13d185e98
--- /dev/null
+++ b/fonts/malvern/doc/maman.toc
@@ -0,0 +1,56 @@
+\TOCentrysection{$ \textfont 0=\font 1 $}{Conventions used in this handbook}{2}
+\TOCentrysubsec{$ \textfont 0=\font 1.1 $}{Citations and references}{2}
+\TOCentrysubsec{$ \textfont 0=\font 1.2 $}{Syntax descriptions}{2}
+\TOCentrysubsec{$ \textfont 0=\font 1.3 $}{Composite letters}{2}
+\TOCentrysubsec{$ \textfont 0=\font 1.4 $}{Hyphens and dashes}{2}
+\TOCentrysubsec{$ \textfont 0=\font 1.5 $}{Sundry quotation marks}{3}
+\TOCentrysubsec{$ \textfont 0=\font 1.6 $}{How to refer to Malvern fonts}{3}
+\TOCentrysection{$ \textfont 0=\font 2 $}{Malvern's font names}{4}
+\TOCentrysubsec{$ \textfont 0=\font 2.1 $}{Numeric style codes}{4}
+\TOCentrysubsec{$ \textfont 0=\font 2.2 $}{The style codes used with Malvern}{4}
+\TOCentrysubsec{$ \textfont 0=\font 2.3 $}{\TeX \ font names}{4}
+\TOCentrysubsec{$ \textfont 0=\font 2.4 $}{Naming Malvern fonts in Karl Berry's system}{5}
+\TOCentrysection{$ \textfont 0=\font 3 $}{Using Malvern with \LaTeXe \ or NFSS\vn 2}{6}
+\TOCentrysubsec{$ \textfont 0=\font 3.1 $}{Background to \LaTeXe }{6}
+\TOCentrysubsec{$ \textfont 0=\font 3.2 $}{NFSS\vn 2}{6}
+\TOCentrysubsec{$ \textfont 0=\font 3.3 $}{Malvern in NFSS\vn 2}{7}
+\TOCentrysection{$ \textfont 0=\font 4 $}{Using Malvern with \LaTeX ~\n {2.09}}{7}
+\TOCentrysubsec{$ \textfont 0=\font 4.1 $}{Using NFSS}{7}
+\TOCentrysubsec{$ \textfont 0=\font 4.2 $}{Making fonts change size without NFSS}{8}
+\TOCentrysubsec{$ \textfont 0=\font 4.3 $}{Which fonts to use with \LaTeX \ \n {2.09}}{9}
+\TOCentrysection{$ \textfont 0=\font 5 $}{Using Malvern with plain \TeX : {\tt maamac.tex}}{9}
+\TOCentrysubsec{$ \textfont 0=\font 5.1 $}{Ligatures}{9}
+\TOCentrysubsec{$ \textfont 0=\font 5.2 $}{Special letters}{10}
+\TOCentrysubsec{$ \textfont 0=\font 5.3 $}{Sundry symbols}{10}
+\TOCentrysubsec{$ \textfont 0=\font 5.4 $}{Old-style and ranging numerals}{11}
+\TOCentrysubsec{$ \textfont 0=\font 5.5 $}{Small captials}{11}
+\TOCentrysection{$ \textfont 0=\font 6 $}{The encoding of Malvern fonts}{12}
+\TOCentrysubsec{$ \textfont 0=\font 6.1 $}{The Malvern font-encoding conventions}{12}
+\TOCentrysubsec{$ \textfont 0=\font 6.2 $}{Malvern A Encoding}{12}
+\TOCentrysubsec{$ \textfont 0=\font 6.3 $}{Malvern B Encoding}{14}
+\TOCentrysubsec{$ \textfont 0=\font 6.4 $}{Malvern C Encoding}{15}
+\TOCentrysubsec{$ \textfont 0=\font 6.5 $}{Malvern G encoding}{15}
+\TOCentrysection{$ \textfont 0=\font 7 $}{Composite letters used in some languages}{17}
+\TOCentrysection{$ \textfont 0=\font 8 $}{Installation summary}{18}
+\TOCentrysubsec{$ \textfont 0=\font 8.1 $}{Getting Malvern via FTP}{18}
+\TOCentrysubsec{$ \textfont 0=\font 8.2 $}{Generic driver file}{18}
+\TOCentrysubsec{$ \textfont 0=\font 8.3 $}{Malvern encodings}{18}
+\TOCentrysubsec{$ \textfont 0=\font 8.4 $}{Malvern font names}{18}
+\TOCentrysubsec{$ \textfont 0=\font 8.5 $}{Unpacking Malvern}{19}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.1 $}{Source files ({\tt /source})}{19}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.2 $}{Driver files ({\tt /drivers})}{19}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.3 $}{\TeX \ input files ({\tt /tex})}{19}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.4 $}{Documentation files ({\tt /doc}, {\tt /dvi})}{19}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.5 $}{Virtual font files ({\tt /vf})}{20}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.5.6 $}{Font metric files ({\tt /tfm})}{20}
+\TOCentrysubsec{$ \textfont 0=\font 8.6 $}{Using mff to generate Malvern fonts}{20}
+\TOCentrysubsec{$ \textfont 0=\font 8.7 $}{Generating Malvern fonts without mff}{20}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.7.1 $}{Values for {\it encoding}}{21}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.7.2 $}{Values for {\it weight}}{21}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.7.3 $}{Values for {\it hratio}}{22}
+\TOCentrysubsubsec{$ \textfont 0=\font 8.7.4 $}{Values for {\it slant} and {\it italicness}}{22}
+\TOCentrysection{$ \textfont 0=\font 9 $}{Copying Malvern and reporting bugs}{23}
+\TOCentrysection{$ \textfont 0=\font 10 $}{Fontinst}{23}
+\TOCentrysection{$ \textfont 0=\font 11 $}{To-do list}{24}
+\TOCentrysection{$ \textfont 0=\font 12 $}{References}{25}
+\TOCentrysection{$ \textfont 0=\font 13 $}{Index}{28}
diff --git a/fonts/malvern/doc/pdcdcap.tex b/fonts/malvern/doc/pdcdcap.tex
new file mode 100644
index 0000000000..458c2da737
--- /dev/null
+++ b/fonts/malvern/doc/pdcdcap.tex
@@ -0,0 +1,28 @@
+% pdcdcap.tex - drop capitals for start of paragraphs
+% Copyright (C) 1990-1991 Damian Cugley
+
+\newcount\dropcaptmp
+
+% #1 -- font to use
+% #2 -- letter to use as dropcap
+% #3 -- rest of 1st word
+% #4 -- second word of paragraph
+%
+\gdef\dropcap#1#2#3 #4 %
+{%
+ \smallbreak % finish previous par
+ \setbox0=\hbox{#1hX\/}\dimen0=\ht0
+ \setbox0=\hbox{hX}\advance\dimen0 by -\ht0 % d := ht(#1X) - ht(X)
+ \dropcaptmp=\dimen0 \advance\dropcaptmp+\hfuzz
+ \divide\dropcaptmp\baselineskip \global\advance\dropcaptmp +1
+ % c := ((d + hfuzz)/bl + 1)
+ \message{bl=\the\baselineskip\space d=\the\dimen0 \space
+ c=\the\dropcaptmp }
+ \dimen0 = \dropcaptmp\baselineskip \advance\dimen0 by -\baselineskip
+ % d := (c - 1)*bl
+ \setbox0=\hbox{#1\kern-0.0555em#2\/}%
+ \setbox0=\hbox{\smash{\lower\dimen0 \box0 }}%
+ \hangindent=\wd0 \hangafter=-\dropcaptmp
+ {\parindent=0pt \leavevmode}%
+ \llap{\box0 }\uppercase{#3}\space \uppercase{#4}\space
+}
diff --git a/fonts/malvern/doc/pdcfmt.tex b/fonts/malvern/doc/pdcfmt.tex
new file mode 100644
index 0000000000..9c16d8f366
--- /dev/null
+++ b/fonts/malvern/doc/pdcfmt.tex
@@ -0,0 +1,361 @@
+% pdcfmt.tex 1.1.9 1994/07/20 -- macros for larger-scale formatting of text
+% Copyright 1991, 1992, 1993 P. Damian Cugley.
+
+%%% @TeX-macro-file {
+%%% filename = "pdcfmt.tex",
+%%% version = "1.1.9",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "TeX, plain TeX, macros",
+%%% supported = "Maybe",
+%%% abstract = "Formatting macros for plain TeX documents.",
+%%% dependencies = "pdcutil.tex",
+%%% }
+
+%{{{ pdcfmt.tex
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \gdef\version{1.1.9} \gdef\lastedit{pdc 1994/07/20}
+}\the\toks0
+\message{\version\space \lastedit}
+\ifx\utilsversion\UNDEFINED \input pdcutil \fi
+
+%{{{ \everypar -- \noindenttrue and \parbox
+
+\newif\ifnoindent
+% If set then next paragraph is not indented
+
+\newbox\parbox
+\newdimen\parboxsep \parboxsep=1pc
+% box to go at left of current paragraph -- usually a \vtop or void:
+% If not void then next paragraph is not indented, and
+% the box is set \parboxsep from left margin.
+
+\everypar=
+{%
+ \ifvoid\parbox
+ \ifnoindent {\setbox0=\lastbox}\global\noindentfalse \fi
+ % after \noindent this has no effect anyway
+ \else
+ {\setbox0=\lastbox}\global\noindentfalse % implied noindenttrue
+ \dp\parbox=0pt
+ \hbox to 0pt{\hss \box\parbox \hskip\parboxsep}%
+ \fi
+}
+%}}}
+\newdimen\envindent \envindent=1pc % used when \parindent=0pt
+\def\endenv
+{
+ \par
+ \ifdim\lastskip<\smallskipamount \removelastskip\smallskip \fi
+ \global\noindenttrue
+}
+ % generic end of environ.
+%{{{ Bullets
+
+\newcount\bulletlevel \bulletlevel=-1
+\def\bulletsign
+{%
+ \ifcase\bulletlevel \bullet\or --\or \circ\else \cdot\fi
+}
+
+\def\bullets
+{%
+ \par
+ \advance\bulletlevel 1
+ \def\\{\smallskip\noindent\llap{\bulletsign\enspace}\ignorespaces}
+ \ifdim\parindent>0pt
+ \advance\leftskip\parindent
+ \else
+ \advance\leftskip\envindent
+ \fi
+ \the\everybullets
+}
+
+\let\endbullets=\endenv
+
+\newcount\enumerateitem
+\def\enumerate
+{%
+ \global\enumerateitem=0
+ \def\bulletsign{\global\advance\enumerateitem1 \n{\the\enumerateitem}.}%
+ \bullets
+}
+
+\let\endenumerate=\endbullets
+%}}}
+%{{{ Tagged
+
+\newdimen\taglabelwidth
+\def\tagged % like bullets, but with tags
+{%
+ \par
+ \def\\%
+ {
+ \smallskip\noindent
+ \setbox0=\hbox\bgroup % matched by \finishtag
+ \the\everytag\ignorespaces
+ \let\\\finishtag
+ }
+ \def\finishtag
+ {
+ \unskip\enspace\egroup % matches \\
+ \ifdim \wd0 < \taglabelwidth
+ \wd0=\taglabelwidth
+ \llap{\box0}%
+ \else
+ \hskip-\taglabelwidth
+ \unhbox0
+ \hfil\break
+ \vadjust{\nobreak}%
+ \fi
+ \ignorespaces
+ }
+ \ifdim\leftmargin=0pt
+ \ifdim\parindent>0pt
+ \envindent=2\parindent
+ \fi
+ \leftskip=\envindent
+ \taglabelwidth=\envindent
+ \else
+ \taglabelwidth=\leftmargin
+ \fi
+ \the\everytagged
+}
+
+\let\endtagged=\endenv
+%}}}
+%{{{ Quotations
+
+\def\quotation
+{
+ \smallskip
+ \ifdim\parindent>0pt
+ \advance\leftskip\parindent % \advance\rightskip\parindent
+ \else
+ \advance\leftskip\envindent % \advance\rightskip\envindent
+ \fi
+ \noindenttrue
+ \the\everyquotation
+}
+\let\endquotation=\endenv
+%}}}
+%{{{ lines (for verbatim listings etc)
+
+\def\lines
+{
+ \smallskip\hrule\nobreak\smallskip
+ \obeylines
+ \parindent=0pt \parskip=0pt
+ \parfillskip=0pt plus 1fil
+ \the\everylines % user chooses font to use
+ \counta=0 \countb=5 \everypar{\linenum}% number lines
+ % % Cut into left margin to allow for at least 72 columns:
+ % \leftskip=-\leftmargin \advance\leftskip2em % space for ~3 digits
+ % \setbox0=\hbox{\tt x}\dimen0=-72\wd0 % estimate of 72 \tt characters
+ % \advance\dimen0\hsize
+ % \ifdim\leftskip<\dimen0 \leftskip=\dimen0 \fi
+ \let\end\linesend
+}
+
+\let\normalend\end
+{\obeylines \gdef\linesend#1^^M{\normalend #1 }}
+
+\def\endlines
+{
+ \par
+ \ifdim\lastskip<\smallskipamount \removelastskip\nobreak\smallskip \fi
+ \hrule\smallskip
+ \global\noindenttrue
+}
+
+\def\linesskipped#1%
+{%
+ \hskip20pt\strut$\vdots$\hskip20pt{\rm(\it #1 lines omitted\rm)}\par
+ \advance\counta#1\relax
+}
+%}}}
+%{{{ Displays, Tables -- wrapper about \halign
+
+% \begin table #\hfil&#\cr
+% ...&...\cr
+% \end table
+
+\def\table
+{
+ \noindent
+ $$ % matching $$ is in \endtable
+ \halign \bgroup\indent
+}
+\def\endtable
+{
+ \crcr \egroup $$ % matches $$ in \table
+ \global\noindenttrue
+}
+
+% Random displayed text
+%
+% \begin display
+% ... [&...\cr...]
+% \end display
+
+
+\def\display
+{%
+ $$% $$ for matching
+ \halign\bgroup\indent##\hfil&&\quad##\hfil\cr
+}
+
+\def\enddisplay
+{%
+ \crcr
+ \egroup% $$ for matching
+ $$
+}
+
+%}}}
+%{{{ (E)BNF
+
+\def\bnf
+{
+ \nobreak\smallskip
+ \advance\leftskip2\parindent \parindent=-\parindent
+ \parskip=0.5\smallskipamount
+ \rightskip=1\rightskip plus 3em
+ \def\\{$\mid$} % use \\ for alternatives
+ \def\>{\unskip\enspace$::=$\enspace\ignorespaces}
+ \def|{`\begingroup\tt\setupverbatim\def|{\endgroup'}}
+ \chardef\*=`\*
+ \the\everybnf
+}
+\def\endbnf
+{
+ \smallskip
+ \global\noindenttrue
+}
+
+\newtoks\everybnf
+
+%}}}
+%{{{ headings
+
+\newdimen\leftmargin % size of left margin
+% Set this to 0pt for headings in text, and > 0pt for left margin headingfs
+%
+
+% #1 is skip before -- usu bigskip or medskip
+% #2 is pre-text text -- usu. style: e.g. \headerfonts or just \bf
+% #3 is post-text text -- e.g. to do a rule, maybe?
+% #4 is text of heading
+%
+\newskip\headingtemp
+\def\doheading#1#2#3#4%
+{
+ \ifdim\lastskip<#1\relax \removelastskip \vskip#1\relax \fi
+ \ifdim \leftmargin>0pt
+ \global\setbox\parbox=\vtop
+ {%
+ \hsize=\leftmargin \advance\hsize-\parboxsep
+ \parindent=0pt
+ \leftskip=0pt \rightskip=0pt plus 3em
+ \hyphenpenalty=10000 \exhyphenpenalty=5000
+ \strut#2#4#3
+ }
+ \else
+ \begingroup
+ \parindent=0pt \parfillskip=0pt plus 1fil
+ \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ \hyphenpenalty=10000 \exhyphenpenalty=5000
+ \strut#2#4#3
+ \global\headingtemp=\baselineskip % sets fixed part only
+ \par
+ \endgroup
+ \advance\headingtemp-\baselineskip
+% \advance\headingtemp\smallskipamount
+ \nobreak
+ \vskip 1.0\headingtemp
+ \smallskip
+ \noindenttrue
+ \fi
+}
+
+% #1 is white space at top of page
+% #2 is pre-text
+% #3 is post-text
+% #4 is text of heading
+%
+\def\newpageheading#1#2#3#4%
+{
+ \vfill\supereject % ensure no insertions still floating
+ \null\vskip#1\relax
+ \moveleft\leftmargin\vbox
+ {
+ \advance\hsize\leftmargin
+ \parindent=0pt \parfillskip=0pt plus 1fil
+ \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ \hyphenpenalty=10000 \exhyphenpenalty=5000
+ \strut#2#4#3
+ \global\headingtemp=\baselineskip % sets fixed part only
+ \par
+ }
+ \advance\headingtemp-\baselineskip
+ \advance\headingtemp\smallskipamount
+ \vskip \headingtemp
+ \smallskip
+ \noindenttrue
+ \def\tmp{#4}
+ \message{*\expandafter\TOCtrim\meaning\tmp. }
+}
+%}}}
+%{{{ footnotes
+
+\newcount\notecount % initially 0
+\def\note
+{%
+ \global\advance\notecount+1
+ \footnote{\number\notecount}%
+}
+
+\catcode`\@=11 % See TeXbook p.363:
+\def\footnote#1{\let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \flushtop{\footnotetextmark{#1}}\@sf\vfootnote{#1}}
+\def\vfootnote#1%
+{\insert\footins\bgroup % matched by \@foot
+ \interlinepenalty=\interfootnotelinepenalty
+ \leftskip=0pt
+ \the\everyfootnote
+ \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
+ \floatingpenalty=20000
+ \indent\footstrut
+ \ifdim\parindent>1em
+ \llap{\footnotenotemark{#1}\enspace}%
+ \else
+ \footnotenotemark{#1}\enspace
+ \fi
+ \futurelet\next\fo@t
+}
+\def\@foot{\smallskip\egroup}
+\catcode`\@=12
+\def\footnotetextmark#1{$^{#1}$}
+\def\footnotenotemark#1{$^{#1}$}
+%}}}
+%{{{ Hooks
+
+\newtoks\everybullets
+\newtoks\everytagged
+\newtoks\everytag % e.g., \everytag={\bf}
+\newtoks\everyquotation % e.g., \everyquotation={\smallfonts}
+\newtoks\everylines
+\newtoks\everyfootnote
+\newtoks\everyfootnotemark%} }}
+%}}} pdcfmt.tex
+
+%Local variables:
+%fold-folded-p:t
+%tex-macros-p:t
+%End:
diff --git a/fonts/malvern/doc/pdcfsel.tex b/fonts/malvern/doc/pdcfsel.tex
new file mode 100644
index 0000000000..0333142282
--- /dev/null
+++ b/fonts/malvern/doc/pdcfsel.tex
@@ -0,0 +1,209 @@
+%{{{ pdcfsel.tex 1.1.6 92/07/17 -- basic font loading
+% started - Damian Cugley <pdc@prg.ox.ac.uk> Tue. 23 Apr. 1991
+{\catcode`\%=12 \gdef\ldfontsversion{1.1.6 <pdc 92/07/17>}}
+% \catcode for SCCS's sake
+
+\ifx\utilsversion\UNDEFINED \input utils \fi
+\counta=\catcode`\_ \catcode`\_=11
+
+%{{{ setting the AUTOLOAD flag
+
+% If autoloading is true then the magnification and fonts used
+% are written to a file \jobname.fnt in the hope that it will be
+% possible to create them easily using the mff program.
+
+\newwrite\font_list
+\newif\if_autoloading
+
+\def\autoloadfonts % set autoload flag to TRUE
+{
+ \_autoloadingtrue
+ \immediate\openout\font_list=\jobname.fnt
+ \def\setmag##1{\writemag{##1}\mag##1\relax}
+}
+
+\def\setmag#1{\mag=#1\relax \write_mag }
+
+\def\write_mag#1% #1 is file #2 is mag
+{{%
+ \def\magstep##1{\ifcase##1 1000\or1200\or1440\or1728\or2074\or2488\fi}%
+ \edef\tmp{-s #1}%
+ \write\font_list\tmp
+}}
+
+%}}}
+%{{{ how to set up the csname for one font
+
+% All parameters are token strings
+% #1 is fontset name, e.g., body
+% #2 is the size part of external name
+% -- either ` at 12pt' or `12'
+% #3 is fam name -- e.g., rm
+% #4 is "external" name sans size info -- e.g., cmbx
+% This does the equivalent of \font\bodyrm=cmbx12
+% except if autoloading then the actual \font is delayed.
+\def\ld_font#1#2#3#4%
+{\expcs\ifx{#1#3}\relax
+ \if_autoloading
+ \expcs\edef{#1#3}%
+ {%
+ \write\font_list{#4#2}% make note that font used
+ \def\noexpand\subfont
+ {\global\font\noexpcs{#1#3}=cmr10 }% use i\subfont if not found
+ \global\font\noexpcs{#1#3}=#4#2\relax % load the font
+ \noexpand\everyloadfont\noexpcs{#1#3}{#4#2}% hook
+ \expcs\noexpand{#1#3}% and select it
+ }%
+ \else
+ \global\expcs\font{#1#3}=#4#2\relax
+ \expcs\everyloadfont{#1#3}{#4#2}%
+ \fi
+ \else
+ % The font is already loaded; call \everyloadfont anyway
+ \expcs\everyloadfont{#1#3}{#4#2}%
+ \fi
+}
+
+% Ad-hoc laoding of fonts by user
+% #1 is csname
+% #2 is tokens for external name
+\def\ldfont#1#2%
+{%
+ {\escapechar=-1\xdef\ldfont_tmp{{\string#1}}}% get name sans \
+ \expandafter\ld_font\ldfont_tmp{#2}{}{}%
+}%
+%{%
+% \if_autoloading \write\font_list{#2}\fi
+% \def\subfont{\font#1=cmr10 }%
+% \global\font#1=#2\relax
+% \everyloadfont#1{#2}%
+%}
+
+% Hook for user's customization
+% #1 is one token, the csname of the newly-loaded font
+% #2 is token string that is its external name
+\def\everyloadfont#1#2{}
+%}}}
+%{{{ how to set up a fontset
+
+% fontset map macro:
+% \FOOmap is of form {\m{rm}{ma}[\@]\f{it}{mai}...}
+% \f -- non-maths font
+% \m -- maths font (has \textfont and \scriptfont)
+% \M -- ditto plus \scriptscriptfont
+
+% Set up a fontset
+% #1 is name
+% #2 is \FOOmap
+% #3 is size
+% #4 is baselineskip
+% #5 is script (fontset name)
+% #6 is scriptscript
+\def\fontset#1#2#3#4#5#6%
+{
+ \xfontset{#1}{#2}{#3}
+ %
+ % set up the \bodyfonts macro
+ \expcs\edef{#1fonts}%
+ {%
+ \if_autoloading \expcs\noexpand{#1mathsfonts}\fi
+ \noexpand\set_short_names{#1}{#5}{#6}\noexpand#2%
+ % \def\rm{...}...
+ % \textfont\rmfam\bodyrm
+ \noexpand\set_baseline{#4}% set \baselineskip etc.
+ \noexpand\rm
+ }
+ \if_autoloading
+ % set up \bodymathsfonts macro
+ \expcs\def{#1mathsfonts}{\force_maths_fonts{#1}{#5}{#6}#2}
+ \fi
+}
+
+% xfontset can be used to make a fontset that is never selected
+% in its own right -- e.g., used for maths subscripts only
+%
+% #1 is name
+% #2 is map macro
+% #3 is size
+\def\xfontset#1#2#3%
+{
+ % call \ld_font for each font:
+ \def\f##1##2{\ld_font{#1}{#3}{##1}{##2}}
+ \let\m=\f \let\M=\f
+ \def\@##1##2##3{\ld_font{#1}{ at #3pt }{##2}{##3}}%
+ #2
+}
+
+% Set up the \rm style names and the \textfont etc. vectors
+% #1 -- fontset name -- e.g., body
+% #2 -- script -- e.g., small
+% #3 -- scriptscript -- e.g., tiny
+% followed by map macro
+\def\set_short_names#1#2#3%
+{%
+ \let\@\relax
+ \def\f##1##2%
+ {%
+ \expcs\edef{##1}{\noexpcs{#1##1}}% has to be def'd not let'd
+ }%
+ \def\m##1##2%
+ {%
+ \expcs\textfont{##1fam}\csname#1##1\endcsname
+ \expcs\scriptfont{##1fam}\csname#2##1\endcsname
+ \expcs\edef{##1}{\fam\expcs\noexpand{##1fam}\expcs\noexpand{#1##1}}%
+ }%
+ \def\M##1%
+ {%
+ \expcs\scriptscriptfont{##1fam}\csname#3##1\endcsname
+ \m{##1}%
+ }%
+}
+
+\def\set_baseline#1%
+{%
+ \baselineskip#1\relax \normalbaselineskip\baselineskip
+ \jot0.25\baselineskip
+ \smallskipamount 0.25\baselineskip plus 0.083\baselineskip
+ minus 0.083\baselineskip
+ \medskipamount 0.5\baselineskip plus 0.167\baselineskip
+ minus 0.167\baselineskip
+ \bigskipamount 1\baselineskip plus 0.333\baselineskip
+ minus 0.333\baselineskip
+ \abovedisplayskip=\medskipamount
+ \abovedisplayshortskip=\abovedisplayskip
+ \advance\abovedisplayshortskip-1\abovedisplayskip
+ \belowdisplayskip=\medskipamount
+ \belowdisplayshortskip=\smallskipamount
+}
+
+% Force all the fonts used in maths to be loaded --
+% then redefine #1mathsfonts to be \relax
+% #1 -- fontset name
+% #2 -- script fontset name
+% #3 -- scriptscript fontset name
+\def\force_maths_fonts#1#2#3%
+{%
+ %\message{Loading maths fonts for #1...}%
+ \let\@\relax
+ \def\f##1##2{}%
+ \def\m##1##2{\csname#1##1\endcsname \csname#2##1\endcsname}%
+ \def\M##1{\csname#3##1\endcsname \m{##1}}%
+ \global\expcs\let{#1mathsfonts}\relax
+}
+%}}}
+%{{{ example fontset templates
+
+\chardef\rmfam=0
+\chardef\mifam=1
+\chardef\syfam=2
+% \itfam \bffam \ttfam \slfam set in plain.tex
+
+%}}}
+
+\catcode`\_=\counta
+%}}} pdcfsel.tex
+
+%Local variables:
+%fold-folded-p: t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/doc/pdchyex.tex b/fonts/malvern/doc/pdchyex.tex
new file mode 100644
index 0000000000..6686b7a164
--- /dev/null
+++ b/fonts/malvern/doc/pdchyex.tex
@@ -0,0 +1,38 @@
+\lefthyphenmin=2 \righthyphenmin=3 \uchyph=0
+
+\hyphenation
+{
+ anth-ro-po-morphic
+ art-iest cig-ar-ette
+ bio-logy bio-chem-ic-al bio-chem-is-try
+ boy-friend
+ Brit-ain Brit-ish
+ com-ic com-ics Com-ic Com-ics
+ con-fuse con-fused Cug-ley
+ dogs-body
+ Dor-mouse
+ Gai-man
+ graph-ic
+ im-med-i-ate im-med-i-ately issue
+ McKean
+ mis-hap mis-haps
+ news-letter news-paper
+ Night-crawler
+ origin-ally origin-ator
+ phys-ique phys-iques
+ porn-o-graphy porn-o-graphic
+ rec-om-mend-ation
+ Ser-geant ser-geant
+ Sien-kie-wicz
+ spon-tan-e-ous spon-tan-e-ously
+ stop-ped
+ strip-ped
+ teen-ager teen-agers
+ tem-per-men-tal
+ Thatch-er-ism Thatch-er-ite
+ under-ground under-grounds
+ var-i-able
+ venge-ance
+ Warp-smith Warp-smiths
+ whirl-pool
+}
diff --git a/fonts/malvern/doc/pdcidx.tex b/fonts/malvern/doc/pdcidx.tex
new file mode 100644
index 0000000000..393049d234
--- /dev/null
+++ b/fonts/malvern/doc/pdcidx.tex
@@ -0,0 +1,133 @@
+%{{{ %M% 1.%I% pdc %E% -- indexing macros
+
+%%Requires: utils.tex
+
+% This is the interface to the makeindex program
+
+\message{starting index file}
+\newwrite\idxfile
+\openout\idxfile=\jobname.idx
+
+% Use Knuth's ^ and ^^ notations.
+\newif\ifsilentidx
+\def\idxcirk{\ifmmode\def\next{^}\else\let\next=\idxbegin\fi\next}
+\def\idxbegin{\futurelet\next\idxbeginswitch}
+\def\idxbeginswitch
+{%
+ \ifx\next\idxcirk
+ \let\next=\idxsilent
+ \else
+ \silentidxfalse
+ \let\next=\idx
+ \fi
+ \next
+}
+\catcode`\^=13 \let^=\idxcirk
+\macappend\verbatimplains{\\\^}
+\def\idxsilent^{\silentidxtrue\idx}
+
+% ^{foo} ^|foo| ^|\foo| ^<foo> ^$foo$
+\def\idx{\futurelet\next\idxswitch}
+\def\idxswitch
+{%
+ \begingroup
+ \ifx\next|%
+ \aftergroup\vidx
+ \else\ifx\next\<%
+ \aftergroup\angleidx
+ \else\ifx\next$% $ for bracket matching
+ \aftergroup\mathsidx
+ \else\ifx\next"% $ for bracket matching
+ \aftergroup\quotedidx
+ \else
+ \aftergroup\normalidx
+ \fi\fi\fi\fi
+ \endgroup
+}
+\def\vidx|%
+{%
+ \catcode`\\=13 % prevent "\" from forming control sequences
+ \futurelet\next\vidxswitch
+}
+\def\vidxswitch%
+{%
+ \catcode`\\=0
+ \ifx\next\empty % ^|\foo|
+ \let\next\csidx
+ \else % ^|foo|
+ \let\next\noncsidx
+ \fi
+ \next
+}
+{\catcode`\@=0 \catcode`\\=13
+@gdef@csidx\#1|%
+{%
+ @def@next{{@tt@char`@\#1}}%
+ @edef@text{#1}%
+ @emitidx
+}}
+\def\noncsidx#1|%
+{%
+ \def\next{{\tt#1}}%
+ \edef\text{#1}%
+ \emitidx
+}
+{\catcode`\@=0 \catcode`\\=13 @gdef\{}} % make "\" ifx-equivalent to \empty
+
+\def\angleidx\<#1>%
+{%
+ \def\next{\<#1>}%
+ \def\text{#1}%
+ \emitidx
+}
+\def\mathsidx$#1$%
+{%
+ \def\next{$#1$}%
+ \def\text{#1}%
+ \emitidx
+}
+\def\quotedidx"#1"%
+{%
+ \def\next{""#1""}%
+ \def\text{#1}%
+ \emitidx
+}
+\def\normalidx#1%
+{%
+ \def\text{#1}%
+ \let\next=\text
+ \emitidx
+}
+
+\def\emitidx
+{%
+ \edef\writeit
+ {%
+ \write\idxfile{\string\idx{\expandafter\gobbleARROW\meaning\text
+ \ifx\text\next\else
+ @\expandafter\gobbleARROW\meaning\next
+ \fi}{\noexpand\folio}}%
+ }%
+ \writeit
+ \ifsilentidx \ignorespaces \else \next \fi
+}
+\def\gobbleARROW#1:->{}
+
+% The simple case -- write the parameter to the file
+\def\index#1{\def\next{#1}\let\text=\next \silentidxtrue\emitidx}
+{\plain|
+ \gdef\dfnidx#1{\index{#1|idxunderline}}
+ \gdef\qdfnidx#1{\index{#1@""#1""|idxunderline}}
+}
+\def\ttidx#1{^|#1|}
+
+% Things that go after `|':
+\def\idxunderline#1{$\underline{\hbox{#1}}$}
+\def\see#1#2{{\it see}\space #1}
+
+%}}} %M%
+
+% Local variables:
+% fold-folded-p: t
+% tex-macros-p: t
+% End:
diff --git a/fonts/malvern/doc/pdcimth.tex b/fonts/malvern/doc/pdcimth.tex
new file mode 100644
index 0000000000..53b43bb905
--- /dev/null
+++ b/fonts/malvern/doc/pdcimth.tex
@@ -0,0 +1,25 @@
+% pdcimth.tex 1.1.2 91/12/12 -- make maths use text italic family for letters
+% Very few RL families have separate maths and text italic fonts.
+
+% count0 -- mathcode for current u.c. char
+% count1 -- mathcode for current l.c. char
+% count2 -- ASCII code of current u.c. char
+% count3 -- ASCII code of current l.c. char
+% count4 -- number of character left to redefine
+
+\begingroup % preserve values of count registers
+
+ \count0=\itfam \multiply\count0 256 \advance\count0"7000 \count1=\count0
+ \advance\count0+`A \advance\count1+`a
+ \count2=`A \count3=`a
+ \count4=26
+
+ \loop
+ \ifnum\count4>0
+ \advance\count4-1
+ \global\mathcode\count2=\count0 \global\mathcode\count3=\count1
+ \advance\count0+1 \advance\count1+1
+ \advance\count2+1 \advance\count3+1
+ \repeat
+
+\endgroup
diff --git a/fonts/malvern/doc/pdcmigr.tex b/fonts/malvern/doc/pdcmigr.tex
new file mode 100644
index 0000000000..38a867f2fd
--- /dev/null
+++ b/fonts/malvern/doc/pdcmigr.tex
@@ -0,0 +1,14 @@
+% mitgreek.tex 1.1 -- use CMMI for upper-case Greek letters
+% (1) more consistent and (2) works when no greek in \rm font
+
+\mathchardef\Gamma = "7100
+\mathchardef\Delta = "7101
+\mathchardef\Theta = "7102
+\mathchardef\Lambda = "7103
+\mathchardef\Xi = "7104
+\mathchardef\Pi = "7105
+\mathchardef\Sigma = "7106
+\mathchardef\Upsilon = "7107
+\mathchardef\Phi = "7108
+\mathchardef\Psi = "7109
+\mathchardef\Omega = "710A
diff --git a/fonts/malvern/doc/pdcoput.tex b/fonts/malvern/doc/pdcoput.tex
new file mode 100644
index 0000000000..c215809fa8
--- /dev/null
+++ b/fonts/malvern/doc/pdcoput.tex
@@ -0,0 +1,432 @@
+% pdcoput.tex 4.1.6 1994/07/20 -- output routines for Stomping Scene
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-macro-file {
+%%% filename = "pdcoput.tex",
+%%% version = "4.1.6",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "TeX, plain TeX, output routine",
+%%% supported = "Maybe",
+%%% abstract = "An output routine for Plain TeX docs.",
+%%% dependencies = "pdcutil.tex",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ pdcoput.tex
+%{{{ preamble
+\ifx\utilsversion\UNDEFINED \input pdcutil \fi
+
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\pdcoputversion{4.1.6 <pdc 1994/07/20>}
+}\the\toks0
+\message{\pdcoputversion}
+
+%}}} preamble
+%{{{ parameters
+
+\newdimen\paperwd \newdimen\paperht % Size of paper
+\newdimen\bodywd \newdimen\bodyht % size of page body (text etc.)
+\newdimen\gridwd \newdimen\gridht % size of grid slots
+\newdimen\colwd \newdimen\colht % width & height of text columns
+
+\newdimen\topmarge \topmarge=20mm
+\newdimen\outmarge \outmarge=20mm
+\newdimen\innmarge \innmarge=20mm
+\newdimen\botmarge \botmarge=27mm
+% Size of top, bottom, inner and outer margins between paper edge and
+% edge of page body.
+% botmarge is an approximation -- the margin at bottom will be
+% increased slightly in order to make \bodyht a good value wrt
+% \baselineskip.
+
+\newskip\headlineskip % distance betw baselines of headline & 1st body line
+\newskip\footlineskip % ditto for footline
+\headlineskip=10mm \footlineskip=10mm
+
+\newdimen\outputrule \outputrule=0.1mm % default thickness for rules
+
+\newdimen\caprule \caprule=\outputrule
+\newskip\capsep \capsep=5mm
+% rule and separation between caption and body text
+
+\newdimen\colrule \colrule=\outputrule
+\newdimen\colsep \colsep=5mm
+% ditto for between columns
+
+\newcount\ncols \ncols=1
+% Number of columns
+
+\newbox\partialpage % stores partial pages when balancing columns
+
+\newbox\topbox \newbox\botbox % vboxes placed around body
+\newbox\leftbox \newbox\rightbox % hboxes placed around body
+
+\chardef\pagebox=255
+
+\let\collist\empty % list macro of \makecolumns
+\let\pagelist\empty % list macro of \makepages
+
+\newtoks\everypage % expanded at start of vbox being shipped out
+\newtoks\everycaption % expanded at start of every caption
+
+%}}} parameters
+%{{{ make a column (vbox)
+
+\newdimen\toptotal \newdimen\bottotal
+
+% Helper macro -- calculate total size of space + caption for
+% top/bot of a column
+% #1 <dimen name> caculate total into here
+% #2 <8-bit number> place cap in this box
+% #3 <dimen> space to be left
+% #4 text text of caption, or empty
+\def\calctotal#1#2#3#4%
+{%
+ \setbox#2=\vbox{\the\everycaption#4}%
+ #1=\ht#2%
+ \advance#1\baselineskip \advance#1-1sp
+ \divide#1\baselineskip \multiply#1\baselineskip
+ \advance#1#3%
+ \ifdim#1>0pt \advance#1\capsep \fi
+}
+
+% Create one column of stuff of height \colht, as a vbox
+% If \capsep=\baselineskip and captions done in fonts of same
+% baselineskip as body, then baselines should all line up neatly
+% (this takes some doing!).
+% #1 <dimen> space at top of col
+% #2 text text of top caption, or empty
+% #3 <8-bit number> box to make middle out of
+% #4 text text of bot cap, or empty
+% #5 <dimen> space at bottom of col
+\def\makecolumn#1#2#3#4#5%
+{%
+ \vbox to \colht
+ {
+ \calctotal\toptotal0{#1}{#2}%
+ \calctotal\bottotal2{#5}{#4}%
+ %
+ % Chop off enough text to fill in gap:
+ %
+ \dimen0=\colht
+ \ifvoid\footins\else % allow space for footnotes
+ \advance\dimen0-\ht\footins
+ \advance\dimen0-\skip\footins
+ \fi
+ \ifvoid\topins\else % allow for a \topinsert as well
+ \advance\dimen0-\ht\topins
+ \advance\dimen0-\skip\topins
+ \fi
+ \advance\dimen0-\toptotal
+ \advance\dimen0-\bottotal
+ %
+ \splittopskip=\topskip
+ \splitmaxdepth=\maxdepth
+ \setbox1=\vsplit#3to\dimen0
+ %
+ % Sandwich it all together:
+ \kern\toptotal
+ \ifdim \toptotal>0pt
+ \vbox to 0pt
+ {
+ \vss
+ \box0
+%%%% \kern-\dp\strutbox
+ \capseprule
+ \kern-\dp\strutbox
+ \kern\baselineskip
+ \kern-\topskip
+ }
+ \fi
+ \ifvoid\topins\else \unvbox\topins \vskip\skip\topins \fi
+ \dimen0=\dp1 % this will be prevdepth for bot caption
+ \ifvoid1 \vfil \else \unvbox1 \fi
+ \ifvoid\footins \else
+ \vskip\skip\footins
+ \footnoterule
+ \dimen0=\dp\footins % revise prevdepth-to-be
+ \unvbox\footins
+ \fi
+ \ifdim \bottotal>0pt
+ \vbox to 0pt
+ {
+ \prevdepth=\dimen0
+ \capseprule
+ \vtop{\unvbox2 }
+ \vss
+ }
+ \kern\bottotal
+ \fi
+ \kern-\dimen0
+ }%
+}
+
+\def\capseprule
+{%
+ \hbox to \colwd
+ {%
+ \dimen0=0.5ex \advance\dimen0-0.5\caprule
+ \dimen1=\dimen0 \advance\dimen1\caprule
+ \strut
+ \vrule height \dimen1 depth-\dimen0 width\colwd
+ }%
+}
+
+%}}} make a column
+%{{{ make body part of page (hbox)
+
+% Generate a column of text to be put in the current page body
+\def\makecolumnfromcollist#1%
+{%
+ \ifx\collist\empty
+ \makecolumn{0pt}{}{#1}{}{0pt}%
+ \else
+ \glop\temp\collist
+ \temp
+ \fi
+}
+
+\def\makebody#1%
+{%
+ \hbox to \bodywd
+ {%
+ \ifvoid\leftbox\else
+ \box\leftbox
+ \hfil \vrule width \colrule \hfil
+ \fi
+ \counta=\ncols
+ \makecolumnfromcollist{#1}%
+ \loop \ifnum\counta>1
+ \hfil \vrule width \colrule depth 0pt \hfil
+ \makecolumnfromcollist{#1}%
+ \advance\counta -1
+ \repeat
+ \ifvoid\rightbox\else
+ \hfil \vrule width \colrule \hfil
+ \box\rightbox
+ \fi
+ }%
+}
+
+%}}} make insides of page (hbox)
+%{{{ make a page (vbox)
+
+% Generate a box to be shipped out as the current page. Used in \output.
+\def\makepage
+{%
+ \vbox
+ {
+ \special{papersize=\the\paperwd,\the\paperht}%
+ \colht=\bodyht \advance\colht-\ht\partialpage
+ \advance\colht-\ht\topbox \advance\colht-\ht\botbox
+ \the\everypage
+ \makeheadline \nointerlineskip
+ \box\partialpage
+ \box\topbox
+ \ifx\pagelist\empty
+ \makebody\pagebox
+ \else
+ \glop\temp\pagelist
+ \temp
+ \fi
+ \unvbox\botbox
+ \makefootline
+ }%
+}
+
+% Generate vertical meterial with zero height to produce the headline.
+% Expanded at very top of vbox being shipped out,
+% immediately after the \everypage tokens have been read.
+% Used in \makepage.
+\def\makeheadline
+{
+ \vbox to 0pt
+ {
+ \skip0=\topskip \advance\skip0-2\ht\strutbox
+ \advance\skip0-\headlineskip
+ \vskip\skip0
+ \hbox to \bodywd{\strut\the\headline}
+ \vss
+ }
+}
+
+% Generate vertical material that gives the footline of the page.
+% Expanded immediately after the botbox, as the last thing in the
+% box that is shipped out. (Does not need to be zero-height).
+\def\makefootline
+{{
+ \baselineskip=\footlineskip
+ \hbox to \bodywd{\the\footline}
+}}
+
+%}}} make a page (vbox)
+%{{{ output
+
+\def\ssoutput
+{%
+ \ifodd\pageno \hoffset=\innmarge \else \hoffset=\outmarge \fi
+ \advance\hoffset-1 true in
+ \voffset=\topmarge
+ \advance\voffset-1truein
+ \shipout\makepage \advancepageno
+ \ifnum\outputpenalty>-20000 \else \dosupereject \fi
+ \unvbox\pagebox
+}
+
+\output={\ssoutput}
+
+%}}} output
+%{{{ automated column setting
+
+% User macro -- set paper size and other corresponding dimens
+% Use when body font + baselineskip have already been selected.
+% #1 <dimen> width
+% #2 <dimen> height
+\def\setpaper#1#2%
+{%
+ \paperwd=#1%
+ \paperht=#2%
+ \calcbodywdht
+ \calctopskip
+}
+
+% helper macro -- set bodywd, bodyht
+\def\calcbodywdht
+{
+ \bodywd=\paperwd \advance\bodywd-\outmarge \advance\bodywd-\innmarge
+ \bodyht=\paperht \advance\bodyht-\topmarge \advance\bodyht-\botmarge
+ \calctopskip
+}
+
+% set topskip to suit current font
+% bodyht is munged to be of the form N*baselineskip + topskip
+\def\calctopskip
+{
+ \setbox0=\hbox{Xbl()!gyJQ,}
+ \topskip=\ht0 \maxdepth=\dp0
+ \advance\bodyht-\topskip \divide\bodyht \baselineskip
+ \multiply\bodyht \baselineskip \advance\bodyht\topskip
+}
+
+% helper macro
+% set hsize and vsize appropriate to current #cols, topskip, bodyht,
+% and bodywd
+% if bodyht = N * baselineskip + topskip, for some N, then set
+% vsize to ncols * (N + 1) * baselineskip - baselineskip + topskip
+\def\sethsizevsize
+{
+ \hsize=\colwd
+ \vsize=\bodyht
+ \advance\vsize-\topskip \advance\vsize\baselineskip \multiply\vsize\ncols
+ \advance\vsize-\baselineskip \advance\vsize\topskip
+}
+
+% User macro
+% divide into grid of n, with k grid widths making 1 column of body
+% #1 <number> number of grid slots making up body width
+% #2 <number> number of grid slots making up one column
+% so there will be floor(#1/#2) body columns per page
+\def\setnkgrid#1#2%
+{%
+ \gridwd=\bodywd
+ \advance\gridwd-#1\colsep \advance\gridwd\colsep \divide\gridwd by #1
+ \colwd=#2\gridwd \advance\colwd#2\colsep \advance\colwd-\colsep
+ \ncols=#1 \divide\ncols#2
+ \gridht=\baselineskip
+ \capsep=\gridht
+ \sethsizevsize
+}
+
+% User macro
+% divide into n columns
+% #1 <number> number of columns per page
+\def\setncolumns#1%
+{%
+ \colwd=\bodywd
+ \advance\colwd-#1\colsep \advance\colwd\colsep \divide\colwd by #1
+ \gridwd=\colwd
+ \ncols=#1
+ \sethsizevsize
+}
+
+\def\setpaperA#1%
+{
+ \ifcase#1
+ \setpaper{841mm}{1189mm}\or % A0
+ \setpaper{594mm}{841mm}\or % A1
+ \setpaper{420mm}{594mm}\or % A2
+ \setpaper{297mm}{420mm}\or % A3
+ \setpaper{210mm}{297mm}\or % A4
+ \setpaper{148mm}{210mm} % A5
+ \else
+ \errmessage{Dunno how big DIN A#1 paper is, sorry.}
+ \fi
+}
+% default settings (using default font):
+\setpaperA4
+\setncolumns1
+
+%}}} automated column setting
+%{{{ balancing columns
+
+% Knuth's rigid balancing routine TeXbook App. D Sec. 7 (p. 396--397)
+
+\newcount\RGDncols \newdimen\RGDtopskip \newif\ifRGDfirstcol
+\newtoks\RGDsep
+
+% Take a rigid, regular box, and split into several approx equal
+% columns. Produces assignments followed by a box -- this can be
+% retrieved using \lastbox.
+% #1 <8-bit number> box to chop
+% #2 <number> #columns to make
+% #3 <dimen> value of \topskip for box
+% #4 <dimen> width of the whole shebang
+% #5 TeX code what goes between columns (e.g., \hfil)
+\def\rigidbalance#1#2#3#4#5%
+{%
+ \setbox0=\box#1\relax \RGDncols=#2\relax \RGDtopskip=#3\relax \RGDsep={#5}%
+ \hbox to #4\relax
+ {%
+ \splittopskip=\RGDtopskip \vbadness=10000
+ \RGDfirstcoltrue
+ \valign{##\vfil\cr \doRGDsplits}%
+ }%
+}
+
+% recursive helper function for above - produces the valign's body
+\def\doRGDsplits
+{%
+ \ifnum\RGDncols>0
+ % if not first folumn, put in separator
+ \ifRGDfirstcol
+ \global\RGDfirstcolfalse
+ \else
+ \noalign{\the\RGDsep}%
+ \fi
+ % split off one column (see TeXbook for justification
+ % for this value of \dimen0):
+ \dimen0=\ht0 \divide\dimen0 \RGDncols \advance\dimen0 \RGDtopskip
+ \setbox1=\vsplit0 to \dimen0
+ \unvbox1
+ %
+ \global\advance\RGDncols-1
+ \cr
+ \doRGDsplits
+ \fi
+}
+
+%}}} balancing columns
+%}}} pdcoput.tex
+%Local variables:
+%fold-folded-p: t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/doc/pdcpars.tex b/fonts/malvern/doc/pdcpars.tex
new file mode 100644
index 0000000000..cc945db6a5
--- /dev/null
+++ b/fonts/malvern/doc/pdcpars.tex
@@ -0,0 +1,301 @@
+%{{{ pdcpars.tex 1.1.9 1994/06/23 -- Misc paragraph macros
+% Copyright (c) 1991-1994 Damian Cugley.
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \gdef\version{1.1.9} \gdef\lastedit{pdc 1994/06/23}
+}\the\toks0
+\message{\version\space \lastedit}
+\ifx\utilsversion\UNDEFINED \input pdcutil \fi
+
+% Permission is granted to distribute verbatim copies if this file provided
+% this copyright and permisions is preserved in all copies.
+
+% Permission is granted to distribute modified versions of this file
+% provided:
+% -- no deletions are made (but you can comment things out);
+% -- this copyright and permissions are preserved; and
+% -- it is called something else (so as to prevent confusion).
+
+%{{{ Active characters
+
+\def\active#1{\catcode`#1=13 }
+\def\plain#1{\catcode`#1=12 }
+
+\def\minus{-} % \let isn't good enuf
+
+{\active\^^M \gdef\obeylines{\active\^^M\let^^M=\par}}%
+\def\obeyspaces{\active\ }
+% Necessary because knuth uses \active to mean 13
+%}}}
+%{{{ Macros for making symbols etc
+
+\def\overstrike#1#2% Used to fudge some characters
+{{%
+ \leavevmode
+ \setbox1=\hbox{#1}\setbox2=\hbox{#2}%
+ \dimen0=\wd1 \ifdim\dimen0<\wd2 \dimen0=\wd2\fi % d0 := max(wd1, wd2)
+ \rlap{\hbox to \dimen0{\hss#1\hss}}\hbox to \dimen0{\hss#2\hss}%
+}}
+
+\def\flushtop#1%
+{{%
+ \setbox0=\hbox{#1}\setbox1=\hbox{X}%
+ \dimen0=\ht1 \advance\dimen0-\ht0 % d0 := ht(``X'') - ht(#1)
+ \raise\dimen0\box0
+}}
+
+
+% \chdef CSNAME=cfxx \defs CSNAME to produce a math char with
+% class c, using sym xx from family f
+% Outside of maths mode, CSNAME produces the plain character
+% Used so that \bullet etc. can be used out of maths mode...
+
+\def\chdef#1=#2#3#4#5%
+{\def#1{\ifmmode
+ \mathchar"#2#3#4#5
+ \else
+ \mathhexbox#3#4#5%
+ \fi}
+}
+
+% \deldef CSNAME=cfxxFXX
+% Similar except for thigns that are delimiters in maths mode.
+% FXX gives ``large'' symbol
+
+\def\deldef#1=#2#3#4#5#6#7#8%
+{\def#1{\ifmmode
+ \delimiter"#2#3#4#5#6#7#8
+ \else
+ \mathhexbox#3#4#5%
+ \fi}
+}
+%}}}
+%{{{ Various symbols
+
+\chdef\bullet = 220F
+\chdef\cdot = 2201
+\chdef\times = 2202
+\chdef\* = 002A % raised asterisk
+
+\deldef\langle = 426830A
+\deldef\rangle = 526930B
+\deldef\lbrace = 4266308 \let\{=\lbrace
+\deldef\rbrace = 5267309 \let\}=\rbrace
+
+\def\poundsign{{\it\char36}} % plain TeX method
+\def\yensign{\overstrike=Y} % ick
+
+\def\hyphen{\ifmmode\hbox{-}\else-\fi}
+\def\shortdash{\ifmmode\hbox{--}\else--\fi}
+\def\longdash{\ifmmode\hbox{---}\else---\fi}
+
+\def\tttilde{\leavevmode\lower 0.5ex\hbox{\tt\char`\~}}
+\def\ttcirc{\leavevmode\lower 0.5ex\hbox{\tt\char`\^}}
+\def\ttlq{\leavevmode\lower 0.125ex\hbox{\tt\char18}}
+\def\ttrq{\leavevmode\lower 0.125ex\hbox{\tt\char19}}
+\def\ttvert{{\tt\char`\|}}
+
+\def\Mc{M\flushtop{\the\scriptfont\fam \b{c}}}
+ % \Mc Gregor -> McGregor
+
+%}}}
+%{{{ Various logos etc
+
+\def\LaTeX{L\negthinspace\flushtop{a}\kern-0.05em\TeX}
+%\def\AmSTeX{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+% {\the\textfont2 M}\kern-.125em{\the\textfont2 S}-\TeX}
+\def\AMSTeX{AMS-\TeX}
+\def\AMSLaTeX{AMS-\LaTeX}
+\def\BibTeX{Bib\!\TeX}
+
+%}}}
+%{{{ Date and time-of-day
+
+\def\shortdates
+{\def\today
+ {{\sfcode`\.=1000 \n{\number\day}
+ \ifcase\month\or
+ Jan. \or Feb. \or Mar. \or Apr. \or May \or June \or
+ July \or Aug. \or Sept. \or Oct. \or Nov. \or Dec.
+ \fi
+ \n{\number\year}%
+ }}
+}
+
+\def\longdates
+{\def\today
+ {\n{\number\day}
+ \ifcase\month\or
+ January \or February \or March \or April \or May \or June \or
+ July \or August \or September \or October \or November \or December
+ \fi
+ \n{\number\year}%
+ }
+}
+
+\shortdates
+
+\newcount\hour \newcount\minute
+\hour=\time \global\divide\hour by 60 % H = T/60
+\minute=-\hour \multiply\minute by 60 \advance\minute\time
+ % M = T - 60*H = T\60
+
+\def\nnumber#1{\ifnum#1<10 0\fi\number1}
+\def\timeofday{\n{\number\hour}:\n{\nnumber\minute}}
+%}}}
+%{{{ Numerals
+
+% Numbers in a text context -- \n{12,345-56}
+% commas become thinspaces in scientific numerals
+% full stop becomes decimal point
+% hyphen becomes shortdash (for ranges)
+% \minus for minus sign
+
+\begingroup\active\-
+ \gdef\n#1%
+ {\leavevmode \counta=\fam
+ \hbox{$\mathsurround=0pt
+ \mathcode`\.="0201
+ \mathcode`\-="8000 \let-=\shortdash
+ \mathchardef\minus="2200
+ \fam=\counta \everyn
+ #1$}%
+ }
+\endgroup
+
+\begingroup \active\,
+ \gdef\scientificnumerals{\def\everyn{\mathcode`\,="8000 \let,=\,}}
+\endgroup
+
+\def\oldstylenumerals
+{\def\everyn{\ifnum\counta=0\mit\fi \mathcode`\,="702C }}
+
+\def\rangingnumerals{\def\everyn{\mathcode`\,="0702C }}
+
+%}}}
+%{{{ Verbatim text, using |...|
+
+\active\|
+
+\def\verbatimplains{\\\\\\\{\\\}\\\_\\\$\\\#\\\&\\\%} % \{}_$#&%
+\def\verbatimactives{\\\`\\\'\\\~\\\^\\\ } % `'~^<space>
+
+\begingroup \active\' \active\` \active\^
+ \gdef\setupverbatim
+ {%
+ \spaceskip0pt \xspaceskip0pt % use spacing of font
+ \let\\\plain\verbatimplains
+ \let\\\active\verbatimactives
+ \let`=\ttlq \let'=\ttrq
+ \let~=\tttilde \let^=\ttcirc
+ \hyphenchar\font=-1
+ \the\everyverbatim
+ }
+\endgroup
+
+\newif\ifdblvert
+
+\def|%
+{%
+ \ifmmode
+ \mathchar"026A
+ \else
+ \leavevmode
+ \begingroup % matched by closing |
+ \aftergroup\verbatimsetspacefactor
+ \tt \setupverbatim
+ \let|\endgroup
+ \ifnum\spacefactor=1003 \ttvert \fi
+ \fi
+}
+
+\def\verbatimsetspacefactor{\spacefactor1003 }
+
+% TeXbook, p.380
+\def\listing#1% list file #1 verbatim in
+{
+ \medskip
+ \begingroup
+ \parindent=0pt \parskip=0pt
+ \counta=0 \countb=5
+ \def\par{\leavevmode\endgraf}%
+ \obeylines \obeyspaces
+ \everypar={\linenum}%
+ \maketabstab
+ \setupverbatim
+ \the\everylisting
+ \tt
+ \input#1
+ \endgroup
+ \medskip\noindent\ignorespaces
+}
+
+{\catcode`\^^I=13
+ \gdef\maketabstab{\catcode`\^^I=13 \def^^I{\hskip 4em}}
+}
+
+\def\linenum
+{%
+ \strut
+ \global\advance\counta+1 \global\advance\countb-1
+ \ifnum\countb>0\else
+ \global\advance\countb 5
+ \rlap{\the\everylinenum \kern\hsize\kern1em \the\counta}%
+ \fi
+}%
+
+{\obeyspaces\global\let =\ } % active space = \SPACE
+%}}}
+%{{{ Misc
+
+\def\thinspaceamount % usually 1/6em in CMR
+{\ifdim\spaceskip>0pt
+ 0.5\spaceskip
+ \else
+ 0.5\fontdimen2\font
+ \fi
+}
+
+\def\,{\ifmmode\mskip+\thinmuskip\else\kern+\thinspaceamount\fi}
+\def\!{\ifmmode\mskip-\thinmuskip\else\kern-\thinspaceamount\fi}
+\def\dots{.\,.\,.}
+
+\def\makestrut#1#2{\vrule height#1 depth#2 width0pt }
+
+\let\pTXunderline\underline
+\def\underline#1%
+{\ifmmode
+ \pTXunderline{#1}%
+ \else
+ \setbox0=\hbox{#1}%
+ \dp0=0pt
+ $\pTXunderline{\box0}$%
+ \fi
+}
+
+\def\crossedout#1% print #1 with line through it
+{{%
+ \setbox0=\hbox{#1}%
+ \dimen0 = 0.6ex \advance\dimen0 by -0.4pt
+ \vrule height 0.6ex depth -\dimen0 width \wd0
+ \kern -\wd0
+ \box0
+}}
+%}}}
+%{{{ Hooks
+
+\rangingnumerals % sets \everyn
+
+\newtoks\everyverbatim
+
+\newtoks\everylisting
+\everylisting={\tentt\baselineskip=10pt}
+
+\newtoks\everylinenum
+\everylinenum={\sevenrm}
+%}}}
+%}}} parmac.tex
+
+%Local variables:
+%fold-folded-p: t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/drivers/ma53a12.mf b/fonts/malvern/drivers/ma53a12.mf
new file mode 100644
index 0000000000..a5ca9b438d
--- /dev/null
+++ b/fonts/malvern/drivers/ma53a12.mf
@@ -0,0 +1,12 @@
+% ma53a12.mf -- 12-pt Malvern 53 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.15;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a10.mf b/fonts/malvern/drivers/ma55a10.mf
new file mode 100644
index 0000000000..70c2b9b914
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a10.mf
@@ -0,0 +1,12 @@
+% ma55a10.mf -- 10-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a12.mf b/fonts/malvern/drivers/ma55a12.mf
new file mode 100644
index 0000000000..a74e66bbeb
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a12.mf
@@ -0,0 +1,12 @@
+% ma55a12.mf -- 12-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a14.mf b/fonts/malvern/drivers/ma55a14.mf
new file mode 100644
index 0000000000..486f593f42
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a14.mf
@@ -0,0 +1,12 @@
+% ma55a14.mf -- 14-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a18.mf b/fonts/malvern/drivers/ma55a18.mf
new file mode 100644
index 0000000000..0344dc9961
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a18.mf
@@ -0,0 +1,12 @@
+% ma55a18.mf -- 18-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a24.mf b/fonts/malvern/drivers/ma55a24.mf
new file mode 100644
index 0000000000..0a34e839f3
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a24.mf
@@ -0,0 +1,12 @@
+% ma55a24.mf -- 24-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a48.mf b/fonts/malvern/drivers/ma55a48.mf
new file mode 100644
index 0000000000..a237a131a7
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a48.mf
@@ -0,0 +1,12 @@
+% ma55a48.mf -- 48-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 48pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a7.mf b/fonts/malvern/drivers/ma55a7.mf
new file mode 100644
index 0000000000..624b6ea257
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a7.mf
@@ -0,0 +1,12 @@
+% ma55a7.mf -- 7-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55a9.mf b/fonts/malvern/drivers/ma55a9.mf
new file mode 100644
index 0000000000..6a5f615cb5
--- /dev/null
+++ b/fonts/malvern/drivers/ma55a9.mf
@@ -0,0 +1,12 @@
+% ma55a9.mf -- 9-pt Malvern 55 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 9pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az10.mf b/fonts/malvern/drivers/ma55az10.mf
new file mode 100644
index 0000000000..d6ae95585a
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az10.mf
@@ -0,0 +1,11 @@
+% ma55az10.mf -- 10-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az12.mf b/fonts/malvern/drivers/ma55az12.mf
new file mode 100644
index 0000000000..cc6f4dd22f
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az12.mf
@@ -0,0 +1,11 @@
+% ma55az12.mf -- 12-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az14.mf b/fonts/malvern/drivers/ma55az14.mf
new file mode 100644
index 0000000000..5107205702
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az14.mf
@@ -0,0 +1,11 @@
+% ma55az14.mf -- 14-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az18.mf b/fonts/malvern/drivers/ma55az18.mf
new file mode 100644
index 0000000000..0201d8cc45
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az18.mf
@@ -0,0 +1,11 @@
+% ma55az18.mf -- 18-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az24.mf b/fonts/malvern/drivers/ma55az24.mf
new file mode 100644
index 0000000000..b34dcb782b
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az24.mf
@@ -0,0 +1,11 @@
+% ma55az24.mf -- 24-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55az7.mf b/fonts/malvern/drivers/ma55az7.mf
new file mode 100644
index 0000000000..26b9215a75
--- /dev/null
+++ b/fonts/malvern/drivers/ma55az7.mf
@@ -0,0 +1,11 @@
+% ma55az7.mf -- 7-pt Malvern 55 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b10.mf b/fonts/malvern/drivers/ma55b10.mf
new file mode 100644
index 0000000000..033ea445a7
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b10.mf
@@ -0,0 +1,12 @@
+% ma55b10.mf -- 10-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b12.mf b/fonts/malvern/drivers/ma55b12.mf
new file mode 100644
index 0000000000..6d6eb65254
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b12.mf
@@ -0,0 +1,12 @@
+% ma55b12.mf -- 12-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b14.mf b/fonts/malvern/drivers/ma55b14.mf
new file mode 100644
index 0000000000..321ceb21c3
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b14.mf
@@ -0,0 +1,12 @@
+% ma55b14.mf -- 14-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b18.mf b/fonts/malvern/drivers/ma55b18.mf
new file mode 100644
index 0000000000..d115e46323
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b18.mf
@@ -0,0 +1,12 @@
+% ma55b18.mf -- 18-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b24.mf b/fonts/malvern/drivers/ma55b24.mf
new file mode 100644
index 0000000000..ee369a1866
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b24.mf
@@ -0,0 +1,12 @@
+% ma55b24.mf -- 24-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55b7.mf b/fonts/malvern/drivers/ma55b7.mf
new file mode 100644
index 0000000000..e4556836fd
--- /dev/null
+++ b/fonts/malvern/drivers/ma55b7.mf
@@ -0,0 +1,12 @@
+% ma55b7.mf -- 7-pt Malvern 55 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55c12.mf b/fonts/malvern/drivers/ma55c12.mf
new file mode 100644
index 0000000000..e974becd08
--- /dev/null
+++ b/fonts/malvern/drivers/ma55c12.mf
@@ -0,0 +1,12 @@
+% ma55c12.mf -- 12-pt Malvern 55 with encoding C
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 3;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55g10.mf b/fonts/malvern/drivers/ma55g10.mf
new file mode 100644
index 0000000000..764ea4ebd3
--- /dev/null
+++ b/fonts/malvern/drivers/ma55g10.mf
@@ -0,0 +1,12 @@
+% ma55g10.mf -- 10-pt Malvern 55 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55g11.mf b/fonts/malvern/drivers/ma55g11.mf
new file mode 100644
index 0000000000..bb5dcadda5
--- /dev/null
+++ b/fonts/malvern/drivers/ma55g11.mf
@@ -0,0 +1,12 @@
+% ma55g11.mf -- 11-pt Malvern 55 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 11pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55g12.mf b/fonts/malvern/drivers/ma55g12.mf
new file mode 100644
index 0000000000..637bd0760f
--- /dev/null
+++ b/fonts/malvern/drivers/ma55g12.mf
@@ -0,0 +1,12 @@
+% ma55g12.mf -- 12-pt Malvern 55 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55g24.mf b/fonts/malvern/drivers/ma55g24.mf
new file mode 100644
index 0000000000..a4dd643ad9
--- /dev/null
+++ b/fonts/malvern/drivers/ma55g24.mf
@@ -0,0 +1,12 @@
+% ma55g24.mf -- 24-pt Malvern 55 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55g9.mf b/fonts/malvern/drivers/ma55g9.mf
new file mode 100644
index 0000000000..8daec159a8
--- /dev/null
+++ b/fonts/malvern/drivers/ma55g9.mf
@@ -0,0 +1,12 @@
+% ma55g9.mf -- 9-pt Malvern 55 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 9pt#;
+weight = 1;
+hratio = 1.00;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s10.mf b/fonts/malvern/drivers/ma55s10.mf
new file mode 100644
index 0000000000..706d2c2cc6
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s10.mf
@@ -0,0 +1,11 @@
+% ma55s10.mf -- 10-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s12.mf b/fonts/malvern/drivers/ma55s12.mf
new file mode 100644
index 0000000000..8ea08164a4
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s12.mf
@@ -0,0 +1,11 @@
+% ma55s12.mf -- 12-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s14.mf b/fonts/malvern/drivers/ma55s14.mf
new file mode 100644
index 0000000000..03ba1ce3a0
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s14.mf
@@ -0,0 +1,11 @@
+% ma55s14.mf -- 14-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s18.mf b/fonts/malvern/drivers/ma55s18.mf
new file mode 100644
index 0000000000..544503f923
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s18.mf
@@ -0,0 +1,11 @@
+% ma55s18.mf -- 18-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s24.mf b/fonts/malvern/drivers/ma55s24.mf
new file mode 100644
index 0000000000..3bade613a7
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s24.mf
@@ -0,0 +1,11 @@
+% ma55s24.mf -- 24-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma55s7.mf b/fonts/malvern/drivers/ma55s7.mf
new file mode 100644
index 0000000000..9710f0d9a9
--- /dev/null
+++ b/fonts/malvern/drivers/ma55s7.mf
@@ -0,0 +1,11 @@
+% ma55s7.mf -- 7-pt Malvern 55 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a10.mf b/fonts/malvern/drivers/ma56a10.mf
new file mode 100644
index 0000000000..bd9e601125
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a10.mf
@@ -0,0 +1,14 @@
+% ma56a10.mf -- 10-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a12.mf b/fonts/malvern/drivers/ma56a12.mf
new file mode 100644
index 0000000000..6a3cd49684
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a12.mf
@@ -0,0 +1,14 @@
+% ma56a12.mf -- 12-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a14.mf b/fonts/malvern/drivers/ma56a14.mf
new file mode 100644
index 0000000000..07620318be
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a14.mf
@@ -0,0 +1,14 @@
+% ma56a14.mf -- 14-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a18.mf b/fonts/malvern/drivers/ma56a18.mf
new file mode 100644
index 0000000000..7aed9dbd9d
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a18.mf
@@ -0,0 +1,14 @@
+% ma56a18.mf -- 18-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a24.mf b/fonts/malvern/drivers/ma56a24.mf
new file mode 100644
index 0000000000..40680dd64b
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a24.mf
@@ -0,0 +1,14 @@
+% ma56a24.mf -- 24-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a7.mf b/fonts/malvern/drivers/ma56a7.mf
new file mode 100644
index 0000000000..432fa0e516
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a7.mf
@@ -0,0 +1,14 @@
+% ma56a7.mf -- 7-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56a9.mf b/fonts/malvern/drivers/ma56a9.mf
new file mode 100644
index 0000000000..6bd3179a3e
--- /dev/null
+++ b/fonts/malvern/drivers/ma56a9.mf
@@ -0,0 +1,14 @@
+% ma56a9.mf -- 9-pt Malvern 56 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 9pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az10.mf b/fonts/malvern/drivers/ma56az10.mf
new file mode 100644
index 0000000000..23ffebb63e
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az10.mf
@@ -0,0 +1,13 @@
+% ma56az10.mf -- 10-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az12.mf b/fonts/malvern/drivers/ma56az12.mf
new file mode 100644
index 0000000000..636dc27c51
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az12.mf
@@ -0,0 +1,13 @@
+% ma56az12.mf -- 12-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az14.mf b/fonts/malvern/drivers/ma56az14.mf
new file mode 100644
index 0000000000..a77b115546
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az14.mf
@@ -0,0 +1,13 @@
+% ma56az14.mf -- 14-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az18.mf b/fonts/malvern/drivers/ma56az18.mf
new file mode 100644
index 0000000000..0f19fbed40
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az18.mf
@@ -0,0 +1,13 @@
+% ma56az18.mf -- 18-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az24.mf b/fonts/malvern/drivers/ma56az24.mf
new file mode 100644
index 0000000000..fad0ad0b73
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az24.mf
@@ -0,0 +1,13 @@
+% ma56az24.mf -- 24-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56az7.mf b/fonts/malvern/drivers/ma56az7.mf
new file mode 100644
index 0000000000..23bb372906
--- /dev/null
+++ b/fonts/malvern/drivers/ma56az7.mf
@@ -0,0 +1,13 @@
+% ma56az7.mf -- 7-pt Malvern 56 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b10.mf b/fonts/malvern/drivers/ma56b10.mf
new file mode 100644
index 0000000000..d928837aa3
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b10.mf
@@ -0,0 +1,14 @@
+% ma56b10.mf -- 10-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b12.mf b/fonts/malvern/drivers/ma56b12.mf
new file mode 100644
index 0000000000..7449931f63
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b12.mf
@@ -0,0 +1,14 @@
+% ma56b12.mf -- 12-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b14.mf b/fonts/malvern/drivers/ma56b14.mf
new file mode 100644
index 0000000000..a539b00fdf
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b14.mf
@@ -0,0 +1,14 @@
+% ma56b14.mf -- 14-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b18.mf b/fonts/malvern/drivers/ma56b18.mf
new file mode 100644
index 0000000000..489f99efd6
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b18.mf
@@ -0,0 +1,14 @@
+% ma56b18.mf -- 18-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b24.mf b/fonts/malvern/drivers/ma56b24.mf
new file mode 100644
index 0000000000..8ae0e2c28d
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b24.mf
@@ -0,0 +1,14 @@
+% ma56b24.mf -- 24-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56b7.mf b/fonts/malvern/drivers/ma56b7.mf
new file mode 100644
index 0000000000..80dc340b89
--- /dev/null
+++ b/fonts/malvern/drivers/ma56b7.mf
@@ -0,0 +1,14 @@
+% ma56b7.mf -- 7-pt Malvern 56 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56g11.mf b/fonts/malvern/drivers/ma56g11.mf
new file mode 100644
index 0000000000..668cb28f39
--- /dev/null
+++ b/fonts/malvern/drivers/ma56g11.mf
@@ -0,0 +1,14 @@
+% ma56g11.mf -- 11-pt Malvern 56 with encoding G
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 11pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 7;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s10.mf b/fonts/malvern/drivers/ma56s10.mf
new file mode 100644
index 0000000000..33d55084d1
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s10.mf
@@ -0,0 +1,13 @@
+% ma56s10.mf -- 10-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s12.mf b/fonts/malvern/drivers/ma56s12.mf
new file mode 100644
index 0000000000..78fca2a1c7
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s12.mf
@@ -0,0 +1,13 @@
+% ma56s12.mf -- 12-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s14.mf b/fonts/malvern/drivers/ma56s14.mf
new file mode 100644
index 0000000000..b29abf9e65
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s14.mf
@@ -0,0 +1,13 @@
+% ma56s14.mf -- 14-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s18.mf b/fonts/malvern/drivers/ma56s18.mf
new file mode 100644
index 0000000000..7c5ad82d29
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s18.mf
@@ -0,0 +1,13 @@
+% ma56s18.mf -- 18-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s24.mf b/fonts/malvern/drivers/ma56s24.mf
new file mode 100644
index 0000000000..1699101b6b
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s24.mf
@@ -0,0 +1,13 @@
+% ma56s24.mf -- 24-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma56s7.mf b/fonts/malvern/drivers/ma56s7.mf
new file mode 100644
index 0000000000..8aafe95ba0
--- /dev/null
+++ b/fonts/malvern/drivers/ma56s7.mf
@@ -0,0 +1,13 @@
+% ma56s7.mf -- 7-pt Malvern 56 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma57a12.mf b/fonts/malvern/drivers/ma57a12.mf
new file mode 100644
index 0000000000..e2919fbcfe
--- /dev/null
+++ b/fonts/malvern/drivers/ma57a12.mf
@@ -0,0 +1,12 @@
+% ma57a12.mf -- 12-pt Malvern 57 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1;
+hratio = 0.80;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a10.mf b/fonts/malvern/drivers/ma75a10.mf
new file mode 100644
index 0000000000..954c083cba
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a10.mf
@@ -0,0 +1,12 @@
+% ma75a10.mf -- 10-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a12.mf b/fonts/malvern/drivers/ma75a12.mf
new file mode 100644
index 0000000000..1090bdac37
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a12.mf
@@ -0,0 +1,12 @@
+% ma75a12.mf -- 12-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a14.mf b/fonts/malvern/drivers/ma75a14.mf
new file mode 100644
index 0000000000..3ac9c4cc97
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a14.mf
@@ -0,0 +1,12 @@
+% ma75a14.mf -- 14-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a18.mf b/fonts/malvern/drivers/ma75a18.mf
new file mode 100644
index 0000000000..7a3f9f24ab
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a18.mf
@@ -0,0 +1,12 @@
+% ma75a18.mf -- 18-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a24.mf b/fonts/malvern/drivers/ma75a24.mf
new file mode 100644
index 0000000000..0aad996cd3
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a24.mf
@@ -0,0 +1,12 @@
+% ma75a24.mf -- 24-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a7.mf b/fonts/malvern/drivers/ma75a7.mf
new file mode 100644
index 0000000000..0a991f8335
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a7.mf
@@ -0,0 +1,12 @@
+% ma75a7.mf -- 7-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a72.mf b/fonts/malvern/drivers/ma75a72.mf
new file mode 100644
index 0000000000..3d3683405a
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a72.mf
@@ -0,0 +1,12 @@
+% ma75a72.mf -- 72-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 72pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75a9.mf b/fonts/malvern/drivers/ma75a9.mf
new file mode 100644
index 0000000000..e2a6ff1692
--- /dev/null
+++ b/fonts/malvern/drivers/ma75a9.mf
@@ -0,0 +1,12 @@
+% ma75a9.mf -- 9-pt Malvern 75 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 9pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az10.mf b/fonts/malvern/drivers/ma75az10.mf
new file mode 100644
index 0000000000..af723cd553
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az10.mf
@@ -0,0 +1,11 @@
+% ma75az10.mf -- 10-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az12.mf b/fonts/malvern/drivers/ma75az12.mf
new file mode 100644
index 0000000000..5db197045f
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az12.mf
@@ -0,0 +1,11 @@
+% ma75az12.mf -- 12-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az14.mf b/fonts/malvern/drivers/ma75az14.mf
new file mode 100644
index 0000000000..d79ebce6cd
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az14.mf
@@ -0,0 +1,11 @@
+% ma75az14.mf -- 14-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az18.mf b/fonts/malvern/drivers/ma75az18.mf
new file mode 100644
index 0000000000..6f2e812c13
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az18.mf
@@ -0,0 +1,11 @@
+% ma75az18.mf -- 18-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az24.mf b/fonts/malvern/drivers/ma75az24.mf
new file mode 100644
index 0000000000..a0666a9af1
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az24.mf
@@ -0,0 +1,11 @@
+% ma75az24.mf -- 24-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75az7.mf b/fonts/malvern/drivers/ma75az7.mf
new file mode 100644
index 0000000000..cdbccf3fbf
--- /dev/null
+++ b/fonts/malvern/drivers/ma75az7.mf
@@ -0,0 +1,11 @@
+% ma75az7.mf -- 7-pt Malvern 75 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b10.mf b/fonts/malvern/drivers/ma75b10.mf
new file mode 100644
index 0000000000..e9360e451a
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b10.mf
@@ -0,0 +1,12 @@
+% ma75b10.mf -- 10-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b12.mf b/fonts/malvern/drivers/ma75b12.mf
new file mode 100644
index 0000000000..9a5595de03
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b12.mf
@@ -0,0 +1,12 @@
+% ma75b12.mf -- 12-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b14.mf b/fonts/malvern/drivers/ma75b14.mf
new file mode 100644
index 0000000000..c48dfe0edf
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b14.mf
@@ -0,0 +1,12 @@
+% ma75b14.mf -- 14-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b18.mf b/fonts/malvern/drivers/ma75b18.mf
new file mode 100644
index 0000000000..6045acd719
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b18.mf
@@ -0,0 +1,12 @@
+% ma75b18.mf -- 18-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b24.mf b/fonts/malvern/drivers/ma75b24.mf
new file mode 100644
index 0000000000..f2ffbe6aa4
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b24.mf
@@ -0,0 +1,12 @@
+% ma75b24.mf -- 24-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75b7.mf b/fonts/malvern/drivers/ma75b7.mf
new file mode 100644
index 0000000000..2344794737
--- /dev/null
+++ b/fonts/malvern/drivers/ma75b7.mf
@@ -0,0 +1,12 @@
+% ma75b7.mf -- 7-pt Malvern 75 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s10.mf b/fonts/malvern/drivers/ma75s10.mf
new file mode 100644
index 0000000000..2cc7278891
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s10.mf
@@ -0,0 +1,11 @@
+% ma75s10.mf -- 10-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s12.mf b/fonts/malvern/drivers/ma75s12.mf
new file mode 100644
index 0000000000..ad0f91a8ff
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s12.mf
@@ -0,0 +1,11 @@
+% ma75s12.mf -- 12-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s14.mf b/fonts/malvern/drivers/ma75s14.mf
new file mode 100644
index 0000000000..dd3dd901f0
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s14.mf
@@ -0,0 +1,11 @@
+% ma75s14.mf -- 14-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s18.mf b/fonts/malvern/drivers/ma75s18.mf
new file mode 100644
index 0000000000..0d5357f169
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s18.mf
@@ -0,0 +1,11 @@
+% ma75s18.mf -- 18-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s24.mf b/fonts/malvern/drivers/ma75s24.mf
new file mode 100644
index 0000000000..3018b4c8c6
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s24.mf
@@ -0,0 +1,11 @@
+% ma75s24.mf -- 24-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma75s7.mf b/fonts/malvern/drivers/ma75s7.mf
new file mode 100644
index 0000000000..4ce58bbc68
--- /dev/null
+++ b/fonts/malvern/drivers/ma75s7.mf
@@ -0,0 +1,11 @@
+% ma75s7.mf -- 7-pt Malvern 75 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a10.mf b/fonts/malvern/drivers/ma76a10.mf
new file mode 100644
index 0000000000..a41e376766
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a10.mf
@@ -0,0 +1,14 @@
+% ma76a10.mf -- 10-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a12.mf b/fonts/malvern/drivers/ma76a12.mf
new file mode 100644
index 0000000000..bd235d7a3f
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a12.mf
@@ -0,0 +1,14 @@
+% ma76a12.mf -- 12-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a14.mf b/fonts/malvern/drivers/ma76a14.mf
new file mode 100644
index 0000000000..eecf66dcfb
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a14.mf
@@ -0,0 +1,14 @@
+% ma76a14.mf -- 14-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a18.mf b/fonts/malvern/drivers/ma76a18.mf
new file mode 100644
index 0000000000..51a0ff1c03
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a18.mf
@@ -0,0 +1,14 @@
+% ma76a18.mf -- 18-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a24.mf b/fonts/malvern/drivers/ma76a24.mf
new file mode 100644
index 0000000000..77f4ea1249
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a24.mf
@@ -0,0 +1,14 @@
+% ma76a24.mf -- 24-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76a7.mf b/fonts/malvern/drivers/ma76a7.mf
new file mode 100644
index 0000000000..4f71a9b8f7
--- /dev/null
+++ b/fonts/malvern/drivers/ma76a7.mf
@@ -0,0 +1,14 @@
+% ma76a7.mf -- 7-pt Malvern 76 with encoding A
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 1;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az10.mf b/fonts/malvern/drivers/ma76az10.mf
new file mode 100644
index 0000000000..fc67237f90
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az10.mf
@@ -0,0 +1,13 @@
+% ma76az10.mf -- 10-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az12.mf b/fonts/malvern/drivers/ma76az12.mf
new file mode 100644
index 0000000000..0f76e003ed
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az12.mf
@@ -0,0 +1,13 @@
+% ma76az12.mf -- 12-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az14.mf b/fonts/malvern/drivers/ma76az14.mf
new file mode 100644
index 0000000000..d527c191b4
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az14.mf
@@ -0,0 +1,13 @@
+% ma76az14.mf -- 14-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az18.mf b/fonts/malvern/drivers/ma76az18.mf
new file mode 100644
index 0000000000..e41f385ac1
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az18.mf
@@ -0,0 +1,13 @@
+% ma76az18.mf -- 18-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az24.mf b/fonts/malvern/drivers/ma76az24.mf
new file mode 100644
index 0000000000..81f6d16ba5
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az24.mf
@@ -0,0 +1,13 @@
+% ma76az24.mf -- 24-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76az7.mf b/fonts/malvern/drivers/ma76az7.mf
new file mode 100644
index 0000000000..a79f7b0f4d
--- /dev/null
+++ b/fonts/malvern/drivers/ma76az7.mf
@@ -0,0 +1,13 @@
+% ma76az7.mf -- 7-pt Malvern 76 with TeX text encoding with old style figures
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =26;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b10.mf b/fonts/malvern/drivers/ma76b10.mf
new file mode 100644
index 0000000000..e1f9d3d7f2
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b10.mf
@@ -0,0 +1,14 @@
+% ma76b10.mf -- 10-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b12.mf b/fonts/malvern/drivers/ma76b12.mf
new file mode 100644
index 0000000000..a199a85992
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b12.mf
@@ -0,0 +1,14 @@
+% ma76b12.mf -- 12-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b14.mf b/fonts/malvern/drivers/ma76b14.mf
new file mode 100644
index 0000000000..0c377beead
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b14.mf
@@ -0,0 +1,14 @@
+% ma76b14.mf -- 14-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b18.mf b/fonts/malvern/drivers/ma76b18.mf
new file mode 100644
index 0000000000..369980eacf
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b18.mf
@@ -0,0 +1,14 @@
+% ma76b18.mf -- 18-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b24.mf b/fonts/malvern/drivers/ma76b24.mf
new file mode 100644
index 0000000000..b47fa76c80
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b24.mf
@@ -0,0 +1,14 @@
+% ma76b24.mf -- 24-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76b7.mf b/fonts/malvern/drivers/ma76b7.mf
new file mode 100644
index 0000000000..9462232db2
--- /dev/null
+++ b/fonts/malvern/drivers/ma76b7.mf
@@ -0,0 +1,14 @@
+% ma76b7.mf -- 7-pt Malvern 76 with encoding B
+% version: 76
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding = 2;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s10.mf b/fonts/malvern/drivers/ma76s10.mf
new file mode 100644
index 0000000000..6a460a954d
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s10.mf
@@ -0,0 +1,13 @@
+% ma76s10.mf -- 10-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 10pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s12.mf b/fonts/malvern/drivers/ma76s12.mf
new file mode 100644
index 0000000000..ff5c93f11a
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s12.mf
@@ -0,0 +1,13 @@
+% ma76s12.mf -- 12-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 12pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s14.mf b/fonts/malvern/drivers/ma76s14.mf
new file mode 100644
index 0000000000..5de3c897db
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s14.mf
@@ -0,0 +1,13 @@
+% ma76s14.mf -- 14-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 14pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s18.mf b/fonts/malvern/drivers/ma76s18.mf
new file mode 100644
index 0000000000..dda4edd466
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s18.mf
@@ -0,0 +1,13 @@
+% ma76s18.mf -- 18-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 18pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s24.mf b/fonts/malvern/drivers/ma76s24.mf
new file mode 100644
index 0000000000..cf19216d88
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s24.mf
@@ -0,0 +1,13 @@
+% ma76s24.mf -- 24-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 24pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/drivers/ma76s7.mf b/fonts/malvern/drivers/ma76s7.mf
new file mode 100644
index 0000000000..88fb329e81
--- /dev/null
+++ b/fonts/malvern/drivers/ma76s7.mf
@@ -0,0 +1,13 @@
+% ma76s7.mf -- 7-pt Malvern 76 with TeX text encoding
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+% package: Malvern 1.2
+
+font_size 7pt#;
+weight = 1.6;
+hratio = 1.00;
+slant = 1/8;
+italicness = 1;
+encoding =19;
+input ma;
+bye.
diff --git a/fonts/malvern/dvi/install.dvi b/fonts/malvern/dvi/install.dvi
new file mode 100644
index 0000000000..e5d4bddc5c
--- /dev/null
+++ b/fonts/malvern/dvi/install.dvi
Binary files differ
diff --git a/fonts/malvern/dvi/magrman.dvi b/fonts/malvern/dvi/magrman.dvi
new file mode 100644
index 0000000000..05aa06948f
--- /dev/null
+++ b/fonts/malvern/dvi/magrman.dvi
Binary files differ
diff --git a/fonts/malvern/dvi/maman.dvi b/fonts/malvern/dvi/maman.dvi
new file mode 100644
index 0000000000..f6d31db841
--- /dev/null
+++ b/fonts/malvern/dvi/maman.dvi
Binary files differ
diff --git a/fonts/malvern/fontinst/README b/fonts/malvern/fontinst/README
new file mode 100644
index 0000000000..dfe2aae969
--- /dev/null
+++ b/fonts/malvern/fontinst/README
@@ -0,0 +1,46 @@
+
+ Fontinst files for Malvern 1.2
+ pdc 1994.07.20
+
+Malvern is a sanserif METAFONT font family, which should be available
+from the CTAN archives (such as ftp.tex.ac.uk in directory tex-archive)
+in directory fonts/malvern.
+
+These files are intended to be used with Alan Jeffrey's Fontinst
+package. Fontinst is a package for generating composite ("virtual")
+fonts, written in TeX for portability. For example, you can use
+Fontinst to create Malvern fonts with the new Cork (T1) encoding. You
+can get fontinst from the CTAN, in directory fonts/utilities/fontinst.
+
+Encoding files
+ These can be used inside an fontinst file, and can also be run
+ through plain TeX to produce a printed copy of the encoding.
+
+ pdcmaa.etx -- describes MAlvern A encoding
+
+ pdcmaa3.etx -- describes MAlvern A encoding with two changes: (1) no
+ old-style figures (2) no medium capitals
+
+ pdcmab.etx -- describes MAlvern B encoding
+
+Glyph fudge files
+ Definitions used to assemble glyphs in Xx into glyphs for Yy are
+ called pdcxxyy.mtx (think "Xx to Yy")
+
+ pdcmat1.mtx -- glyph hacks for making T1 (Cork) glyphs from MAlvern
+ encoded fonts. This goes *before* latin.mtx.
+
+ pdcadma.mtx -- glyph hacks for making MAlvern glyphs from ADobe
+ standard roman glyphs
+
+Macro files
+ pdcetxf.tex
+ -- ETX Formatting macros (used when running TeX on an ETX file to
+ make a printed copy of the character encoding)
+
+ pdcetxm.tex
+ -- ETX Macros (used in the business part of an ETX file)
+
+Miscellaneous
+ example.tex -- an example TeX file that generates fmvmq10.vpl
+------------------------------------------------------------------------
diff --git a/fonts/malvern/fontinst/example.tex b/fonts/malvern/fontinst/example.tex
new file mode 100644
index 0000000000..d3b88a223c
--- /dev/null
+++ b/fonts/malvern/fontinst/example.tex
@@ -0,0 +1,35 @@
+% example.tex -- example use of fontinst with Malvern fonts
+%%% ====================================================================
+%%% @TeX-file {
+%%% author = "P. Damian Cugley",
+%%% version = "X",
+%%% date = "pdc 1994.07.20",
+%%% filename = "example.tex",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "AFM, virtual fonts, fonts, Malvern, TeX",
+%%% supported = "no",
+%%% abstract = "Example of using fontinst with Malvern fonts.",
+%%% package = "",
+%%% dependencies = "fontinst.sty, pdcmat1.mtx, pdcmaa.etx,
+%%% pdcmab.etx, pdcetxm.etx, latin.mtx, T1.etx,
+%%% ma55a10.pl, ma55b10.pl",
+%%% }
+%%% ====================================================================
+
+\input fontinst.sty
+
+\needsfontinstversion{1.328}
+
+\declareencoding{MALVERN A 1.1}{pdcmaa}
+\declareencoding{MALVERN B 1.1}{pdcmab}
+
+\installfonts
+ \installfamily{T1}{fmv}{}
+ \installfont{fmvmq10}{ma55a10,ma55b10,pdcmat1,latin}
+ {T1}{T1}{fmv}{m}{n}{10}
+\endinstallfonts
+
+\bye
diff --git a/fonts/malvern/fontinst/fontma.tex b/fonts/malvern/fontinst/fontma.tex
new file mode 100644
index 0000000000..ec0f662475
--- /dev/null
+++ b/fonts/malvern/fontinst/fontma.tex
@@ -0,0 +1,224 @@
+% mkfd.tex -- generate FD file for Malvern 1.2
+% version: 73
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+
+\input fontinst.sty
+
+\needsfontinstversion{1.328}
+
+\declaresize{7}{<5-8>}
+\declaresize{10}{<8-11>}
+\declaresize{12}{<11-13>}
+\declaresize{14}{<13-16>}
+\declaresize{18}{<16-21>}
+\declaresize{24}{<21->}
+
+\declareencoding{MALVERN A 1.1}{pdcmaa}
+\declareencoding{MALVERN B 1.1}{pdcmab}
+\declareencoding{MALVERN A 1.2}{pdcmaa}
+\declareencoding{MALVERN B 1.2}{pdcmab}
+\declareencoding{TEX TEXT WITH OLD-STYLE NUMERALS}{OT19}
+% \substitutesilent{n}{nn}
+% \substitutesilent{it}{in}
+% \substitutesilent{sc}{nc}
+
+\installfonts
+ \installfamily{T1}{fmv}{}
+ \installfamily{T1}{fmv9}{}
+ \installfont{ma55ar7}
+ {ma55a7,ma55b7,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{7}
+ \installfont{ma55ar10}
+ {ma55a10,ma55b10,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{10}
+ \installfont{ma55ar12}
+ {ma55a12,ma55b12,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{12}
+ \installfont{ma55ar14}
+ {ma55a14,ma55b14,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{14}
+ \installfont{ma55ar18}
+ {ma55a18,ma55b18,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{18}
+ \installfont{ma55ar24}
+ {ma55a24,ma55b24,pdcmat1,latin}{T1}{T1}{fmv}{m}{n}{24}
+ \installfont{ma56ar7}
+ {ma56a7,ma56b7,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{7}
+ \installfont{ma56ar10}
+ {ma56a10,ma56b10,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{10}
+ \installfont{ma56ar12}
+ {ma56a12,ma56b12,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{12}
+ \installfont{ma56ar14}
+ {ma56a14,ma56b14,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{14}
+ \installfont{ma56ar18}
+ {ma56a18,ma56b18,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{18}
+ \installfont{ma56ar24}
+ {ma56a24,ma56b24,pdcmat1,latin}{T1}{T1}{fmv}{m}{it}{24}
+ \installfont{ma75ar7}
+ {ma75a7,ma75b7,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{7}
+ \installfont{ma75ar10}
+ {ma75a10,ma75b10,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{10}
+ \installfont{ma75ar12}
+ {ma75a12,ma75b12,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{12}
+ \installfont{ma75ar14}
+ {ma75a14,ma75b14,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{14}
+ \installfont{ma75ar18}
+ {ma75a18,ma75b18,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{18}
+ \installfont{ma75ar24}
+ {ma75a24,ma75b24,pdcmat1,latin}{T1}{T1}{fmv}{b}{n}{24}
+ \installfont{ma76ar7}
+ {ma76a7,ma76b7,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{7}
+ \installfont{ma76ar10}
+ {ma76a10,ma76b10,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{10}
+ \installfont{ma76ar12}
+ {ma76a12,ma76b12,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{12}
+ \installfont{ma76ar14}
+ {ma76a14,ma76b14,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{14}
+ \installfont{ma76ar18}
+ {ma76a18,ma76b18,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{18}
+ \installfont{ma76ar24}
+ {ma76a24,ma76b24,pdcmat1,latin}{T1}{T1}{fmv}{b}{it}{24}
+ \installfont{ma55as7}
+ {ma55a7,ma55b7,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{7}
+ \installfont{ma55as10}
+ {ma55a10,ma55b10,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{10}
+ \installfont{ma55as12}
+ {ma55a12,ma55b12,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{12}
+ \installfont{ma55as14}
+ {ma55a14,ma55b14,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{14}
+ \installfont{ma55as18}
+ {ma55a18,ma55b18,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{18}
+ \installfont{ma55as24}
+ {ma55a24,ma55b24,pdcmat1,latin}{T19}{T1}{fmv9}{m}{n}{24}
+ \installfont{ma56as7}
+ {ma56a7,ma56b7,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{7}
+ \installfont{ma56as10}
+ {ma56a10,ma56b10,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{10}
+ \installfont{ma56as12}
+ {ma56a12,ma56b12,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{12}
+ \installfont{ma56as14}
+ {ma56a14,ma56b14,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{14}
+ \installfont{ma56as18}
+ {ma56a18,ma56b18,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{18}
+ \installfont{ma56as24}
+ {ma56a24,ma56b24,pdcmat1,latin}{T19}{T1}{fmv9}{m}{it}{24}
+ \installfont{ma75as7}
+ {ma75a7,ma75b7,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{7}
+ \installfont{ma75as10}
+ {ma75a10,ma75b10,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{10}
+ \installfont{ma75as12}
+ {ma75a12,ma75b12,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{12}
+ \installfont{ma75as14}
+ {ma75a14,ma75b14,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{14}
+ \installfont{ma75as18}
+ {ma75a18,ma75b18,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{18}
+ \installfont{ma75as24}
+ {ma75a24,ma75b24,pdcmat1,latin}{T19}{T1}{fmv9}{b}{n}{24}
+ \installfont{ma76as7}
+ {ma76a7,ma76b7,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{7}
+ \installfont{ma76as10}
+ {ma76a10,ma76b10,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{10}
+ \installfont{ma76as12}
+ {ma76a12,ma76b12,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{12}
+ \installfont{ma76as14}
+ {ma76a14,ma76b14,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{14}
+ \installfont{ma76as18}
+ {ma76a18,ma76b18,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{18}
+ \installfont{ma76as24}
+ {ma76a24,ma76b24,pdcmat1,latin}{T19}{T1}{fmv9}{b}{it}{24}
+ \installfont{ma55at7}
+ {ma55a7,ma55b7,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{7}
+ \installfont{ma55at10}
+ {ma55a10,ma55b10,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{10}
+ \installfont{ma55at12}
+ {ma55a12,ma55b12,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{12}
+ \installfont{ma55at14}
+ {ma55a14,ma55b14,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{14}
+ \installfont{ma55at18}
+ {ma55a18,ma55b18,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{18}
+ \installfont{ma55at24}
+ {ma55a24,ma55b24,pdcmat1,latin}{T1c}{T1}{fmv}{m}{sc}{24}
+ \installfont{ma75at7}
+ {ma75a7,ma75b7,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{7}
+ \installfont{ma75at10}
+ {ma75a10,ma75b10,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{10}
+ \installfont{ma75at12}
+ {ma75a12,ma75b12,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{12}
+ \installfont{ma75at14}
+ {ma75a14,ma75b14,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{14}
+ \installfont{ma75at18}
+ {ma75a18,ma75b18,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{18}
+ \installfont{ma75at24}
+ {ma75a24,ma75b24,pdcmat1,latin}{T1c}{T1}{fmv}{b}{sc}{24}
+ \installfont{ma55au7}
+ {ma55a7,ma55b7,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{7}
+ \installfont{ma55au10}
+ {ma55a10,ma55b10,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{10}
+ \installfont{ma55au12}
+ {ma55a12,ma55b12,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{12}
+ \installfont{ma55au14}
+ {ma55a14,ma55b14,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{14}
+ \installfont{ma55au18}
+ {ma55a18,ma55b18,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{18}
+ \installfont{ma55au24}
+ {ma55a24,ma55b24,pdcmat1,latin}{T1c9}{T1}{fmv9}{m}{sc}{24}
+ \installfont{ma75au7}
+ {ma75a7,ma75b7,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{7}
+ \installfont{ma75au10}
+ {ma75a10,ma75b10,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{10}
+ \installfont{ma75au12}
+ {ma75a12,ma75b12,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{12}
+ \installfont{ma75au14}
+ {ma75a14,ma75b14,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{14}
+ \installfont{ma75au18}
+ {ma75a18,ma75b18,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{18}
+ \installfont{ma75au24}
+ {ma75a24,ma75b24,pdcmat1,latin}{T1c9}{T1}{fmv9}{b}{sc}{24}
+ \installfont{ma55aa7}
+ {ma55s7,ma55a7,latin}{OT1c}{OT1}{fmv}{m}{sc}{7}
+ \installfont{ma55aa10}
+ {ma55s10,ma55a10,latin}{OT1c}{OT1}{fmv}{m}{sc}{10}
+ \installfont{ma55aa12}
+ {ma55s12,ma55a12,latin}{OT1c}{OT1}{fmv}{m}{sc}{12}
+ \installfont{ma55aa14}
+ {ma55s14,ma55a14,latin}{OT1c}{OT1}{fmv}{m}{sc}{14}
+ \installfont{ma55aa18}
+ {ma55s18,ma55a18,latin}{OT1c}{OT1}{fmv}{m}{sc}{18}
+ \installfont{ma55aa24}
+ {ma55s24,ma55a24,latin}{OT1c}{OT1}{fmv}{m}{sc}{24}
+ \installfont{ma75aa7}
+ {ma75s7,ma75a7,latin}{OT1c}{OT1}{fmv}{b}{sc}{7}
+ \installfont{ma75aa10}
+ {ma75s10,ma75a10,latin}{OT1c}{OT1}{fmv}{b}{sc}{10}
+ \installfont{ma75aa12}
+ {ma75s12,ma75a12,latin}{OT1c}{OT1}{fmv}{b}{sc}{12}
+ \installfont{ma75aa14}
+ {ma75s14,ma75a14,latin}{OT1c}{OT1}{fmv}{b}{sc}{14}
+ \installfont{ma75aa18}
+ {ma75s18,ma75a18,latin}{OT1c}{OT1}{fmv}{b}{sc}{18}
+ \installfont{ma75aa24}
+ {ma75s24,ma75a24,latin}{OT1c}{OT1}{fmv}{b}{sc}{24}
+ \installfont{ma55ab7}
+ {ma55az7,ma55a7,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{7}
+ \installfont{ma55ab10}
+ {ma55az10,ma55a10,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{10}
+ \installfont{ma55ab12}
+ {ma55az12,ma55a12,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{12}
+ \installfont{ma55ab14}
+ {ma55az14,ma55a14,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{14}
+ \installfont{ma55ab18}
+ {ma55az18,ma55a18,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{18}
+ \installfont{ma55ab24}
+ {ma55az24,ma55a24,latin}{OT1c9}{OT1}{fmv9}{m}{sc}{24}
+ \installfont{ma75ab7}
+ {ma75az7,ma75a7,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{7}
+ \installfont{ma75ab10}
+ {ma75az10,ma75a10,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{10}
+ \installfont{ma75ab12}
+ {ma75az12,ma75a12,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{12}
+ \installfont{ma75ab14}
+ {ma75az14,ma75a14,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{14}
+ \installfont{ma75ab18}
+ {ma75az18,ma75a18,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{18}
+ \installfont{ma75ab24}
+ {ma75az24,ma75a24,latin}{OT1c9}{OT1}{fmv9}{b}{sc}{24}
+\endinstallfonts
+
+\bye
+
diff --git a/fonts/malvern/fontinst/pdcadma.mtx b/fonts/malvern/fontinst/pdcadma.mtx
new file mode 100644
index 0000000000..59d7c98bef
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcadma.mtx
@@ -0,0 +1,151 @@
+% %M% 1.%I% 19%E% -- glyph hacks for Malvern -*-TeX-*-
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "P. Damian Cugley",
+%%% version = "1.%I%",
+%%% date = "19%E%",
+%%% filename = "%M%",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "AFM, virtual fonts, fonts, Malvern, TeX",
+%%% supported = "no",
+%%% abstract = "Hacks for making Malvern A glyphs
+%%% from Adobe glyphs.",
+%%% package = "",
+%%% dependencies = "fontinst, pdc-etxf.tex",
+%%% }
+%%% ====================================================================
+
+\relax
+
+\catcode`@=11 \input fontdoc.sty \catcode`@=12
+\input pdcetxf
+
+% Following 4 lines get the version ID from SCCS:
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\pdcversion{1.%R%}
+ \def\lastedit{19%E%}
+}\the\toks0
+
+\title{Malvern glyphes for {\tt fontinst}}
+
+\section{Introduction}
+ This document describes additional glyphs for the {\tt fontinst}
+ package to use when generating Latin fonts with the Malvern~A
+ and B encodings from fonts with the Adobe character set. It
+ should be listed in a \cs{installfont} command after {\tt
+ latin}.
+
+ This is version \pdcversion, last edited \lastedit.
+
+\raggedright
+
+\metrics
+
+\def\setleftrightkerning#1#2#3%
+{
+ \setleftkerning{#1}{#2}{#3}
+ \setrightkerning{#1}{#2}{#3}
+}
+
+\comment{\section{Miscellaneous glyphs}}
+
+\setint{superiorscale}{700}
+\setint{superiordy}{\sub{\int{ascender}}
+ {\scale{\int{ascender}}{\int{superiorscale}}}}
+\setint{inferiorscale}{\int{superiorscale}}
+\setint{inferiordy}{0}
+
+\def\superior#1%
+{
+ \moveup{\int{superiordy}}
+ \glyph{#1}{\int{superiorscale}}
+ \moveup{-\int{superiordy}}
+}
+
+\def\inferior#1%
+{
+ \moveup{\int{inferiordy}}
+ \glyph{#1}{\int{inferiorscale}}
+ \moveup{-\int{inferiordy}}
+}
+\def\flushtop#1#2%
+{
+ \moveup{\sub{\height{X}}{\scale{\height{#1}}{#2}}}
+ \glyph{#1}{#2}
+ \moveup{\sub{\scale{\height{#1}}{#2}}{\height{X}}}
+}
+
+\setglyph{cedillacap} \glyph{cedilla}{1000} \endsetglyph
+\setglyph{ogonekcap} \glyph{ogonek}{1000} \endsetglyph
+\setglyph{acutecap} \glyph{acute}{1000} \endsetglyph
+\setglyph{gravecap} \glyph{grave}{1000} \endsetglyph
+\setglyph{circumflexcap} \glyph{circumflex}{1000} \endsetglyph
+\setglyph{tildecap} \glyph{tilde}{1000} \endsetglyph
+\setglyph{ringcap} \glyph{ring}{1000} \endsetglyph
+\setglyph{caroncap} \glyph{caron}{1000} \endsetglyph
+\setglyph{brevecap} \glyph{breve}{1000} \endsetglyph
+\setglyph{hungarumlautcap} \glyph{hungarumlaut}{1000} \endsetglyph
+\setglyph{macrondbl} \glyph{macron}{1000} \endsetglyph
+
+\setglyph{careof}
+ \flushtop{c}{\int{superiorscale}}
+ \glyph{fraction}{1000}
+ \inferior{o}
+\endsetglyph
+
+\setglyph{csuperior}
+ \superior{c}
+\endsetglyph
+
+\setglyph{csuperior1}
+ \glyph{csuperior}{1000}
+\endsetglyph
+
+\setint{ballotboxht}{\add{\int{ascender}}{\int{descender}}}
+\setint{ballotboxdp}{\int{descender}}
+\setint{ballotboxwd}{\sub{\int{ballotboxht}}
+ {\scale{\int{underlinethickness}}{2000}}}
+\setint{ballotboxsp}{\int{visiblespacesurround}}
+
+\setglyph{ballotbox}
+ \movert{\int{ballotboxsp}}
+ \moveup{-\int{ballotboxdp}}
+ \glyphrule{\int{underlinethickness}}{\int{ballotboxht}}
+ \push
+ \moveup{\sub{\int{ballotboxht}}{\int{underlinethickness}}}
+ \glyphrule{\int{ballotboxwd}}{\int{underlinethickness}}
+ \pop
+ \glyphrule{\int{ballotboxwd}}{\int{underlinethickness}}
+ \glyphrule{\int{underlinethickness}}{\int{ballotboxht}}
+ \moveup{\int{ballotboxdp}}
+ \movert{\int{ballotboxsp}}
+\endsetglyph
+
+\setint{markscale}{750}
+% based on Alan's topaccent
+\setglyph{hcircumflex}
+ \push
+ \moveup{\sub{\int{xheight}}{\scale{\int{xheight}}{\int{markscale}}}}
+ \movert{\sub{\scale{\width{h}}{600}}
+ {\scale{\scale{\width{circumflex}}{500}}{\int{markscale}}}}
+ \glyph{circumflex}{\int{markscale}}
+ \pop
+ \glyph{h}{1000}
+\endsetglyph
+
+\setglyph{copyright}
+ \glyph{copyrightserif}{1000}
+\endsetglyph
+
+\setglyph{registered}
+ \glyph{registerserif}{1000}
+\endsetglyph
+
+\endmetrics
+
+\bye
+
+
diff --git a/fonts/malvern/fontinst/pdcetxf.tex b/fonts/malvern/fontinst/pdcetxf.tex
new file mode 100644
index 0000000000..6860f77283
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcetxf.tex
@@ -0,0 +1,197 @@
+% pdcetxf.tex 1.1.1 1994/07/20 -- Formatting macros for ETX files -*-TeX-*-
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-macro-file {
+%%% filename = "pdcetxf.tex",
+%%% version = "1.1.1",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Fontinst, virtual fonts, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Macros for formatting Damian's encoding (ETX) files.",
+%%% dependencies = "",
+%%% }
+
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+\font\titlerm=cmss17
+\font\sectionrm=cmss12
+\font\tensc=cmcsc10 \let\sc=\tensc
+\font\tenrmpounds=cmu10 \def\pounds{{\tenrmpounds \$}}
+
+% Macros to print composite letters and a few other glyphs:
+
+\def\c#1{\setbox0\hbox{#1}\ifdim\ht0=1ex\accent24 #1%
+ \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox0}}\fi}
+\def\UU{\leavevmode\setbox0\hbox{h}\dimen0\ht0\advance\dimen0-1ex%
+ \rlap{\raise.67\dimen0\hbox{\char'27}}U}
+\def\uu{\accent23u}
+
+\def\flushtop#1%
+{{%
+ \setbox0=\hbox{#1}\setbox1=\hbox{X}%
+ \dimen0=\ht1 \advance\dimen0-\ht0
+ \raise\dimen0\box0
+}}
+
+\def\lguil{\raise0.33ex\hbox{$\scriptscriptstyle \langle\!\langle$}}
+\def\rguil{\raise0.33ex\hbox{$\scriptscriptstyle \rangle\!\rangle$}}
+
+\def\registered
+{%
+ \ooalign{\hfil\raise0.045ex\hbox{\sc \kern0.05em r}\hfil
+ \crcr\mathhexbox20D}%
+}
+\def\copyright
+{%
+ \ooalign{\hfil\raise0.035ex\hbox{\sc \kern-0.025em c}\hfil
+ \crcr\mathhexbox20D}%
+}
+\def\trademark{\flushtop{$\scriptscriptstyle\rm TM$}}
+
+\def\tick
+{%
+ \flushtop{\the\scriptscriptfont2
+ \kern0.06em \char'060 \kern0.06em }%
+}
+\def\tickdbl
+{%
+ \flushtop{\the\scriptscriptfont2
+ \kern0.06em \char'060 \char'060 \kern0.06em }%
+}
+\def\asciicircum
+{%
+ \leavevmode\raise0.5ex\hbox{\the\scriptscriptfont2 \char"5E }%
+}
+
+\newcount\seccount \seccount=0
+\def\section#1%
+{%
+ \medbreak
+ \global\advance\seccount1
+ \leftline{\sectionrm \the\seccount.\ #1}
+ \nobreak\smallskip
+ \everypar{\setbox0=\lastbox \global\everypar={}}
+}
+
+\def\LaTeX{L\kern-0.1em \flushtop{a}\kern-0.1em\TeX}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TeXbook chapter 23 -- three columns
+
+\newdimen\pagewd \newdimen\margin \margin=15mm \newdimen\colsep \colsep=1pc
+\pagewd=210mm \advance\pagewd-2\margin
+
+\hoffset=\margin\advance\hoffset-1in
+\voffset=\margin\advance\voffset-1in
+\vsize=297mm \advance\vsize-2\margin
+
+\hsize=\pagewd \advance\hsize-2\colsep \divide\hsize3
+\tolerance=1000
+
+\def\makeheadline
+{
+ \vbox to 0pt
+ {
+ \vskip-22.5pt
+ \hbox to \pagewd{\vbox to 8.5pt{} \the\headline}
+ \vss
+ }
+ \nointerlineskip
+}
+\def\makefootline
+{
+ \baselineskip=24pt
+ \hbox to \pagewd{\the\footline}
+}
+
+\let\lmr=L \newbox\leftcolumn \newbox\midcolumn
+\output=
+{
+ \if L\lmr
+ \global\setbox\leftcolumn=\columnbox
+ \global\let\lmr=M
+ \else\if M\lmr
+ \global\setbox\midcolumn=\columnbox
+ \global\let\lmr=R
+ \else
+ \tripleformat
+ \global\let\lmr=L
+ \fi\fi
+ \ifnum\outputpenalty>-20000 \else
+ \dosupereject
+ \fi
+}
+\def\tripleformat
+{%
+ \shipout\vbox
+ {
+ \makeheadline
+ \hbox to \pagewd{\box\leftcolumn \hfil
+ \box\midcolumn\hfil
+ \columnbox}
+ \makefootline
+ }
+ \advancepageno
+}
+\def\columnbox{\leftline{\pagebody}}
+
+\def\bye
+{
+ \par\vfill\supereject
+ \if L\lmr \else \null\vfill\eject \fi
+ \if L\lmr \else \null\vfill\eject \fi
+ \end
+}
+
+\spaceskip=0.3em \rightskip=0pt plus 2em
+
+
+\def\title#1%
+{
+ \begingroup \parindent=0pt \titlerm \baselineskip=20pt \rightskip=0pt
+ plus 2em \hyphenpenalty=10000
+ #1
+ \medskip
+ \endgroup
+
+ \noindent
+ Version \pdcversion, \lastedit
+ \bigskip
+
+ \rightline{\vbox{\halign{##\hfil\cr
+ P.\ Damian Cugley\cr
+ \noalign{\smallskip}%
+ Oxford University\cr\quad Computing Laboratory\cr
+ Parks Road\cr
+ Oxford OX1 3QD\cr
+ UK \cr
+ \noalign{\smallskip}%
+ \tt Damian.Cugley@\cr\tt\quad comlab.ox.ac.uk\cr
+ }}}
+ \bigbreak
+}
+
+\def\cs#1{\leavevmode\hbox{\tt\char92 #1}}
+
+\def\frac#1/#2%
+{%
+ \leavevmode\kern0.1em
+ \raise0.5ex \hbox{\the\scriptfont0 #1}%
+ \kern -0.1em /\kern-0.15em
+ \lower0.5ex \hbox{\the\scriptfont0 #2}%
+}
+
+\def\Aheading#1{\smallbreak\noindent{\bf#1}}
+\def\docscale#1#2{#1\times#2/1000}
+
+%Local Variables:
+%tex-mother-file: "pdcmaa.etx"
+%End:
diff --git a/fonts/malvern/fontinst/pdcetxm.tex b/fonts/malvern/fontinst/pdcetxm.tex
new file mode 100644
index 0000000000..359db273e2
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcetxm.tex
@@ -0,0 +1,110 @@
+% pdcetxm.tex 1.1.1 1994/07/20 -- macros for ETX files
+% Copyright 1993, 1994 P. Damian Cugley
+
+%%% @TeX-macro-file {
+%%% filename = "pdcetxm.tex",
+%%% version = "1.1.1",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Macros for Damian's ETX files.",
+%%% dependencies = "",
+%%% }
+
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% Macro to enumerate numerals 0..9
+% #1 -- description
+% of which set of numerals this will be -- such as "old style" or
+% "ranging"
+% #2 -- the suffix to append to the letter to make its name
+% -- e.g., "oldstyle" to make "oneoldstyle", etc
+% #3 -- body of macro to typeset a sammple numberal
+% it takes one argument, the character to be displayed
+%
+% For eample, \pdcnumerals{ranging}{}{#1} or
+% \pdcnumerals{old style}{oldstyle}{$\mit#1$}
+
+% pdc 1993/10/21
+
+\def\pdcnumerals#1#2%
+{
+ \edef\numeralentry##1##2%
+ {%
+ \noexpand\setslot{##1#2}
+ \noexpand\comment{The #1 digit
+ `\noexpand\numeralsample{##2}'.}
+ \noexpand\endsetslot
+ }
+ \afterassignment\xxxpdcnumerals
+ \def\numeralsample##1%
+}
+
+\def\xxxpdcnumerals
+{
+ \numeralentry{zero}{0}
+ \numeralentry{one}{1}
+ \numeralentry{two}{2}
+ \numeralentry{three}{3}
+ \numeralentry{four}{4}
+ \numeralentry{five}{5}
+ \numeralentry{six}{6}
+ \numeralentry{seven}{7}
+ \numeralentry{eight}{8}
+ \numeralentry{nine}{9}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Macro to enumerate alphabetics
+
+% #1 -- a description of which alphabet this will be -- such as
+% "lower case" or "capital"
+% #2 -- the suffix to append to the letter to make its name --
+% e.g., "small" to make "Asmall", "Bsmall", etc.
+% #3 -- macro body to typeset a sample letter
+% it takes one argument, the character to be displayed
+% For eample, \pdcuppercase{upper case}{}{\uppercase{#1}} or
+% \pdclowercase{small capital}{small}{{\sc \lowercase{#1}}}
+
+% pdc 1993/10/21
+
+\newif\ifpdclowercase
+\def\pdcuppercase{\pdclowercasefalse\pdcalphabet}
+\def\pdclowercase{\pdclowercasetrue\pdcalphabet}
+
+\def\pdcalphabet#1#2%
+{
+ \edef\alphabetentry##1##2%
+ {%
+ \noexpand\setslot{\ifpdclowercase##2\else##1\fi#2}
+ \noexpand\comment{The #1 letter
+ `\noexpand\alphabetsample{##1}'.}
+ \noexpand\endsetslot
+ }
+ \afterassignment\xxxpdcalphabet
+ \def\alphabetsample##1%
+}
+
+\def\xxxpdcalphabet
+{
+ \alphabetentry{A}{a} \alphabetentry{B}{b} \alphabetentry{C}{c}
+ \alphabetentry{D}{d} \alphabetentry{E}{e} \alphabetentry{F}{f}
+ \alphabetentry{G}{g} \alphabetentry{H}{h} \alphabetentry{I}{i}
+ \alphabetentry{J}{j} \alphabetentry{K}{k} \alphabetentry{L}{l}
+ \alphabetentry{M}{m} \alphabetentry{N}{n} \alphabetentry{O}{o}
+ \alphabetentry{P}{p} \alphabetentry{Q}{q} \alphabetentry{R}{r}
+ \alphabetentry{S}{s} \alphabetentry{T}{t} \alphabetentry{U}{u}
+ \alphabetentry{V}{v} \alphabetentry{W}{w} \alphabetentry{X}{x}
+ \alphabetentry{Y}{y} \alphabetentry{Z}{z}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/fonts/malvern/fontinst/pdcmaa.etx b/fonts/malvern/fontinst/pdcmaa.etx
new file mode 100644
index 0000000000..6f0c2b9cb2
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcmaa.etx
@@ -0,0 +1,876 @@
+% pdcmaa.etx 1.1.1 1994/07/20 -- Malvern encoding A -*-TeX-*-
+%%%========================================================================
+%%% @TeX-font-encoding-file{
+%%% author = "Damian Cugley",
+%%% version = "1.1",
+%%% date = "1994/07/20",
+%%% filename = "pdcmaa.etx",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "encoding, Malvern, TeX",
+%%% supported = "no",
+%%% abstract = "This is the Malvern A encoding as a TeX font
+%%% encoding file, for use with the fontinst
+%%% font installation package.",
+%%% package = "Malvern",
+%%% dependencies = "fontinst.sty, pdcetxf.tex, pdcetxm.tex",
+%%% }
+%%%========================================================================
+%
+% This file is based on the Malvern A encoding used with my Malvern fonts.
+% Created pdc 1993/10/01
+
+\relax
+
+\catcode`@=11 \input fontdoc.sty \catcode`@=12
+\input pdcetxf
+
+% Following 4 lines get the version ID from SCCS:
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\pdcversion{1.1}
+ \def\lastedit{1994/07/20}
+}\the\toks0
+
+\title{The Malvern~A encoding~vector}
+
+\section{Introduction}
+ This document describes my Malvern~A \TeX\ font encoding
+ conventions. It is in Alan Jeffrey's Fontinst format, which
+ means that it can be used to generate {\tt vpl} files remapping
+ Malvern-encoded fonts to T1 (Cork) fonts and vice versa.
+
+ The short code for this encoding (for the purposes of Fontinst
+ and NFSS~2\footnote*{The second New Font Selection Scheme -- the font
+ selection scheme that is used in \LaTeX~2e.}) is `{\tt
+ maa}'.\footnote\dag{{\it Ma} is for the Malvern package. In
+ Karl Berry's font naming scheme, Malvern is abbreviated {\it
+ Mv}. But in all other contexts, I have abbreviated it {\it
+ Ma}.} The encoding file is called {\tt pdcmaa.etx}, the `pdc'
+ prefix intended to reduce the probabilty of my font encoding
+ files clashing with anyone else's.
+
+ Malvern~A has the following variants (which only exist because
+ most available PostScript fonts have neither medium capital nor
+ small capital letters):
+\smallskip \item{$\bullet$}
+ A.1\quad Medium capital letters replaced by the corresponding full
+ capitals.
+
+\smallskip\item{$\bullet$}
+ A.2\quad Old style numerals replaced by ranging numerals.
+
+\smallskip\item{$\bullet$}
+ A.3\quad Medium capital letters replaced by the corresponding full
+ capitals and old style numerals replaced by ranging numerals.
+\smallbreak\noindent
+ Which encoding is produced by using this {\tt.etx} file depends
+ on the values of integer variables {\tt nomedium} and {\tt
+ nooldstyle}. If set to any value these variables suppress
+ medium capitals and old style numerals respectively.
+
+\iffalse
+ There are at least the following Malvern encodings:
+\list
+\item
+ Malvern A (upper and lower case, small caps and medium caps),
+\item
+ Malvern B (misc symbols, and overflow from A),
+\item
+ Malvern C (Cyrillic) [partially completed],
+\item
+ Malvern D (composites), and
+\item
+ Malvern G (Greek).
+\endlist
+\fi
+
+\section{Terminology}
+ I will use {\it composite letters} to refer to those glyphs
+ written by combining a {\it base letter} and some sort of {\it
+ mark}, for example, {\it\'e}, {\it\^\j} or {\it\c t}. I avoid
+ the term `accented letter' because it tends to provoke irate
+ email informing me that letters like {\it \"a} and {\it \aa} are
+ not `accented letters' in the languages where they are used.
+
+ The word {\it composite} refers to the way the glyph is written,
+ and does not imply that they will be typeset by overprinting or
+ anything similar.
+
+\section{Medium capitals}
+ The medium-capital alphabet is a peculiarity of the Malvern
+ encoding but is not entirely without precedent (there are other
+ typefaces that supply a smaller set of capitals). M.cap.\
+ letters might be used with the `upper case marks' to make
+ composite letters that do not poke above the line of text as
+ much as plain \TeX's upper case composites do. Some computer
+ documentation uses medium capitals for all-capital acronyms.
+ Some people have suggested using medium-capitals for languages
+ like German which use many initial capitals.
+
+ If a typeface has no medium capitals, then large capitals should
+ be substituted (encoding A.1).
+\bigskip \hrule \medskip
+
+\encoding
+
+\needsfontinstversion{1.315}
+\input pdcetxm
+
+\comment{\section{Default values}}
+\setstr{codingscheme}{Malvern A}
+
+\setint{italicslant}{0}
+
+\ifisglyph{space}\then
+ \setint{interword}{\width{space}}
+\else
+ \setint{interword}{333}
+\fi
+
+\ifisglyph{x}\then
+ \setint{xheight}{\height{x}}
+\else
+ \setint{xheight}{500}
+\fi
+
+\comment{\section{Default font dimensions}}
+\setint{fontdimen(1)}{\int{italicslant}} % italic slant
+\setint{fontdimen(2)}{\int{interword}} % interword space
+\ifisint{monowidth}\then
+ \setint{fontdimen(3)}{0} % interword stretch
+ \setint{fontdimen(4)}{0} % interword shrink
+\else
+ \setint{fontdimen(3)}{\scale{\int{interword}}{333}}% interword stretch
+ \setint{fontdimen(4)}{\scale{\int{interword}}{333}}% interword shrink
+\fi
+\setint{fontdimen(5)}{\int{xheight}} % x-height
+\setint{fontdimen(6)}{1000} % quad
+\ifisint{monowidth}\then
+ \setint{fontdimen(7)}{\int{interword}} % extra space after .
+\else
+ \setint{fontdimen(7)}{0} % extra space after .
+\fi
+
+\comment{\section{The encoding}
+ There are 256 glyphs in this encoding.}
+
+\setslot{Thorn}
+ \comment{The Icelandic capital letter Thorn, similar to a `P' with the
+ bowl moved down. It is unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{Aogonek}
+ \comment{The letter `A' with an ogonek accent hanging from the bottom
+ right serif.}
+\endsetslot
+
+\setslot{Ng}
+ \comment{The Sami letter `Ng', which looks like an uncial `N' (or a
+ large `n') with a right tail taken from a `j'. It is unavailable
+ in plain \TeX.}
+\endsetslot
+
+\setslot{Lslash}
+ \comment{The uppercase Polish letter `\L'}
+\endsetslot
+
+\setslot{Eth}
+ \comment{The uppercase Icelandic letter `Eth' similar to a `D' with a
+ horizontal bar through the stem. It is unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{Eogonek}
+ \comment{The letter `E' with an ogonek hanging from the right of the
+ bottom bar.}
+\endsetslot
+
+\setslot{cedilla}
+ \comment{The cedilla mark `\c c'.}
+\endsetslot
+
+\setslot{ogonek}
+ \comment{The ogonek mark (unavailable in plain \TeX).}
+\endsetslot
+
+\setslot{acute}
+ \comment{The acute mark `\'a'.}
+\endsetslot
+
+\setslot{grave}
+ \comment{The grave mark `\`a'.}
+\endsetslot
+
+\setslot{circumflex}
+ \comment{The circumflex mark `\^ a'.}
+\endsetslot
+
+\setslot{tilde}
+ \comment{The tilde mark `\~a'.}
+\endsetslot
+
+\setslot{ring}
+ \comment{The ring mark `\aa'.}
+\endsetslot
+
+\setslot{caron}
+ \comment{The hook (h\'a\v cek) mark `\v c'.}
+\endsetslot
+
+\setslot{breve}
+ \comment{The breve mark `\u a'.}
+\endsetslot
+
+\setslot{hungarumlaut}
+ \comment{The long Hungarian umlaut mark `\H a'.}
+\endsetslot
+
+\setslot{thorn}
+ \comment{The Icelandic lower case letter thorn, similar to a `p' with
+ the ascender of a `b'. It is unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{aogonek}
+ \comment{The letter `a' with an ogonek mark hanging from the bottom
+ right stroke.}
+\endsetslot
+
+\setslot{ng}
+ \comment{The Sami letter `eng', which looks like an `n' with a right
+ tail like a `j'. It is unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{lslash}
+ \comment{The lower case Polish letter `\l'}
+\endsetslot
+
+\setslot{eth}
+ \comment{The lower case Icelandic letter `eth' similar to a
+ `$\partial$' with a stroke through the ascender. It is
+ unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{eogonek}
+ \comment{The letter `e' with an ogonek mark hanging from bottom
+ stroke.}
+\endsetslot
+
+\setslot{dotaccent}
+ \comment{The dot mark `\.c'.}
+\endsetslot
+
+\setslot{dieresis}
+ \comment{The two-dots mark `\"a'.}
+\endsetslot
+
+\setslot{germandbls}
+ \comment{The German {\it Eszet}\/ `\ss'.}
+\endsetslot
+
+\setslot{dotlessi}
+ \comment{A dotless {\it i} `\i', used to produce composite letters
+ such as `\^\i'.}
+\endsetslot
+
+\setslot{dotlessj}
+ \comment{A dotless {\it j} `\j', used to produce composite letters
+ such as `\^\j' (Esperanto letter).}
+\endsetslot
+
+\setslot{ff}
+ \ligature{LIG}{i}{ffi}
+ \ligature{LIG}{l}{ffl}
+ \comment{The `ff' ligature.}
+\endsetslot
+
+\setslot{fi}
+ \comment{The `fi' ligature.}
+\endsetslot
+
+\setslot{fl}
+ \comment{The `fl' ligature.}
+\endsetslot
+
+\setslot{ffi}
+ \comment{The `ffi' ligature.}
+\endsetslot
+
+\setslot{ffl}
+ \comment{The `ffl' ligature.}
+\endsetslot
+
+\setslot{bullet}
+ \comment{A bullet `$\bullet$'.}
+\endsetslot
+
+\setslot{exclam}
+ \ligature{LIG}{quoteleft}{exclamdown}
+ \comment{The exclamation mark `!'.}
+\endsetslot
+
+\setslot{trademark}
+ \comment{The trademark sign, `\trademark'.
+ I~deliberately did not put anything resembling a quotation mark
+ in this slot, in the hope that that people who think that they
+ can use `neutral quotation marks' in typeset text will be
+ trained out of this bad habit.}
+\endsetslot
+
+
+\setslot{numbersign}
+ \comment{The hash mark `\#'.}
+\endsetslot
+
+\setslot{dollar}
+ \comment{The dollar sign `\$'.}
+\endsetslot
+
+\setslot{percent}
+ \comment{The percent sign `\%'.}
+\endsetslot
+
+\setslot{ampersand}
+ \comment{The ampersand sign `\&'.}
+\endsetslot
+
+\setslot{quoteright}
+ \ligature{LIG}{quoteright}{quotedblright}
+ \comment{The apostrophe `\thinspace'\thinspace'.}
+\endsetslot
+
+\setslot{parenleft}
+ \comment{The opening parenthesis `('.}
+\endsetslot
+
+\setslot{parenright}
+ \comment{The closing parenthesis `)'.}
+\endsetslot
+
+\setslot{asterisk}
+ \comment{The raised asterisk `*'.}
+\endsetslot
+
+\setslot{plus}
+ \comment{The addition sign `+'.}
+\endsetslot
+
+\setslot{comma}
+ \ligature{LIG}{comma}{quotedblbase}
+ \comment{The comma `,'.}
+\endsetslot
+
+\setslot{hyphen}
+ \ligature{LIG}{hyphen}{rangedash}
+ \comment{The hyphen `-'.}
+\endsetslot
+
+\setslot{period}
+ \comment{The full point `.'.}
+\endsetslot
+
+\setslot{slash}
+ \comment{The forward oblique `/'.}
+\endsetslot
+
+
+\ifisint{nooldstyle}\then
+ \pdcnumerals{ranging}{}{$#1$}
+\else
+ \comment{\medskip The old style numerals. In effect, old style
+ figures the default for plain text. \endgraf By using
+ {\tt\char92 mathcode}s, a document designer can arrange that
+ ranging numerals be used in maths mode, and then arrange that
+ all numbers be set in maths mode. (It might be easier to use a
+ virtual font to exchange the ranging and old style numerals and
+ not use old style figures at all.) \endgraf This and the
+ following nine glyphs might be the same as glyphs 176--87, if
+ the typeface has no old style digits.}
+
+ \pdcnumerals{old style}{oldstyle}{$\mit#1$}
+\fi
+
+\setslot{colon}
+ \comment{The colon `:'.}
+\endsetslot
+
+\setslot{semicolon}
+ \comment{The semi-colon `;'.}
+\endsetslot
+
+\setslot{guilsinglleft}
+ \comment{A leftward-pointing single guillemet (cf.\ glyph~188), not
+ available in plain \TeX.}
+\endsetslot
+
+\setslot{equal}
+ \comment{The equals sign `='.}
+\endsetslot
+
+\setslot{guilsinglright}
+ \comment{A rightward-pointing single guillemet (cf.\ glyph~190), not
+ available in plain \TeX.}
+\endsetslot
+
+\setslot{question}
+ \ligature{LIG}{quoteleft}{questiondown}
+ \comment{The question mark `?'.}
+\endsetslot
+
+\setslot{at}
+ \comment{The commerical at sign `@'.}
+\endsetslot
+
+
+\pdcuppercase{capital}{}{\uppercase{#1}}
+
+
+\setslot{bracketleft}
+ \comment{The opening square bracket `['.}
+\endsetslot
+
+\setslot{Oslash}
+ \comment{The letter `\O'.}
+\endsetslot
+
+\setslot{bracketright}
+ \comment{The closing square bracket `]'.}
+\endsetslot
+
+\setslot{AE}
+ \comment{The letter `\AE'.}
+\endsetslot
+
+\setslot{OE}
+ \comment{The letter `\OE'.}
+\endsetslot
+
+\setslot{quoteleft}
+ \ligature{LIG}{quoteleft}{quotedblleft}
+ \comment{The inverted (turned) comma `\thinspace`\thinspace'. English opening
+ quotation mark, German closing nested quotation mark.}
+\endsetslot
+
+\pdclowercase{lower case}{}{\lowercase{#1}}
+
+\setslot{braceleft}
+ \comment{The opening curly brace `$\lbrace$'.}
+\endsetslot
+
+\setslot{oslash}
+ \comment{The lower case letter `\o'.}
+\endsetslot
+
+\setslot{braceright}
+ \comment{The closing curly brace `$\rbrace$'.}
+\endsetslot
+
+\setslot{ae}
+ \comment{The lower case letter `\ae'.}
+\endsetslot
+
+\setslot{oe}
+ \comment{The lower case letter `\oe'.}
+\endsetslot
+
+\ifisint{nomedium}\then
+
+\setslot{Thorn}
+ \comment{The capital Icelandic letter Thorn, same as glyph~0.}
+\endsetslot
+
+\setslot{Aogonek}
+ \comment{The capital letter `A' with an ogonek hanging from
+ the bottom right serif, same as glyph~1}
+\endsetslot
+
+\setslot{Ng}
+ \comment{The capital Sami letter `Eng', same as glyph~2.}
+\endsetslot
+
+\setslot{Lslash}
+ \comment{The capital Polish letter `\L', same as glyph~3.}
+\endsetslot
+
+\setslot{Eth}
+ \comment{The capital Icelandic letter `Eth', same as glyph~4.}
+\endsetslot
+
+\setslot{Eogonek}
+ \comment{The capital letter `E' with an ogonek hanging from
+ the right of the bottom bar, same as glyph~5.}
+\endsetslot
+
+\else
+
+\setslot{Thornmedium}
+ \comment{The medium capital Icelandic letter Thorn, similar to a `P'
+ with the bowl moved down. It is unavailable in plain \TeX. See
+ \S\thinspace XXX for information about medium capital letters.}
+\endsetslot
+
+\setslot{Aogonekmedium}
+ \comment{The medium capital letter `A' with an ogonek hanging from
+ the bottom right serif. The PostScript conventions for naming
+ glyphs begin to fray at this point\dots}
+\endsetslot
+
+\setslot{Ngmedium}
+ \comment{The medium capital Sami letter `Eng', which looks like an
+ uncial `N' (or a large `n') with a right tail taken from a `j'.
+ It is unavailable in plain \TeX.}
+\endsetslot
+
+\setslot{Lslashmedium}
+ \comment{The medium capital Polish letter `\L'}
+\endsetslot
+
+\setslot{Ethmedium}
+ \comment{The medium capital Icelandic letter `Eth' similar to a `D'
+ with a horizontal bar through the stem. It is unavailable in
+ plain \TeX.}
+\endsetslot
+
+\setslot{Eogonekmedium}
+ \comment{The medium capital letter `E' with an ogonek hanging from
+ the right of the bottom bar.}
+\endsetslot
+\fi
+
+\setslot{cedillacap}
+ \comment{The cedilla mark `\c C', sized for capital letters.}
+\endsetslot
+
+\setslot{ogonekcap}
+ \comment{The ogonek mark, sized for capital leters (unavailable in
+ plain \TeX).}
+\endsetslot
+
+\setslot{acutecap}
+ \comment{The acute mark `\'A', sized for (medium) capital letters.
+ For all these `capital marks', the glyph is positioned
+ vertically in the correct position to go over a lower case
+ letter, even though it is intended to be used over capital or
+ medioum capital base glyphs. This is so that \TeX's
+ {\tt\char92 accent} primitive may be used to position the
+ mark.}
+\endsetslot
+
+\setslot{gravecap}
+ \comment{The grave mark `\`A', sized for capital letters.}
+\endsetslot
+
+\setslot{circumflexcap}
+ \comment{The circumflex mark `\^ A', sized for capital letters.}
+\endsetslot
+
+\setslot{tildecap}
+ \comment{The tilde mark `\~A', sized for capital letters.}
+\endsetslot
+
+\setslot{ringcap}
+ \comment{The ring mark `\AA', sized for capital letters.}
+\endsetslot
+
+\setslot{caroncap}
+ \comment{The hook (h\'a\v cek) mark `\v C', sized for
+ capital letters.}
+\endsetslot
+
+\setslot{brevecap}
+ \comment{The breve mark `\u A', sized for capital letters.}
+\endsetslot
+
+\setslot{hungarumlautcap}
+ \comment{The long Hungarian umlaut mark `\H A', sized for
+ capital letters.}
+\endsetslot
+
+\setslot{Thornsmall}
+ \comment{The Icelandic small capital letter thorn, similar to a `{\sc
+ p}', but with the bowl lowered. It is unavailable in plain
+ \TeX.}
+\endsetslot
+
+\setslot{Aogoneksmall}
+ \comment{The small capital letter `{\sc a}' with an ogonek mark
+ hanging from the bottom right stroke.}
+\endsetslot
+
+\setslot{Ngsmall}
+ \comment{The Sami small capital letter `eng'. It is unavailable in
+ plain \TeX.}
+\endsetslot
+
+\setslot{Lslashsmall}
+ \comment{The small capital Polish letter `{\sc\l}'}
+\endsetslot
+
+\setslot{Ethsmall}
+ \comment{The small capital Icelandic letter `eth' similar to a `{\sc
+ d}' with a stroke through the left stem. It is unavailable in
+ plain \TeX.}
+\endsetslot
+
+\setslot{Eogoneksmall}
+ \comment{The small capital letter `{\sc e}' with an ogonek mark
+ hanging from bottom bar.}
+\endsetslot
+
+\setslot{macron}
+ \comment{The macron mark `\=a'.}
+\endsetslot
+
+\setslot{macrondbl}
+ \comment{The macron mark `$\overline{\rm aa}$', intended to be wide
+ enough for two letters.}
+\endsetslot
+
+\setslot{ordfeminine}
+ \comment{A superior (raised) lower case letter {\it a}, optionally
+ with a bar under: `\flushtop{\the\scriptfont\fam a}' or
+ `\flushtop{\the\scriptfont\fam \b{a}}'.}
+\endsetslot
+
+\setslot{ordmasculine}
+ \comment{A superior lower case letter {\it o}, optionally with a bar
+ under: `\flushtop{\the\scriptfont\fam o}' or `\flushtop{\the\scriptfont\fam
+ \b{o}}'. Thus `N\flushtop{\the\scriptfont\fam \b{o}}'.}
+\endsetslot
+
+\setslot{careof}
+ \comment{A superior {\it c} and infoerior {\it o} separated by a
+ slash. This, or `c/o', is sometimes used to abbrevate `care
+ of'.}
+\endsetslot
+
+\setslot{csuperior1}
+ \comment{A superior lower case letter {\it c}, optionally with a bar
+ under: `\flushtop{\the\scriptfont\fam c}' or `\flushtop{\the\scriptfont\fam
+ \b{c}}'. The `-1' in the name indicates it is a
+ variation on plain `csuperior', which would presumably lack the
+ bar. Thus `M\flushtop{\the\scriptfont\fam \b{c}}Donald'.}
+\endsetslot
+
+
+\setslot{dcaron}
+ \comment{The lower case letter `d' with a hook mark, which is usually
+ drawn as a curl from the right of the ascender rather than a
+ `\v{}' over the letter.}
+\endsetslot
+
+\setslot{tcaron}
+ \comment{The lower case letter `t' with a hook mark, which is usually
+ drawn as a curl from the right of the ascender rather than a
+ `\v{}' over the letter.}
+\endsetslot
+
+\setslot{hcircumflex}
+ \comment{The lower case letter `h' with a circumflex mark (the
+ Esperanto letter hho). Although usually drawn with the mark
+ above the ascender, I would suggest that the same considerations
+ as `dcaron' and `tcaron' apply, and the mark might better be
+ drawn to the right of the ascender.}
+\endsetslot
+
+\setslot{lcaron}
+ \comment{The lower case letter `L' with a hook mark, which is usually
+ drawn as a curl from the right of the ascender rather than a
+ `\v{}' over the letter.}
+\endsetslot
+
+
+\setslot{ballotbox}
+ \comment{A ballot-box (hollow square).}
+\endsetslot
+
+\setslot{exclamdown}
+ \comment{The inverted exclamation mark `!`'.}
+\endsetslot
+
+\setslot{cent}
+ \comment{A cents sign: c or \rlap{/}c.}
+\endsetslot
+
+\setslot{sterling}
+ \comment{The British currency mark `\pounds'.}
+\endsetslot
+
+\setslot{currency}
+ \comment{The ISO 646 currency mark, a ring with four ears pointing
+ NW, NE, SW and SE.}
+\endsetslot
+
+\setslot{perthousand}
+ \comment{The per-thousand sign, like a `\%' but with two rings below
+ the slash.}
+\endsetslot
+
+\setslot{multiply}
+ \comment{The multiplication sign $\times$.}
+\endsetslot
+
+\setslot{quotedblright}
+ \comment{A double apostrophe `\thinspace''\thinspace', a English closing quotation
+ mark.}
+\endsetslot
+
+\setslot{yen}
+ \comment{The Japanese yen currency sign
+ {\setbox0=\hbox{Y}\rlap{\hbox to \wd0 {\hfil \the\scriptfont\fam=\hfil
+ }}\box0 }.}
+\endsetslot
+
+\setslot{florin}
+ \comment{The florin currency sign, an italic `{\it f\/}'.}
+\endsetslot
+
+\setslot{dagger}
+ \comment{A dagger sign `\dag'.}
+\endsetslot
+
+\setslot{daggerdbl}
+ \comment{A double dagger sign `\ddag'.}
+\endsetslot
+
+\setslot{quotedblbase}
+ \comment{A double comma `,\kern-1pt,' used as an opening quotation
+ mark in German. Note that I have not included a
+ `quotesingbase', which implies that a comma must be used
+ instead. Sorry.}
+\endsetslot
+
+\setslot{rangedash}
+ \ligature{LIG}{hyphen}{punctdash}
+ \comment{The en-dash, used in English as a number range dash `1--9'.}
+\endsetslot
+
+\setslot{periodcentered}
+ \comment{A raised full stop, used as a decimal point in English
+ typesetting: `$3{\cdot}142$' rather than `3,142'.}
+\endsetslot
+
+\setslot{minus}
+ \comment{A minus sign, `$-$', so that it is possible to typeset
+ `$-1\,^\circ\rm C$' without using symbol fonts.}
+\endsetslot
+
+\pdcnumerals{ranging}{}{$#1$}
+
+\setslot{section}
+ \comment{The section sign `\S'.}
+\endsetslot
+
+\setslot{paragraph}
+ \comment{The paragraph sign or pilcrow `\P'.}
+\endsetslot
+
+\setslot{guillemotleft}
+ \comment{A leftward-pointing guillemet, unavailable in plain \TeX\
+ but not entirely unlike `\lguil'. French opening quote mark,
+ German closing quote mark.}
+\endsetslot
+
+\setslot{punctdash}
+ \comment{The em-dash, or punctuation dash `Oh---boy'.}
+\endsetslot
+
+\setslot{guillemotright}
+ \comment{A rightward-pointing guillemet, unavailable in plain \TeX\
+ but not entirely unlike `\rguil'. French closing quote mark,
+ German opening quote mark.}
+\endsetslot
+
+\setslot{questiondown}
+ \comment{The inverted question mark `?`'.}
+\endsetslot
+
+\setslot{degree}
+ \comment{The degree sign `$^\circ$'.}
+\endsetslot
+
+\ifisint{nomedium}\then
+ \pdcuppercase{duplicate capital}{}{\uppercase{#1}}
+\else
+ \pdcuppercase{medium capital}{medium}{\uppercase{#1}}
+\fi
+
+\setslot{angleleft}
+ \comment{An opening angle bracket `$\langle$'.}
+\endsetslot
+
+\ifisint{nomedium}\then
+\setslot{Oslash}
+ \comment{Duplicate capital `\O'.}
+\endsetslot
+\else
+\setslot{Oslashmedium}
+ \comment{The medium capital `\O'.}
+\endsetslot
+\fi
+
+\setslot{angleright}
+ \comment{An closing angle bracket `$\rangle$'.}
+\endsetslot
+
+\ifisint{nomedium}\then
+\setslot{AE}
+ \comment{The capital letter `\AE'.}
+\endsetslot
+
+\setslot{OE}
+ \comment{The capital letter `\OE'.}
+\endsetslot
+\else
+\setslot{AEmedium}
+ \comment{The medium capital letter `\AE'.}
+\endsetslot
+
+\setslot{OEmedium}
+ \comment{The medium capital letter `\OE'.}
+\endsetslot
+\fi
+
+\setslot{quotedblleft}
+ \comment{A double inverted comma, `\thinspace``\thinspace'.
+ An English opening
+ quotation mark and German closing quotation mark.}
+\endsetslot
+
+\pdcuppercase{small capital}{small}{{\sc \lowercase{#1}}}
+
+\setslot{copyright}
+ \comment{A small capital `{\sc c}' in a circle: `\copyright', the
+ pan-galactic symbol for `copyright'.}
+\endsetslot
+
+
+\setslot{Oslashsmall}
+ \comment{The small capital `{\sc\o}'.}
+\endsetslot
+
+\setslot{registered}
+ \comment{A small capital `{\sc r}' in a circle, standing for
+ `registered trade mark': `\registered'.}
+\endsetslot
+
+\setslot{AEsmall}
+ \comment{The small capital letter `{\sc\ae}'.}
+\endsetslot
+
+\setslot{OEsmall}
+ \comment{The small capital letter `{\sc\oe}'.}
+\endsetslot
+
+
+\endencoding
+
+\leftline{(End of encoding.)}
+
+\bye
+
+%Local Variables:
+%tex-has-children: t
+%fill-prefix: " "
+%End:
diff --git a/fonts/malvern/fontinst/pdcmaa3.etx b/fonts/malvern/fontinst/pdcmaa3.etx
new file mode 100644
index 0000000000..f21ffc0e78
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcmaa3.etx
@@ -0,0 +1,35 @@
+% pdcmaa3.etx 1.1.1 1994/07/20 -- Malvern encoding A.3 -*-TeX-*-
+%%%========================================================================
+%%% @TeX-font-encoding-file{
+%%% author = "Damian Cugley",
+%%% version = "1.1",
+%%% date = "1994/07/20",
+%%% filename = "pdcmaa3.etx",
+%%% address = "Oxford University Computing Laboratory
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "encoding, Malvern, TeX",
+%%% supported = "no",
+%%% abstract = "This is the Malvern A.3 encoding as a TeX font
+%%% encoding file, for use with the fontinst
+%%% font installation package.",
+%%% package = "Malvern",
+%%% dependencies = "pdcmaa.etx,
+%%% fontinst.sty, pdcetxf.tex, pdcetxm.tex",
+%%% }
+%%%========================================================================
+
+% Note: this file is *not* intended to double as a stand-alone
+% document; use pdcmaa.etx for that.
+
+\relax
+\encoding
+
+\setint{nomedium}{1}
+\setint{nooldstyle}{1}
+
+\inputetx{pdcmaa}
+
+\endencoding
diff --git a/fonts/malvern/fontinst/pdcmab.etx b/fonts/malvern/fontinst/pdcmab.etx
new file mode 100644
index 0000000000..347fb21c83
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcmab.etx
@@ -0,0 +1,523 @@
+% pdcmab.etx 1.1.1 1994/07/20 -- Malvern encoding B -*-TeX-*-
+%%%========================================================================
+%%% @TeX-font-encoding-file{
+%%% author = "Damian Cugley",
+%%% version = "1.1",
+%%% date = "1994/07/20",
+%%% filename = "pdcmab.etx",
+%%% address = "Oxford University Computing Laboratory
+%%% Parks Road
+%%% Oxford OX1 3QD
+%%% UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "encoding, Malvern, TeX, PostScript",
+%%% supported = "no",
+%%% abstract = "This is the Malvern B encoding as a TeX font
+%%% encoding file, for use with the fontinst
+%%% font installation package.",
+%%% package = "Malvern",
+%%% dependencies = "fontinst.sty, fontdoc.sty,
+%%% pdcetxf.tex, pdcetxm.tex",
+%%% }
+%%%========================================================================
+%
+% This file is based on the Malvern B encoding used with my Malvern fonts.
+% Created pdc 1993/10/01
+
+\relax
+
+\catcode`@=11 \input fontdoc.sty \catcode`@=12
+\input pdcetxf
+
+% Following 4 lines get the version ID from SCCS:
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\pdcversion{1.1}
+ \def\lastedit{1994/07/20}
+}\the\toks0
+
+\title{The Malvern~B (symbol) encoding vector}
+\section{Introduction}
+ This document describes my Malvern~B \TeX\ font encoding
+ conventions. It is in Alan Jeffrey's {\tt fontinst} format,
+ which means that it can be used to generate {\tt vpl} files
+ remapping Malvern-encoded fonts to T1 (Cork) fonts and vice
+ versa.
+
+ The short code for this encoding (for the purposes of {\tt
+ fontinst} and NFSS~2\footnote*{The second New Font Selection
+ Scheme, used in \LaTeX~2e.}) is `{\tt mab}'.\footnote\dag{{\it
+ Ma} is for the Malvern package. In Karl Berry's font naming
+ scheme, Malvern is abbreviated {\it Mv}. But in all other
+ contexts, I have abbreviated it {\it Ma}.} Thus the encoding
+ file is called {\tt pdcmab.etx}, the `pdc' prefix intended to
+ reduce the probabilty of my font encoding files clashing with
+ anyone else's.
+
+ The B encoding consists mainly of miscellaneous symbols that
+ don't fit into Malvern~A. It includes those needed to generate
+ Cork-encoded fonts with Malvern~A, and a fair number of special
+ letters.
+\encoding
+
+\needsfontinstversion{1.315}
+
+\comment{\section{Default values}}
+
+\setstr{codingscheme}{Malvern B}
+
+\setint{italicslant}{0}
+
+\ifisglyph{space}\then
+ \setint{interword}{\width{space}}
+\else
+ \setint{interword}{333}
+\fi
+
+\ifisglyph{x}\then
+ \setint{xheight}{\height{x}}
+\else
+ \setint{xheight}{500}
+\fi
+
+\comment{\section{Default font dimensions}}
+
+\setint{fontdimen(1)}{\int{italicslant}} % italic slant
+\setint{fontdimen(2)}{\int{interword}} % interword space
+\ifisint{monowidth}\then
+ \setint{fontdimen(3)}{0} % interword stretch
+ \setint{fontdimen(4)}{0} % interword shrink
+\else
+ \setint{fontdimen(3)}{\scale{\int{interword}}{333}}% interword stretch
+ \setint{fontdimen(4)}{\scale{\int{interword}}{333}}% interword shrink
+\fi
+\setint{fontdimen(5)}{\int{xheight}} % x-height
+\setint{fontdimen(6)}{1000} % quad
+\ifisint{monowidth}\then
+ \setint{fontdimen(7)}{\int{interword}} % extra space after .
+\else
+ \setint{fontdimen(7)}{0} % extra space after .
+\fi
+
+\comment{\section{The encoding proper}}
+
+\nextslot{0}
+\setslot{arrowleft}
+ \comment{An arrow pointing left, `$\leftarrow$'.}
+\endsetslot
+
+\setslot{arrowright}
+ \comment{An arrow pointing right, `$\rightarrow$'.}
+\endsetslot
+
+\setslot{arrowup}
+ \comment{An arrow pointing up, `$\uparrow$'.}
+\endsetslot
+
+\setslot{arrowdown}
+ \comment{An arrow pointing down, `$\downarrow$'.}
+\endsetslot
+
+\setslot{arrowboth}
+ \comment{An arrow pointing left and right, `$\leftrightarrow$'.}
+\endsetslot
+
+\setslot{arrowupdown}
+ \comment{An arrow pointing up and down, `$\updownarrow$'.}
+\endsetslot
+
+\setslot{arrowhorizex}
+ \comment{A rule that can be used to extend horizontal arrows (to
+ make `$\longrightarrow$' etc.).}
+\endsetslot
+
+\setslot{arrowvertex}
+ \comment{A rule that can be used to extend vertical arrows.}
+\endsetslot
+
+\nextslot{32}
+\setslot{space}
+ \comment{A blank space `~', with width of a normal interword space.
+ Cf.\thinspace glyph~160.}
+\endsetslot
+
+\nextslot{`\"}
+\setslot{quotedbl}
+ \comment{A doubled tick mark, `\tickdbl' or `{\tt"}' (cf.\
+ glyph~39). This is the \tickdbl neutral double quotation
+ mark\tickdbl\ which will be used when setting computer
+ langauges, or to simulate the output of DTP programs.}
+\endsetslot
+
+\nextslot{`\!}
+\setslot{brokenbar}
+ \comment{A broken vertical bar.}
+\endsetslot
+
+\nextslot{`\%}
+\setslot{perthousandzero}
+ \comment{A T1 glyph that when jutxaposed with a per cent character
+ produces a per-mille.}
+\endsetslot
+
+\nextslot{`\'}
+\setslot{quotesingle}
+ \comment{An small tick mark, `\tick' or `{\tt\char13 }'. The ASCII
+ combined \tick single quote\tick, apostrophe and acute accent
+ all rolled into one. Use this for LISP's `quote' and as the
+ neutral single quotation mark when setting other computer
+ languages. Used in some formatters and in \TeX\ to stand for an
+ apostrophe `\thinspace'\thinspace'.}
+\endsetslot
+
+\nextslot{`,}
+\setslot{quotesinglbase}
+ \comment{A comma `,', spaced suitably to be used as a German opening
+ quotation mark.}
+\endsetslot
+
+\nextslot{`.}
+\setslot{ellipsis}
+ \comment{An ellipsis `\dots'.}
+\endsetslot
+
+\nextslot{`\/}
+\setslot{fraction}
+ \comment{A slash `/', with negative sidebearings suitable for making
+ fractions like `\frac8/9'.}
+\endsetslot
+
+\nextslot{`0}
+\setslot{zerosuperior}
+ \comment{Superior numeral zero, `\flushtop{\the\scriptfont0 0}'.}
+\endsetslot
+
+\setslot{onesuperior}
+ \comment{Superior numeral one, `\flushtop{\the\scriptfont0 1}'.}
+\endsetslot
+
+\setslot{twosuperior}
+ \comment{Superior numeral two, `\flushtop{\the\scriptfont0 2}'.}
+\endsetslot
+
+\setslot{threesuperior}
+ \comment{Superior numeral three, `\flushtop{\the\scriptfont0 3}'.}
+\endsetslot
+
+\setslot{foursuperior}
+ \comment{Superior numeral four, `\flushtop{\the\scriptfont0 4}'.}
+\endsetslot
+
+\setslot{fivesuperior}
+ \comment{Superior numeral five, `\flushtop{\the\scriptfont0 5}'.}
+\endsetslot
+
+\setslot{sixsuperior}
+ \comment{Superior numeral six, `\flushtop{\the\scriptfont0 6}'.}
+\endsetslot
+
+\setslot{sevensuperior}
+ \comment{Superior numeral seven, `\flushtop{\the\scriptfont0 7}'.}
+\endsetslot
+
+\setslot{eightsuperior}
+ \comment{Superior numeral eight, `\flushtop{\the\scriptfont0 8}'.}
+\endsetslot
+
+\setslot{ninesuperior}
+ \comment{Superior numeral nine, `\flushtop{\the\scriptfont0 9}'.}
+\endsetslot
+
+\nextslot{`:}
+\setslot{divide}
+ \comment{A division sign `$\mathchar"204 $'.}
+\endsetslot
+
+\nextslot{`\<}
+\setslot{less}
+ \comment{A less-than sign, `$<$'.}
+\endsetslot
+
+
+\nextslot{`\>}
+\setslot{greater}
+ \comment{A greater-than sign, `$>$'.}
+\endsetslot
+
+\nextslot{`\\}
+\setslot{backslash}
+ \comment{A reversed solidus, `$\backslash$'.}
+\endsetslot
+
+\nextslot{`\^}
+\setslot{asciicircum}
+ \comment{An ASCII circumflex character,
+ `\asciicircum', something
+ between `{\tt\^{}}' and `$\wedge$'. Used as a dereferencing
+ operator in Pascal ($x\asciicircum.f$) and as a binary operator
+ in other computer languages ($x \mathbin{\asciicircum} y$).}
+\endsetslot
+
+\nextslot{`\_}
+\setslot{underscore}
+ \comment{An ASCII underscore `{\tt\char95 }', as might be used in
+ identifiers in computer programs.}
+\endsetslot
+
+\nextslot{`\`}
+\setslot{backquote}
+ \comment{Originally a grave accent, now generally treated as a
+ reverse ASCII quote, `{\tt\`{}}' (mirror image of glyph~39).
+ This symbol is used in LISP and some other computer languages as
+ a symbol in its own right, and in many formatters to stand in
+ for an opening quotation mark `\thinspace`\thinspace'.}
+\endsetslot
+
+\setslot{thorn1}
+ \comment{The style of lower case thorn used for setting Old
+ English texts.}
+\endsetslot
+
+\setslot{eth1}
+ \comment{The style of lower case eth used for setting Old
+ English texts.}
+\endsetslot
+
+\setslot{wyn}
+ \comment{The obselete letter wyn, used for setting Old English
+ texts. It looks a bit like a {\bf thorn1} without the
+ ascender. A sort of precursor to {\it w}.}
+\endsetslot
+
+\setslot{yogh}
+ \comment{The obselete letter yogh, used for setting Old English
+ texts. It looks a little like a `3' or the curly sort of {\it
+ z}. A sorty of precursor ot {\it gh}.}
+\endsetslot
+
+\setslot{yogh1}
+ \comment{The obselete letter ???, used for setting Old English
+ texts. A sort of precursor of {\it g}.}
+\endsetslot
+
+\setslot{ch}
+ \comment{Ligature {\it ch} (common in German founts, especially
+ {\it Fraktur} faces.)}
+\endsetslot
+
+\setslot{ck}
+ \comment{Ligature {\it ck} (common in German founts), especially
+ {\it Fraktur} faces.)}
+\endsetslot
+
+\setslot{ct}
+ \comment{The ligature {\it ct}. In archaic fonts this has a
+ link between the top of the {\it c} and the {\it t}.}
+\endsetslot
+
+\setslot{ft}
+ \comment{A ligature {\it ft}. Seen in German fonts.}
+\endsetslot
+
+\setslot{ij}
+ \comment{The Dutch special letter {\it ij}. This looks like a
+ digraph, but it is a separate character on Dutch keyboards,
+ making it something of a special case, like {\it \ae} and {\it
+ \oe}.}
+\endsetslot
+
+\setslot{ll}
+ \comment{Ligature {\it ll}. Common in German fonts, especially
+ {\it Fraktur} fonts.}
+\endsetslot
+
+\setslot{longs}
+ \comment{A long {\it s}, which looks like $\smallint$ or like an
+ {\it f} with the bar omitted.}
+\endsetslot
+
+\setslot{longsi}
+ \comment{A ligature of long {\it s} with {\it i}
+ ($\smallint\!\!\imath$), traditional in {\it Fraktur} fonts.}
+\endsetslot
+
+\setslot{longslongs}
+ \comment{A double long {\it s}
+ ($\smallint\!\!\smallint$), traditional in {\it Fraktur} fonts.}
+\endsetslot
+
+\setslot{longss}
+ \comment{A ligature of long {\it s} with final {\it s}
+ ($\smallint\!\!s$, or {\it \ss}). This is how German sharp-s
+ (\ss) tends to look in roman fonts.}
+\endsetslot
+
+\setslot{longst}
+ \comment{A ligature of long {\it s} with {\it t}
+ ($\smallint\!\!t$), by analogy to {\it ft}.}
+\endsetslot
+
+\setslot{st}
+ \comment{A ligature of (short) {\it s} with {\it t}, possibly
+ with a link between the top of the {\it s} and the {\it t} (like
+ {\bf ct}.}
+\endsetslot
+
+\setslot{longsz}
+ \comment{A ligature of long {\it s} with {\it z}
+ ($\smallint\!\!z$). In {\it Fraktur} this is how the sharp-s
+ (\ss) looks.}
+\endsetslot
+
+\setslot{tz}
+ \comment{Ligature {\it tz}, traditional in {\it Fraktur} fonts.}
+\endsetslot
+
+\setslot{schwa}
+ \comment{The sign for schwa (indeterminate vowel sound), an
+ inverted {\it e}. The most commonly used pronounciation
+ symbol.}
+\endsetslot
+
+\setslot{l1}
+ \comment{Variant letter {\it l}. Malvern-specific.}
+\endsetslot
+
+\setslot{lacute1}
+ \comment{Variant letter {\it \'l}. Malvern-specific.}
+\endsetslot
+
+\setslot{lcaron1}
+ \comment{Variant letter {\it l\kern-0.1em'} (\thinspace= {\it \v l}). Malvern-specific.}
+\endsetslot
+
+\setslot{lslash1}
+ \comment{Variant letter {\it \l}. Malvern-specific.}
+\endsetslot
+
+\setslot{ll1}
+ \comment{Variant ligature {\it ll}. Malvern-specific.}
+\endsetslot
+
+\nextslot{`\|}
+\setslot{bar}
+ \comment{Vertical bar character, `$|$'.}
+\endsetslot
+
+\nextslot{`\~}
+\setslot{asciitilde}
+ \comment{A swung dash, `$\sim$'.}
+\endsetslot
+
+\nextslot{128}
+\setslot{arrowdblleft}
+ \comment{A doubled arrow pointing left, `$\Leftarrow$'.}
+\endsetslot
+
+\setslot{arrowdblright}
+ \comment{A doubled arrow pointing right, `$\Rightarrow$'.}
+\endsetslot
+
+\setslot{arrowdblup}
+ \comment{A doubled arrow pointing up, `$\Uparrow$'.}
+\endsetslot
+
+\setslot{arrowdbldown}
+ \comment{A doubled arrow pointing down, `$\Downarrow$'.}
+\endsetslot
+
+\setslot{arrowdblboth}
+ \comment{A doubled arrow pointing left and right, `$\Leftrightarrow$'.}
+\endsetslot
+
+\setslot{arrowdblupdown}
+ \comment{A doubled arrow pointing up and down, `$\Updownarrow$'.}
+\endsetslot
+
+\setslot{arrowdblhorizex}
+ \comment{A pair of rules that can be used to extend horizontal
+ arrows (to make `$\Longrightarrow$' etc.).}
+\endsetslot
+
+\setslot{arrowdblvertex}
+ \comment{A rule that can be used to extend vertical arrows.}
+\endsetslot
+
+\nextslot{"A0}
+\setslot{visiblespace}
+ \comment{A symbol representing an ASCII blank. In CM Typewriter it
+ is `{\tt\char32 }'.}
+\endsetslot
+
+\setslot{onequarter}
+ \comment{The fraction `\frac1/4'.}
+\endsetslot
+
+\setslot{onehalf}
+ \comment{The fraction `\frac1/2'.}
+\endsetslot
+
+\setslot{threequarters}
+ \comment{The fraction `\frac3/4'.}
+\endsetslot
+
+\setslot{logicalnot}
+ \comment{Sign for logical negation `$\lnot$'.}
+\endsetslot
+
+\setslot{mu}
+ \comment{A lower case Greek letter mu `$\mu$'.}
+\endsetslot
+
+\nextslot{"B0}
+\setslot{zeroinferior}
+ \comment{Inferior numeral zero, `\lower0.5ex \hbox{\the\scriptfont0 0}'.}
+\endsetslot
+
+\setslot{oneinferior}
+ \comment{Inferior numeral one, `\lower0.5ex \hbox{\the\scriptfont0 1}'.}
+\endsetslot
+
+\setslot{twoinferior}
+ \comment{Inferior numeral two, `\lower0.5ex \hbox{\the\scriptfont0 2}'.}
+\endsetslot
+
+\setslot{threeinferior}
+ \comment{Inferior numeral three, `\lower0.5ex \hbox{\the\scriptfont0 3}'.}
+\endsetslot
+
+\setslot{fourinferior}
+ \comment{Inferior numeral four, `\lower0.5ex \hbox{\the\scriptfont0 4}'.}
+\endsetslot
+
+\setslot{fiveinferior}
+ \comment{Inferior numeral five, `\lower0.5ex \hbox{\the\scriptfont0 5}'.}
+\endsetslot
+
+\setslot{sixinferior}
+ \comment{Inferior numeral six, `\lower0.5ex \hbox{\the\scriptfont0 6}'.}
+\endsetslot
+
+\setslot{seveninferior}
+ \comment{Inferior numeral seven, `\lower0.5ex \hbox{\the\scriptfont0 7}'.}
+\endsetslot
+
+\setslot{eightinferior}
+ \comment{Inferior numeral eight, `\lower0.5ex \hbox{\the\scriptfont0 8}'.}
+\endsetslot
+
+\setslot{nineinferior}
+ \comment{Inferior numeral nine, `\lower0.5ex \hbox{\the\scriptfont0 9}'.}
+\endsetslot
+
+\endencoding
+
+\Aheading{End of encoding.}
+
+\bye
+
+%Local Variables:
+%tex-has-children: t
+%fill-prefix: " "
+%End:
diff --git a/fonts/malvern/fontinst/pdcmat1.mtx b/fonts/malvern/fontinst/pdcmat1.mtx
new file mode 100644
index 0000000000..8d69e7592d
--- /dev/null
+++ b/fonts/malvern/fontinst/pdcmat1.mtx
@@ -0,0 +1,186 @@
+% pdcmat1.mtx 1.1.1 1994/07/20 -- glyph hacks for Malvern -*-TeX-*-
+%%% ====================================================================
+%%% @TeX-macro-file{
+%%% author = "P. Damian Cugley",
+%%% version = "1.1.1",
+%%% date = "1994/07/20",
+%%% filename = "pdcmat1.mtx",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "AFM, virtual fonts, fonts, Malvern, TeX",
+%%% supported = "no",
+%%% abstract = "How to make some glyphs needed to generate
+%%% Cork (T1) encoded fonts from Malvern
+%%% fonts.",
+%%% package = "",
+%%% dependencies = "(as a document) pdcetxf.tex, fontdoc.sty;
+%%% (as a subr) none",
+%%% }
+%%% ====================================================================
+
+\relax
+
+\catcode`@=11 \input fontdoc.sty \catcode`@=12
+\input pdcetxf
+
+% Following 4 lines get the version ID from SCCS:
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\pdcversion{1.1}
+ \def\lastedit{1994/07/20}
+}\the\toks0
+
+\raggedright
+
+\title{Glyph hacks for making Cork (T1) from Malvern A \& B}
+
+\section{Introduction}
+ This document describes some definitions useful for making fonts
+ with the Cork (T1) encoding from fonts with Malvern~A and~B
+ encodings (such as the Malvern fonts). This file is called
+ `{\tt pdcmat1.mtx}': `{\tt pdc}' as a prefix to avoid
+ confusion with files contributed by other people; `{\tt ma}' for
+ Malvern;\footnote*{To prevent a prolifiation of different
+ abbreviations, Malvern is always shortened to `Ma', (except in
+ Karl Berry's font-naming scheme, where its code is `Mv'). It
+ should not be abbreviated `Malv' or any other variations on the
+ name.} and `{\tt t1}' because the NFSS~2 code for the Cork
+ encoding is T1.
+
+ This file is expected to be read {\it before}\/ `{\tt
+ latin.mtx}' in an \cs{installfonts} list.
+
+ This is version \pdcversion, last edited \lastedit.
+
+\metrics
+
+% Topaccent and botaccent stolen from Alan's latin.mtx:
+
+% A top accent is set by placing the center of the accent at the given
+% position along the width of the letter, raised up by the difference
+% between the height of the letter and the xheight.
+
+\setcommand\topaccent#1#2#3{
+ \push
+ \moveup{\max{0}{\sub{\height{#1}}{\int{xheight}}}}
+ \movert{\add{\sub{\scale{\width{#1}}{#3}}{\scale{\width{#2}}{500}}}
+ {\scale{\sub{\height{#1}}{\int{xheight}}}{\int{italicslant}}}}
+ \glyph{#2}{1000}
+ \pop
+ \glyph{#1}{1000}
+}
+
+% A bottom accent is set by placing the center of the accent at the given
+% position along the width of the letter.
+
+\setcommand\botaccent#1#2#3{
+ \push
+ \movert{\sub{\scale{\width{#1}}{#3}}{\scale{\width{#2}}{500}}}
+ \glyph{#2}{1000}
+ \pop
+ \glyph{#1}{1000}
+}
+
+
+% A special verion of topaccent for my twodots mark
+% It is designed to be raised to go halfway between
+% top of letter and cap-height...
+\setcommand\twodots#1#2#3{
+ \push
+ \moveup{\max{0}{\scale{\sub{\height{#1}}{\int{xheight}}}{500}}}
+ \movert{\add{\sub{\scale{\width{#1}}{#3}}{\scale{\width{#2}}{500}}}
+ {\scale{\sub{\height{#1}}{\int{xheight}}}{\int{italicslant}}}}
+ \glyph{#2}{1000}
+ \pop
+ \glyph{#1}{1000}
+}
+
+\comment{\section{L-caron}}
+
+\setglyph{Lcaron}
+ \glyph{L}{1000}
+ \ifisint{monowidth}\then\else
+ \movert{-200}
+ \fi
+ \glyph{quoteright}{1000}
+\endsetglyph
+
+
+\comment{\section{Botaccents (cedillas, ogoneks)}
+ These use use full-sized base letters and -cap marks.
+ Acutually, A-ogonek and E-ogonek are already defined in Malvern~A.}
+
+\setglyph{Aogonek} \botaccent{A}{ogonekcap}{900} \endsetglyph
+\setglyph{Eogonek} \botaccent{E}{ogonekcap}{850} \endsetglyph
+\setglyph{Ccedilla} \botaccent{C}{cedillacap}{500} \endsetglyph
+\setglyph{Scedilla} \botaccent{S}{cedilla}{500} \endsetglyph
+\setglyph{Tcedilla} \botaccent{T}{cedilla}{500} \endsetglyph
+
+\comment{\section{Dot and two-dot marks}
+ These are the only marks with no `-cap' variant. Instead the
+ two dots are placed so as to be about halfway between the top of
+ the glyph and the cap height.
+ (Obviously this depends on the base glyph being shorter than
+ full cap height.)}
+
+\setglyph{Adieresis} \twodots{Amedium}{dieresis}{500} \endsetglyph
+\setglyph{Edieresis} \twodots{Emedium}{dieresis}{500} \endsetglyph
+\setglyph{Idotaccent} \twodots{Imedium}{dotaccent}{500} \endsetglyph
+\setglyph{Idieresis} \twodots{Imedium}{dieresis}{500} \endsetglyph
+\setglyph{Odieresis} \twodots{Omedium}{dieresis}{500} \endsetglyph
+\setglyph{Udieresis} \twodots{Umedium}{dieresis}{500} \endsetglyph
+\setglyph{Ydieresis} \twodots{Ymedium}{dieresis}{500} \endsetglyph
+\setglyph{Zdotaccent} \twodots{Zmedium}{dotaccent}{500} \endsetglyph
+
+\comment{\section{Topaccents}
+ This is the bulk of composite letters: medium capitals with a
+ `-cap' mark raised above them.}
+
+\setglyph{Aacute} \topaccent{Amedium}{acutecap} {500} \endsetglyph
+\setglyph{Abreve} \topaccent{Amedium}{brevecap} {500} \endsetglyph
+\setglyph{Acircumflex} \topaccent{Amedium}{circumflexcap} {500} \endsetglyph
+\setglyph{Agrave} \topaccent{Amedium}{gravecap} {500} \endsetglyph
+\setglyph{Aring} \topaccent{Amedium}{ringcap} {500} \endsetglyph
+\setglyph{Atilde} \topaccent{Amedium}{tildecap} {500} \endsetglyph
+\setglyph{Cacute} \topaccent{Cmedium}{acutecap} {600} \endsetglyph
+\setglyph{Ccaron} \topaccent{Cmedium}{caroncap} {600} \endsetglyph
+\setglyph{Dcaron} \topaccent{Dmedium}{caroncap} {450} \endsetglyph
+\setglyph{Eacute} \topaccent{Emedium}{acutecap} {500} \endsetglyph
+\setglyph{Ecaron} \topaccent{Emedium}{caroncap} {500} \endsetglyph
+\setglyph{Ecircumflex} \topaccent{Emedium}{circumflexcap} {500} \endsetglyph
+\setglyph{Egrave} \topaccent{Emedium}{gravecap} {500} \endsetglyph
+\setglyph{Gbreve} \topaccent{Gmedium}{brevecap} {600} \endsetglyph
+\setglyph{Iacute} \topaccent{Imedium}{acutecap} {500} \endsetglyph
+\setglyph{Icircumflex} \topaccent{Imedium}{circumflexcap} {500} \endsetglyph
+\setglyph{Igrave} \topaccent{Imedium}{gravecap} {500} \endsetglyph
+\setglyph{Lacute} \topaccent{Lmedium}{acutecap} {250} \endsetglyph
+\setglyph{Nacute} \topaccent{Nmedium}{acutecap} {500} \endsetglyph
+\setglyph{Ncaron} \topaccent{Nmedium}{caroncap} {500} \endsetglyph
+\setglyph{Ntilde} \topaccent{Nmedium}{tildecap} {500} \endsetglyph
+\setglyph{Oacute} \topaccent{Omedium}{acutecap} {500} \endsetglyph
+\setglyph{Ocircumflex} \topaccent{Omedium}{circumflexcap} {500} \endsetglyph
+\setglyph{Ograve} \topaccent{Omedium}{gravecap} {500} \endsetglyph
+\setglyph{Ohungarumlaut} \topaccent{Omedium}{hungarumlautcap}{500} \endsetglyph
+\setglyph{Otilde} \topaccent{Omedium}{tildecap} {500} \endsetglyph
+\setglyph{Racute} \topaccent{Rmedium}{acutecap} {500} \endsetglyph
+\setglyph{Rcaron} \topaccent{Rmedium}{caroncap} {500} \endsetglyph
+\setglyph{Sacute} \topaccent{Smedium}{acutecap} {500} \endsetglyph
+\setglyph{Scaron} \topaccent{Smedium}{caroncap} {500} \endsetglyph
+\setglyph{Tcaron} \topaccent{Tmedium}{caroncap} {500} \endsetglyph
+\setglyph{Uacute} \topaccent{Umedium}{acutecap} {500} \endsetglyph
+\setglyph{Ucircumflex} \topaccent{Umedium}{circumflexcap} {500} \endsetglyph
+\setglyph{Ugrave} \topaccent{Umedium}{gravecap} {500} \endsetglyph
+\setglyph{Uhungarumlaut} \topaccent{Umedium}{hungarumlautcap}{500} \endsetglyph
+\setglyph{Uring} \topaccent{Umedium}{ringcap} {500} \endsetglyph
+\setglyph{Yacute} \topaccent{Ymedium}{acutecap} {500} \endsetglyph
+\setglyph{Zacute} \topaccent{Zmedium}{acutecap} {500} \endsetglyph
+\setglyph{Zcaron} \topaccent{Zmedium}{caroncap} {500} \endsetglyph
+
+\endmetrics
+
+\bye
+
+% Local Variables:
+% fill-prefix: "\t"
+% End:
diff --git a/fonts/malvern/latex209/fmv9nfss.sty b/fonts/malvern/latex209/fmv9nfss.sty
new file mode 100644
index 0000000000..9ec0c943f8
--- /dev/null
+++ b/fonts/malvern/latex209/fmv9nfss.sty
@@ -0,0 +1,106 @@
+% fmv9nfss.sty -- Malvern style option for LaTeX 2.09 + NFSS
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+
+%%% @LaTeX-style-option {
+%%% author = "P. Damian Cugley",
+%%% version = "75",
+%%% date = "1994.10.12",
+%%% filename = "fmv9nfss.sty",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road
+%%% Oxford OX1 3QD
+%%% UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "NFSS, LaTeX, Malvern, font family",
+%%% supported = "no",
+%%% abstract = "This is a style option for LaTeX 2.09 with NFSS.
+%%% Replaces the roman, bold, italic and bold italic fonts
+%%% with Malvern 55, 75, 56 and 75 with old style figures.
+%%% Computer Modern is used as \sf.",
+%%% package = "Malvern 1.2",
+%%% dependencies = "NFSS",
+%%% caveat = "I can't test this: I don't have NFSS",
+%%% }
+
+\@ifundefined{selectfont}{
+ \@latexerr{The "fmv9nfss" style option can only be used
+ with LaTeX 2.09 and the New Font Selection Scheme}\@eha
+ \endinput
+}{}
+
+\def\fileversion{75}
+\def\filedate{mkdrivers 1994.10.12}
+\message{\fileversion\space <\filedate>}
+
+\expandafter\def\csname load@fmv9\endcsname{%
+ \extra@def{fmv9}{}{}
+ \new@fontshape{fmv9}{m}{n}{%
+ <5>ma55az7 at 5pt
+ <6>ma55az7 at 6pt
+ <7>ma55az7
+ <8>ma55az7 at 8pt
+ <9>ma55az7 at 9pt
+ <10>ma55az10
+ <11>ma55az10 at 11pt
+ <12>ma55az12
+ <14>ma55az14
+ <17>ma55az14 at 17pt
+ <20>ma55az18 at 20pt
+ <25>ma55az24 at 25pt
+ }{}
+ \new@fontshape{fmv9}{m}{it}{%
+ <5>ma56az7 at 5pt
+ <6>ma56az7 at 6pt
+ <7>ma56az7
+ <8>ma56az7 at 8pt
+ <9>ma56az7 at 9pt
+ <10>ma56az10
+ <11>ma56az10 at 11pt
+ <12>ma56az12
+ <14>ma56az14
+ <17>ma56az14 at 17pt
+ <20>ma56az18 at 20pt
+ <25>ma56az24 at 25pt
+ }{}
+ \new@fontshape{fmv9}{b}{n}{%
+ <5>ma75az7 at 5pt
+ <6>ma75az7 at 6pt
+ <7>ma75az7
+ <8>ma75az7 at 8pt
+ <9>ma75az7 at 9pt
+ <10>ma75az10
+ <11>ma75az10 at 11pt
+ <12>ma75az12
+ <14>ma75az14
+ <17>ma75az14 at 17pt
+ <20>ma75az18 at 20pt
+ <25>ma75az24 at 25pt
+ }{}
+ \new@fontshape{fmv9}{b}{it}{%
+ <5>ma76az7 at 5pt
+ <6>ma76az7 at 6pt
+ <7>ma76az7
+ <8>ma76az7 at 8pt
+ <9>ma76az7 at 9pt
+ <10>ma76az10
+ <11>ma76az10 at 11pt
+ <12>ma76az12
+ <14>ma76az14
+ <17>ma76az14 at 17pt
+ <20>ma76az18 at 20pt
+ <25>ma76az24 at 25pt
+ }{}
+
+ \subst@fontshape{fmv9}{b}{sc}{fmv9}{b}{n}
+ \subst@fontshape{fmv9}{m}{sc}{fmv9}{m}{n}
+ \subst@fontshape{fmv9}{m}{sl}{fmv9}{m}{it}
+ \subst@fontshape{fmv9}{bx}{n}{fmv9}{b}{n}
+ \subst@fontshape{fmv9}{bx}{it}{fmv9}{b}{it}
+}
+\romanfont{fmv9}
+\sansfont{cmr}
+
+\endinput
diff --git a/fonts/malvern/latex209/fmv9pltx.sty b/fonts/malvern/latex209/fmv9pltx.sty
new file mode 100644
index 0000000000..293dff34f0
--- /dev/null
+++ b/fonts/malvern/latex209/fmv9pltx.sty
@@ -0,0 +1,354 @@
+% fmv9pltx.sty -- Malvern style option for plain LaTeX 2.09
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+
+%%% @LaTeX-style-option {
+%%% author = "P. Damian Cugley",
+%%% version = "75",
+%%% date = "1994.10.12",
+%%% filename = "fmv9pltx.sty",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road
+%%% Oxford OX1 3QD
+%%% UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "NFSS, LaTeX, Malvern, font family",
+%%% supported = "no",
+%%% abstract = "This is a style option for LaTeX 2.09 without NFSS.
+%%% Replaces the roman, bold, italic and bold italic fonts
+%%% with Malvern 55, 75, 56 and 75.",
+%%% package = "Malvern 1.2",
+%%% dependencies = "",
+%%% }
+
+\@ifundefined{selectfont}{}{
+ \@latexerr{The "fmv9pltx" style option can only be used
+ with LaTeX 2.09 without the New Font Selection Scheme}\@eha
+ \endinput
+}
+
+\def\fileversion{75}
+\def\filedate{mkdrivers 1994.10.12}
+\message{\fileversion\space <\filedate>}
+
+
+% The following assignments override those in lfonts.tex:
+
+\font\fivrm = ma55az7 at 5pt
+\font\sixrm = ma55az7 at 6pt
+\font\sevrm = ma55az7
+\font\sevit = ma56az7
+\font\egtrm = ma55az7 at 8pt
+\font\egtit = ma56az7 at 8pt
+\font\ninrm = ma55az7 at 9pt
+\font\ninit = ma56az7 at 9pt
+\font\ninbf = ma75az7 at 9pt
+\font\tenrm = ma55az10
+\font\tenit = ma56az10
+\font\tenbf = ma75az10
+\font\elvrm = ma55az10 at 11pt
+\font\elvit = ma56az10 at 11pt
+\font\elvbf = ma75az10 at 11pt
+\font\twlrm = ma55az12
+\font\twlit = ma56az12
+\font\twlbf = ma75az12
+\font\frtnrm = ma55az14
+\font\frtnbf = ma75az14
+\font\svtnrm = ma55az14 at 17pt
+\font\svtnbf = ma75az14 at 17pt
+\font\twtyrm = ma55az18 at 20pt
+\font\twfvrm = ma55az24 at 25pt
+
+% There are no separate sanserif, caps-and-small-capitals or slanted styles:
+\let\sl=\it
+\let\sf=\rm
+\let\sc=\rm
+
+% Redefine the size-changing macros:
+\def\vpt
+{%
+ \textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\fivrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\@getfont\pit\itfam\@vpt{ma56az7 at 5pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@vpt{ma75az7 at 5pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+ \@setstrut\rm
+}
+
+\def\vipt
+{%
+ \textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\sixrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\@getfont\pbf\itfam\@vipt{ma56az7 at 6pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@vipt{ma75az7 at 6pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+ \@setstrut\rm
+}
+
+\def\viipt
+{%
+ \textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\sevrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\@getfont\pbf\bffam\@viipt{ma75az7}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\viiipt
+{%
+ \textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\egtrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\@getfont\pbf\bffam\@viiipt{ma75az7 at 8pt}}%
+ \def\ptt{\@getfont\ptt\ttfam\@viiipt{cmtt8}\@nohyphens\ptt\@viiipt}%
+ \def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\ixpt
+{%
+ \textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\ninrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\xpt
+{%
+ \textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+ \def\prm{\fam\z@\tenrm}%
+ \def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\tenbf
+ \def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+ \def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\xipt
+{%
+ \textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+ \def\prm{\fam\z@\elvrm}%
+ \def\pit{\fam\itfam\elvit}\textfont\itfam\elvit
+ \scriptfont\itfam\egtit \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\elvbf}\textfont\bffam\elvbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\elvtt}\textfont\ttfam\elvtt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm
+}
+
+\def\xiipt
+{%
+ \textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+ \def\prm{\fam\z@\twlrm}%
+ \def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm
+}
+
+\def\xivpt
+{%
+ \textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+ \textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+ \textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+ \def\prm{\fam\z@\frtnrm}%
+ \def\pit{\@getfont\pit\itfam\@xivpt{ma56az14}}%
+ \def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\@getfont\ptt\ttfam\@xivpt{cmtt10\@magscale2}\@nohyphens\ptt\@xivpt}%
+ \def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+ \@setstrut \rm
+}
+
+\def\xviipt
+{%
+ \textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+ \textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+ \textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\svtnrm}%
+ \def\pit{\@getfont\pit\itfam\@xviipt{ma56az14 at 17pt}}%
+ \def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+ \def\ptt{\@getfont\ptt\ttfam\@xviipt{cmtt10\@magscale3}\@nohyphens
+ \ptt\@xviipt}%
+ \def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+ \@setstrut \rm
+}
+
+\def\xxpt
+{%
+ \textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+ \textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+ \textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\twtyrm}%
+ \def\pit{\@getfont\pit\itfam\@xxpt{ma56az18 at 20pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@xxpt{ma75az18 at 20pt}}%
+ \def\ptt{\@getfont\ptt\ttfam\@xxpt{cmtt10\@magscale4}\@nohyphens\ptt\@xxpt}%
+ \def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+ \@setstrut \rm
+}
+
+\def\xxvpt
+{%
+ \textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+ \textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+ \textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\twfvrm}%
+ \def\pit{\@getfont\pit\bffam\@xxvpt{ma56az24 at 25pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@xxvpt{ma75az24 at 25pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+ \@setstrut \rm
+}
+
+% No fancy definition of \$ needed:
+\chardef\$=`\$
+\def\pounds{\protect\ppounds}
+\def\ppounds{\hrule \@height 0.5ex \@width 0.5ex \relax}
+ % NO pounds sign!
+
+\endinput
+
+
diff --git a/fonts/malvern/latex209/fmvnfss.sty b/fonts/malvern/latex209/fmvnfss.sty
new file mode 100644
index 0000000000..6eaa4837f1
--- /dev/null
+++ b/fonts/malvern/latex209/fmvnfss.sty
@@ -0,0 +1,106 @@
+% fmvnfss.sty -- Malvern style option for LaTeX 2.09 + NFSS
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+
+%%% @LaTeX-style-option {
+%%% author = "P. Damian Cugley",
+%%% version = "75",
+%%% date = "1994.10.12",
+%%% filename = "fmvnfss.sty",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road
+%%% Oxford OX1 3QD
+%%% UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "NFSS, LaTeX, Malvern, font family",
+%%% supported = "no",
+%%% abstract = "This is a style option for LaTeX 2.09 with NFSS.
+%%% Replaces the roman, bold, italic and bold italic fonts
+%%% with Malvern 55, 75, 56 and 75.
+%%% Computer Modern is used as \sf.",
+%%% package = "Malvern 1.2",
+%%% dependencies = "NFSS",
+%%% caveat = "I can't test this: I don't have NFSS",
+%%% }
+
+\@ifundefined{selectfont}{
+ \@latexerr{The "fmvnfss" style option can only be used
+ with LaTeX 2.09 and the New Font Selection Scheme}\@eha
+ \endinput
+}{}
+
+\def\fileversion{75}
+\def\filedate{mkdrivers 1994.10.12}
+\message{\fileversion\space <\filedate>}
+
+\expandafter\def\csname load@fmv\endcsname{%
+ \extra@def{fmv}{}{}
+ \new@fontshape{fmv}{m}{n}{%
+ <5>ma55s7 at 5pt
+ <6>ma55s7 at 6pt
+ <7>ma55s7
+ <8>ma55s7 at 8pt
+ <9>ma55s7 at 9pt
+ <10>ma55s10
+ <11>ma55s10 at 11pt
+ <12>ma55s12
+ <14>ma55s14
+ <17>ma55s14 at 17pt
+ <20>ma55s18 at 20pt
+ <25>ma55s24 at 25pt
+ }{}
+ \new@fontshape{fmv}{m}{it}{%
+ <5>ma56s7 at 5pt
+ <6>ma56s7 at 6pt
+ <7>ma56s7
+ <8>ma56s7 at 8pt
+ <9>ma56s7 at 9pt
+ <10>ma56s10
+ <11>ma56s10 at 11pt
+ <12>ma56s12
+ <14>ma56s14
+ <17>ma56s14 at 17pt
+ <20>ma56s18 at 20pt
+ <25>ma56s24 at 25pt
+ }{}
+ \new@fontshape{fmv}{b}{n}{%
+ <5>ma75s7 at 5pt
+ <6>ma75s7 at 6pt
+ <7>ma75s7
+ <8>ma75s7 at 8pt
+ <9>ma75s7 at 9pt
+ <10>ma75s10
+ <11>ma75s10 at 11pt
+ <12>ma75s12
+ <14>ma75s14
+ <17>ma75s14 at 17pt
+ <20>ma75s18 at 20pt
+ <25>ma75s24 at 25pt
+ }{}
+ \new@fontshape{fmv}{b}{it}{%
+ <5>ma76s7 at 5pt
+ <6>ma76s7 at 6pt
+ <7>ma76s7
+ <8>ma76s7 at 8pt
+ <9>ma76s7 at 9pt
+ <10>ma76s10
+ <11>ma76s10 at 11pt
+ <12>ma76s12
+ <14>ma76s14
+ <17>ma76s14 at 17pt
+ <20>ma76s18 at 20pt
+ <25>ma76s24 at 25pt
+ }{}
+
+ \subst@fontshape{fmv}{b}{sc}{fmv}{b}{n}
+ \subst@fontshape{fmv}{m}{sc}{fmv}{m}{n}
+ \subst@fontshape{fmv}{m}{sl}{fmv}{m}{it}
+ \subst@fontshape{fmv}{bx}{n}{fmv}{b}{n}
+ \subst@fontshape{fmv}{bx}{it}{fmv}{b}{it}
+}
+\romanfont{fmv}
+\sansfont{cmr}
+
+\endinput
diff --git a/fonts/malvern/latex209/fmvpltx.sty b/fonts/malvern/latex209/fmvpltx.sty
new file mode 100644
index 0000000000..2c250185b8
--- /dev/null
+++ b/fonts/malvern/latex209/fmvpltx.sty
@@ -0,0 +1,354 @@
+% fmvpltx.sty -- Malvern style option for plain LaTeX 2.09
+% creator: mkdrivers 3.7 <pdc 1994.10.12>
+% creation date: 1994.10.12
+
+%%% @LaTeX-style-option {
+%%% author = "P. Damian Cugley",
+%%% version = "75",
+%%% date = "1994.10.12",
+%%% filename = "fmvpltx.sty",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road
+%%% Oxford OX1 3QD
+%%% UK",
+%%% telephone = "+44 865 273838 x 73199",
+%%% email = "Damian.Cugley@comlab.ox.ac.uk",
+%%% codetable = "USASCII",
+%%% keywords = "NFSS, LaTeX, Malvern, font family",
+%%% supported = "no",
+%%% abstract = "This is a style option for LaTeX 2.09 without NFSS.
+%%% Replaces the roman, bold, italic and bold italic fonts
+%%% with Malvern 55, 75, 56 and 75.",
+%%% package = "Malvern 1.2",
+%%% dependencies = "",
+%%% }
+
+\@ifundefined{selectfont}{}{
+ \@latexerr{The "fmvpltx" style option can only be used
+ with LaTeX 2.09 without the New Font Selection Scheme}\@eha
+ \endinput
+}
+
+\def\fileversion{75}
+\def\filedate{mkdrivers 1994.10.12}
+\message{\fileversion\space <\filedate>}
+
+
+% The following assignments override those in lfonts.tex:
+
+\font\fivrm = ma55s7 at 5pt
+\font\sixrm = ma55s7 at 6pt
+\font\sevrm = ma55s7
+\font\sevit = ma56s7
+\font\egtrm = ma55s7 at 8pt
+\font\egtit = ma56s7 at 8pt
+\font\ninrm = ma55s7 at 9pt
+\font\ninit = ma56s7 at 9pt
+\font\ninbf = ma75s7 at 9pt
+\font\tenrm = ma55s10
+\font\tenit = ma56s10
+\font\tenbf = ma75s10
+\font\elvrm = ma55s10 at 11pt
+\font\elvit = ma56s10 at 11pt
+\font\elvbf = ma75s10 at 11pt
+\font\twlrm = ma55s12
+\font\twlit = ma56s12
+\font\twlbf = ma75s12
+\font\frtnrm = ma55s14
+\font\frtnbf = ma75s14
+\font\svtnrm = ma55s14 at 17pt
+\font\svtnbf = ma75s14 at 17pt
+\font\twtyrm = ma55s18 at 20pt
+\font\twfvrm = ma55s24 at 25pt
+
+% There are no separate sanserif, caps-and-small-capitals or slanted styles:
+\let\sl=\it
+\let\sf=\rm
+\let\sc=\rm
+
+% Redefine the size-changing macros:
+\def\vpt
+{%
+ \textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\fivrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\@getfont\pit\itfam\@vpt{ma56s7 at 5pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@vpt{ma75s7 at 5pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+ \@setstrut\rm
+}
+
+\def\vipt
+{%
+ \textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\sixrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\@getfont\pbf\itfam\@vipt{ma56s7 at 6pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@vipt{ma75s7 at 6pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+ \@setstrut\rm
+}
+
+\def\viipt
+{%
+ \textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\sevrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\@getfont\pbf\bffam\@viipt{ma75s7}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\viiipt
+{%
+ \textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\egtrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\@getfont\pbf\bffam\@viiipt{ma75s7 at 8pt}}%
+ \def\ptt{\@getfont\ptt\ttfam\@viiipt{cmtt8}\@nohyphens\ptt\@viiipt}%
+ \def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\ixpt
+{%
+ \textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\prm{\fam\z@\ninrm}%
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\xpt
+{%
+ \textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+ \def\prm{\fam\z@\tenrm}%
+ \def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\tenbf
+ \def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+ \def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm
+}
+
+\def\xipt
+{%
+ \textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+ \def\prm{\fam\z@\elvrm}%
+ \def\pit{\fam\itfam\elvit}\textfont\itfam\elvit
+ \scriptfont\itfam\egtit \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\elvbf}\textfont\bffam\elvbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\elvtt}\textfont\ttfam\elvtt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm
+}
+
+\def\xiipt
+{%
+ \textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+ \def\prm{\fam\z@\twlrm}%
+ \def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+ \def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm
+}
+
+\def\xivpt
+{%
+ \textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+ \textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+ \textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+ \def\prm{\fam\z@\frtnrm}%
+ \def\pit{\@getfont\pit\itfam\@xivpt{ma56s14}}%
+ \def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+ \def\ptt{\@getfont\ptt\ttfam\@xivpt{cmtt10\@magscale2}\@nohyphens\ptt\@xivpt}%
+ \def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+ \@setstrut \rm
+}
+
+\def\xviipt
+{%
+ \textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+ \textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+ \textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\svtnrm}%
+ \def\pit{\@getfont\pit\itfam\@xviipt{ma56s14 at 17pt}}%
+ \def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+ \def\ptt{\@getfont\ptt\ttfam\@xviipt{cmtt10\@magscale3}\@nohyphens
+ \ptt\@xviipt}%
+ \def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+ \@setstrut \rm
+}
+
+\def\xxpt
+{%
+ \textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+ \textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+ \textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\twtyrm}%
+ \def\pit{\@getfont\pit\itfam\@xxpt{ma56s18 at 20pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@xxpt{ma75s18 at 20pt}}%
+ \def\ptt{\@getfont\ptt\ttfam\@xxpt{cmtt10\@magscale4}\@nohyphens\ptt\@xxpt}%
+ \def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+ \@setstrut \rm
+}
+
+\def\xxvpt
+{%
+ \textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+ \textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+ \textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@subfont\boldmath\unboldmath}%
+ \def\prm{\fam\z@\twfvrm}%
+ \def\pit{\@getfont\pit\bffam\@xxvpt{ma56s24 at 25pt}}%
+ \def\pbf{\@getfont\pbf\bffam\@xxvpt{ma75s24 at 25pt}}%
+ \def\ptt{\@subfont\tt\rm}%
+ \def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+ \@setstrut \rm
+}
+
+% No fancy definition of \$ needed:
+\chardef\$=`\$
+\def\pounds{\protect\ppounds}
+\def\ppounds{\hrule \@height 0.5ex \@width 0.5ex \relax}
+ % NO pounds sign!
+
+\endinput
+
+
diff --git a/fonts/malvern/source/ascii.mf b/fonts/malvern/source/ascii.mf
new file mode 100644
index 0000000000..bd47f3860a
--- /dev/null
+++ b/fonts/malvern/source/ascii.mf
@@ -0,0 +1,54 @@
+% ascii.mf 1.2.0 1994/10/11 -- a common subset of the ASCII character set
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "ascii.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Specify the character codes for a common subset of
+%%% the ASCII character set.",
+%%% dependencies = "",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+code.exclam = 33;
+
+code.hash = 35;
+code.dollar = 36;
+code.percent = 37;
+code.ampersand = 38;
+code.apostrophe = 39;
+code.paren.left = 40;
+code.paren.right = 41;
+code.asterisk5 = 42;
+code.plus_sign = 43;
+code.comma = 44;
+
+code.full_stop = 46;
+code.slash = 47;
+
+code.colon = 58;
+code.semicolon = 59;
+
+code.equals = 61;
+
+code.question = 63;
+code.at_sign = 64;
+
+code.brack.left = 91;
+
+code.brack.right = 93;
+
+code.inv.comma = 96;
+
diff --git a/fonts/malvern/source/fmv.mf b/fonts/malvern/source/fmv.mf
new file mode 100644
index 0000000000..4ebdf7e0d7
--- /dev/null
+++ b/fonts/malvern/source/fmv.mf
@@ -0,0 +1,33 @@
+% fmv.mf 1.2.0 94/10/11 -- generate fmv* fonts
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "fmv.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Generic driver file for the Malvern
+%%% font family, to be compiled using
+%%% METAFONT into TFM files (for TeX) and
+%%% GF files (for your printer driver).",
+%%% dependencies = "program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% This uses Knuth's "TeX Text" encoding
+% and Karl Berry's naming system -- with fmv as the family name.
+
+% encoding shoul;d be either 26 for old-style numerals, or undefined.
+if unknown encoding: encoding = 19; fi
+input ma
+bye
diff --git a/fonts/malvern/source/fmv.mff b/fonts/malvern/source/fmv.mff
new file mode 100644
index 0000000000..23fc7f4df9
--- /dev/null
+++ b/fonts/malvern/source/fmv.mff
@@ -0,0 +1,92 @@
+# fmv.mff 1.2.0 1994/10/11 -- mff startup file for Malvern 1.2 with KB names
+
+### @mff-options-file {
+### filename = "fmv.mff",
+### version = "1.2.0",
+### date = "1994/10/11",
+### package = "Malvern 1.2",
+### author = "P. Damian Cugley",
+### email = "damian.cugley@comlab.ox.ac.uk",
+### address = "Oxford University Computing Laboratory,
+### Parks Road, Oxford OX1 3QD, UK",
+### codetable = "USASCII",
+### keywords = "Malvern, METAFONT, font, typefont, TeX",
+### supported = "Maybe",
+### abstract = "An alternative mff options file for the Malvern
+### font family.",
+### dependencies = "program files",
+### }
+
+# See the Malvern Handbook (maman.tex) for more info about Malvern.
+# This software is available freely but without warranty.
+# See the file COPYING for details.
+
+# This file describes the translation of font names into assignments to
+# METAFONT variables (see the file INSTALL for more info).
+# It is used by programs like mff that run METAFONT automatically.
+
+########################################################################
+#
+# The font names understood are of the form
+#
+# fmv<weight><variant><encoding><width><size>
+#
+# where <weight> is one of t, i, l, k, m, d, b, x, c
+# <variant> is one of r, i, 9, 9i
+# <width> is one of c, r, x
+# <encoding> is one of k or <empty>
+# <size> is one or two digits
+#
+# Except that if both <width> and <variant> are "r", we omit them.
+# Unless... and so on. The syntax is complicated.
+#
+# The 7t suffix (indicating the old TeX Text encoding) is new.
+# It used to be that when there was no encoding suffix the assumption
+# was that "TeX Text" was being used. It isn't supported yet!
+#
+# font old new nonstandard name
+#
+# Malvern 55 10-pt fmvm10 fmvm7t10 ma55s10
+# Malvern 65 10-pt fmvd10 fmvd7t10 ma65s10
+# Malvern 74 18-pt fmvbix18 fmvbi7tx18 ma74s18
+# Malvern 58 7-pt fmvmic7 fmvmi7tc7 ma58s7
+#
+########################################################################
+
+-K # tell mff that Karl Berry names are being used
+
+# The following sets the W table:
+
++W
+-W "t= weight = 1/4" # thin [ultra-light]
+-W "i= weight = 1/2" # extra-lIght
+-W "l= weight = 3/4" # Light
+-W "k= weight = 7/8" # booK
+-W "m= weight = 1" # Medium
+-W "d= weight = 1.3" # Demi
+-W "b= weight = 1.6" # Bold
+-W "x= weight = 2" # eXtra
+-W "u= weight = 3" # Ultra
+
+# The table of widths (table C):
+
++C
+-C "o= hratio = 0.50" # extra condensed
+-C "c= hratio = 0.80" # compressed
+-C "r= hratio = 1.00" # normal width
+-C "x= hratio = 1.15" # expanded
+-C "w= hratio = 1.30" # extra expanded
+
+# table of variants:
+
++I
+-I "i= italicness = 1; slant = 1/8" # italic
+-I "9= encoding = 26" # oldstyle digits
+-I "o= slant = 1/8" # oblique
+-I "u= italicness = 1" # upright italic (!)
+-I "r= "
+-I "k= encoding = 7" # Greek
+
+# The J table is not used:
+
++J
diff --git a/fonts/malvern/source/ma.mf b/fonts/malvern/source/ma.mf
new file mode 100644
index 0000000000..230c5b72f8
--- /dev/null
+++ b/fonts/malvern/source/ma.mf
@@ -0,0 +1,392 @@
+% ma.mf 1.2.0 94/10/11 -- top-level driver file for the Malvern family
+% Copyright 1991, 1992, 1993, 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "ma.mf",
+%%% version = "1.2.0",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Generic driver file for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely without warranty.
+% See the file COPYING for details.
+
+%{{{ ma.mf
+string maversion; maversion = "1.2";
+
+boolean new_mf; new_mf = unknown no_new_mf;
+
+%{{{ Just testing?
+
+% If |mode| is unknown (no |\mode| in commandline)
+% then |testing| is given value |true|.
+% This means that most character programs will be skipped.
+
+% To make a proof of all charcters, use |\mode=proof;...|.
+
+boolean testing;
+
+if unknown mode:
+ message "Malvern version " & maversion;
+ message "Copyright (c) 1991 Damian Cugley.";
+ if designsize = 0pt#: font_size 10pt#; fi
+ testing := true;
+else:
+ testing := false;
+fi
+
+%}}}
+mode_setup;
+input maparams
+input maencode
+input makit;
+%{{{ read program files
+
+code_offset = 0; % added to all character codes
+
+boolean no_co; % control which chars made by macaps.
+no_co := false;
+
+boolean lc_marks; lc_marks = true;
+boolean text_figs; text_figs = true;
+boolean small_figs; small_figs = false; % sup or inf figs
+fig_b = 0v;
+
+height# := 12v#;
+pn_wd# := pn.wd#;
+
+if testing: endinput fi
+
+input mapunct % punctuation
+input masyms % symbols
+
+if known code.lc.a or known code.lc.longs:
+ input malc
+fi % lowercase letters
+if known code.mk.acute: input mamarks fi % marks for l.c.
+%%%%if known code.gr.lc.mu: input magrlc fi % l.c. greek
+input magrlc
+if known code.gr.cap.gamma: input magrcaps fi % u.c. greek
+if known code.cy.cap.b: input macy fi % cyrillic
+
+%{{{ Figures 0-9
+
+if known code.zero.old_style:
+ text_figs := true;
+ fig_offset := code.zero.old_style;
+ input mafigs;
+fi
+
+if known code.zero:
+ text_figs := false;
+ fig_b := 0; fig_dp# := 0;
+ fig_offset := code.zero;
+ input mafigs;
+fi
+
+if known code.zero.superior:
+ text_figs := false;
+ fig_ht# := body_ht#;
+ fig_wd# := sfig_wd#;
+ fig_b := vround (body_ht - sfig_ht); fig_dp# := 0;
+ fig_offset := code.zero.superior;
+ input mafigs;
+fi
+
+if known code.zero.inferior:
+ text_figs := false;
+ fig_ht# := -body_dp# + sfig_ht#;
+ fig_wd# := sfig_wd#;
+ fig_b := vround (-body_dp); fig_dp# := body_dp#;
+ fig_offset := code.zero.inferior;
+ input mafigs;
+fi
+
+%}}}
+%{{{ Capital letters
+
+%% The conventions for capital letters programs are supposed
+%% to've been changed -- again -- to use capcode instead of
+%% all these offsets and things.
+
+def input_macaps(suffix CC, SS) =
+ if known code.offset.CC and known code.offset.SS:
+ if code.offset.SS <> code.offset.CC:
+ co_only := true; no_co := false;
+ message (str CC & " -- composites.")
+ code_offset := code.offset.CC; scantokens "input macaps";
+ co_only := false; no_co := true;
+ message(str SS & " -- simples.")
+ code_offset := code.offset.SS; scantokens "input macaps";
+ else:
+ co_only := no_co := false;
+ code_offset := code.offset.SS;
+ message(str SS & "&" & str CC & " -- simples & composites.");
+ scantokens "input macaps";
+ fi
+ else: % one or the other unknown
+ if known code.offset.CC:
+ co_only := true; no_co := false;
+ code_offset := code.offset.CC; show code.offset.CC;
+ message (str CC & " -- composites only.");
+ scantokens "input macaps";
+ else:
+ co_only := false; no_co := true;
+ code_offset := code.offset.SS;
+ message (str SS & " -- simples only.");
+ scantokens "input macaps";
+ fi;
+ fi
+enddef;
+
+if known code.offset.LS or known code.offset.LC:
+ capmode := 1;
+ pickup pencircle xscaled cap.pn.wd yscaled cap.pn.ht; the_pen := savepen;
+ height# := cap_ht#; pn_wd# := cap.pn.wd#;
+ input_macaps(LC,LS);
+fi
+
+if known code.mk.Acute:
+ code_offset := code.mk.Acute - code.mk.acute;
+ lc_marks := false; input mamarks;
+fi
+
+if known code.offset.MC or known code.offset.MS:
+ capmode := 2;
+ pickup pencircle xscaled mcap.pn.wd yscaled mcap.pn.ht; the_pen := savepen;
+ height# := mcap_ht#; pn_wd# := mcap.pn.wd#;
+ input_macaps(MC,MS);
+fi
+
+if known code.offset.SC or known code.offset.SS:
+ capmode := 3;
+ pickup pencircle xscaled scap.pn.wd yscaled scap.pn.ht; the_pen := savepen;
+ height# := scap_ht#; pn_wd# := scap.pn.wd#;
+ input_macaps(SC,SS);
+fi
+
+%}}}
+%}}}
+if known code.lc.a and known code.offset.LS:
+%{{{ Ligtable
+
+vardef chardefined primary c =
+ if known byte c: charexists c else: false fi
+enddef;
+
+def KK = kern -2ku# enddef;
+def K = kern -3/2ku# enddef;
+def k = kern -ku# enddef;
+def kk = kern -1/2ku# enddef;
+def kkk = kern -1/4ku# enddef;
+
+def o_kerns primary x =
+ if italic: "a" kern x, fi
+ for i = "c", "d", "e", "g", "o": i kern x, endfor
+ "q" kern x
+enddef;
+
+def O_kerns primary x =
+ for i = "C", "G", "O": i kern x, endfor
+ "Q" kern x
+enddef;
+
+def u_kerns primary x =
+ "u" kern x, "y" kern x
+enddef;
+
+def v_kerns primary x =
+ "v" kern x, "w" kern x
+enddef;
+
+def maybe_a_kern primary x =
+ if not italic: "a" kern x, fi
+enddef;
+
+def kerns_for_f =
+ if new_mf: 1:: fi
+ maybe_a_kern(-1/2ku#)
+ o_kerns(-1/2ku#),
+ "s" kk,
+ if new_mf: boundarychar kern 1.5u#, fi
+ "," k, "." k,
+ "'" kern ku#, "?" kern ku#, ")" kern ku#, "]" kern ku#,
+ if known code.anglebr.right: code.anglebr.right kern ku#, fi
+ if known code.lc.dotless_j and new_mf: % fjord
+ "j" |=: code.lc.dotless_j,
+ fi
+ if known code.lc.dotless_i:
+ code.lc.dotless_j kern fi_kern#,
+ code.lc.dotless_i kern fi_kern#,
+ fi
+ "*" kern ku#
+enddef;
+
+def do_kerns_for_f = if new_mf: skipto 1 else: kerns_for_f fi enddef;
+
+ligtable "b": "e": "o": "p":
+ "f" kkk, "t" kkk,
+ "v" kern -1/3ku#, "w" kern -1/3ku#,
+ ")" k;
+
+ligtable "c":
+ o_kerns(-1/2ku#)
+ if known c_h_kern#: if c_h_kern# <> 0pt#: , "h" kern c_h_kern# fi fi;
+
+ligtable "i": "j":
+ "j" kern -0.125ku#;
+
+ligtable "l":
+ "l" kern 1/8ku#;
+
+ligtable "r":
+ maybe_a_kern(-3/4ku#) o_kerns(-3/4ku#),
+ "j" kkk, "s" kk;
+
+if chardefined code.lc.f.f:
+ligtable "f":
+ if chardefined code.lc.f.f: "f" =: code.lc.f.f, fi
+ if chardefined code.lc.f.i: "i" =: code.lc.f.i, fi
+ if chardefined code.lc.f.l: "l" =: code.lc.f.l, fi
+ do_kerns_for_f;
+fi
+
+if chardefined code.lc.f.f.i:
+ ligtable code.lc.f.f:
+ "i" =: code.lc.f.f.i, "l" =: code.lc.f.f.l,
+ kerns_for_f;
+fi
+
+ligtable "A":
+ o_kerns(-1/4ku#),
+ "j" kk, "t" kkk, "v" k, "w" k,
+ O_kerns(-1/2ku#),
+ "S" kk, "U" kk,
+ "T" k, "V" K, "W" k, "Y" K;
+
+ligtable "D": "O": "Q":
+ "A" kk, ")" k;
+
+ligtable "F":
+ maybe_a_kern(-ku#)
+ o_kerns(-ku#);
+
+ligtable "L":
+ maybe_a_kern(-1/2ku#)
+ o_kerns(-ku#), u_kerns(-1/2ku#), v_kerns(-ku#);
+
+ligtable "P":
+ "A" k,
+ "." kern -1.5ku#, "," kern -2ku#;
+
+ligtable "T":
+ maybe_a_kern(-2ku#)
+ o_kerns(-2ku#), "r" K, "s" KK,
+ u_kerns(-2ku#), "w" k,
+ "A" k,
+ if hratio >= 0.9: "C" k, "G" k, "O" k, "Q" k, fi
+ "." kern -1.5ku#, "," kern -1.5ku#,
+ "J" k,
+ "T" kern 1/2ku#;
+
+ligtable "V":
+ "A" K;
+
+ligtable "W":
+ "A" k;
+
+ligtable "Y":
+ "A" K;
+
+ligtable ".":
+ "." kern 2ku#, "?" kern 4ku#, "!" kern 4ku#;
+
+ligtable "3":
+ "0" k, "r" kk;
+
+ligtable "4":
+ "t" k;
+
+ligtable "(": "[": if chardefined code.anglebr.left: code.anglebr.left: fi
+ O_kerns(-ku#), o_kerns(-ku#), "T" kern +1/2ku#;
+
+if chardefined code.en_dash:
+ ligtable "-": "-" =: code.en_dash;
+ ligtable code.en_dash: "-" =: code.em_dash;
+fi
+
+if chardefined code.dbl.inv.comma:
+ ligtable "'": "'" =: code.dbl.apostrophe;
+ ligtable "`": "`" =: code.dbl.inv.comma;
+fi
+
+if chardefined code.dbl.comma:
+ ligtable ",": "," =: code.dbl.comma;
+fi
+
+if chardefined code.guillemet.single.left:
+ ligtable code.guillemet.single.left:
+ code.guillemet.single.left =: code.guillemet.left;
+ ligtable code.guillemet.single.right:
+ code.guillemet.single.right =: code.guillemet.right;
+fi
+
+if chardefined code.inv.question:
+ ligtable "?": "`" =: code.inv.question;
+ ligtable "!": "`" =: code.inv.exclam;
+fi
+%}}}
+fi
+%{{{ Fontdimens
+
+font_slant slant;
+font_x_height x_ht#;
+font_quad 16u#; % = design_size * hratio
+font_normal_space 5u#; % 0.313em
+font_normal_stretch 3u#; % max space is 1/2 em
+font_normal_shrink 2u#; % min is 0.2 em (ouch)
+font_identifier ("MA"
+ & decimal weight & "/" & decimal hratio & "/"
+ & decimal slant & if italic: "I" else: "R" fi
+ & if encoding = 0: "S" else: char (64 + encoding) fi);
+
+subs = 0.7; % expect subscripts to be 70% as big
+rth# = 0.04designsize; % expect rule of 0.4pt when 10pt
+fontdimen8: axis_ht# + 3.5rth# + 2.5v# + subs*desc_dp#; % num1 (display)
+fontdimen9: axis_ht# + 1.5rth# + 1.5v#; % num2 (\over, non-display)
+fontdimen10: axis_ht# + 1.5rth# + 2.5v#; % num3 (\atop, non-display)
+fontdimen11: -(axis_ht# - 3.5rth# - subs*fig_ht# - 6v#); % denom1 (display)
+fontdimen12: -(axis_ht# - 1.5rth# - subs*fig_ht# - 1.5v#); % denom2 (text)
+fontdimen13: body_ht# - subs*0.75x_ht#; % sup1 (non-cramped, display)
+fontdimen14: body_ht# - subs*x_ht#; % sup2 (non-cramped, non-display)
+fontdimen15: body_ht# - subs*0.75[asc_ht#,x_ht#]; % sup3 (cramped)
+fontdimen16: 3v#; % sub1
+fontdimen17: min(-(body_ht# - subs*0.75[asc_ht#,x_ht#] - 2v# - subs*asc_ht#),
+ body_dp#); % sub2
+fontdimen18: subs*asc_ht# - 1/2v#; % sup_drop
+fontdimen19: 0.9 v#; % sub_drop
+fontdimen20: 36v#; % delim1 (display)
+fontdimen21: 18v#; % delim2 (non-display)
+fontdimen22: axis_ht#;
+
+% Karl Berry's suggestions:
+fontdimen23: body_ht# + min(1,weight/hratio) * 0.2 * body_ht#;
+fontdimen24: body_dp# + min(1,weight/hratio) * 0.2 * body_dp#;
+fontdimen25: designsize;
+
+%}}}
+%}}} ma.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/maaenc.mf b/fonts/malvern/source/maaenc.mf
new file mode 100644
index 0000000000..922f12cff6
--- /dev/null
+++ b/fonts/malvern/source/maaenc.mf
@@ -0,0 +1,238 @@
+% maaenc.mf 1.2.0 1994/10/11 -- Malvern Encoding A
+% Copyright 1993-4 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "maaenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family, to be compiled using
+%%% METAFONT into TFM files (for TeX) and
+%%% GF files (for your printer driver).",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ maaenc.mf
+
+% These offsets are now obselete:
+code.offset.LS = code.offset.MS = code.offset.SS = 0;
+
+%{{{ Summary
+
+% 0 1 2 3 4 5 6 7 8 9 A B C D E F
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% 0 | l.cap specials | * * | marks that go above l.c. |
+% + +---+---+---+---+---+---+---+---+---+---+
+% 1 | l.c. specials | . .. | l.c. ligs, eszet, \i, \j |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% 2 | * ! TM # $ % & ' ( ) | * + , - . / |
+% +---+---+---+---+---+---+---+---+---+---+ +
+% 3 | text/old style figures | : ; < = > ? |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% 4 | @ | |
+% +---+ large capitals +---+ +---+ +
+% 5 | Z | [ | O | ] |AE OE |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% 6 | ` | |
+% +---+ lower case +---+ +---+ +
+% 7 | | { | o | } |ae oe |
+% +===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
+% 8 | m.cap specials | * * | marks that go above m.caps |
+% + +---+---+---+---+---+---+---+---+---+---+
+% 9 | s.cap specials | - -- | really weird stuff |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% A | !` c * * %% x '' Y f | * * ,, -- . / |
+% +---+---+---+---+---+---+---+---+---+---+ +
+% B | ranging figures |\S \P << --- >> ?` |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% C | * | |
+% +---+ medium capitals +---+ +---+ +
+% D | | < | O | > |AE OE |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+% E |`` | |
+% +---+ small capitals +---+ +---+ +
+% F | |(C)| O |(R)|AE OE |
+% +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+%}}}
+%{{{ 0-5, 16-21 -- special letters that appear in l.c. and caps
+
+% These have m.caps and s.caps equivs at +128 and +144:
+
+tmp := 0 - 1;
+code.cap.thorn = incr tmp; code.lc.thorn = 16 + tmp;
+code.cap.a.ogonek = incr tmp; code.lc.a.ogonek = 16 + tmp;
+code.cap.eng = incr tmp; code.lc.eng = 16 + tmp;
+code.cap.l.slash = incr tmp; code.lc.l.slash = 16 + tmp;
+code.cap.eth = incr tmp; code.lc.eth = 16 + tmp;
+code.cap.e.ogonek = incr tmp; code.lc.e.ogonek = 16 + tmp;
+%}}}
+%{{{ 6, 7, 8-15, 22, 23 -- MARKS
+
+% Marks are added to some letters to make compoite characters.
+% Some that go above letters are drawn differently for m.caps and l.c.
+% The l.c. version is also for s.caps, and the m.caps version for large caps.
+% Dots, twodots, macron and maacron appear once only.
+
+tmp := 8 - 1;
+% These have m.caps equivs at +128:
+code.mk.acute = incr tmp; code.mk.Acute = tmp + 128;
+code.mk.grave = incr tmp; code.mk.Grave = tmp + 128;
+code.mk.circumflex = incr tmp; code.mk.Circumflex = tmp + 128;
+code.mk.tilde = incr tmp; code.mk.Tilde = tmp + 128;
+code.mk.ring = incr tmp; code.mk.Ring = tmp + 128;
+
+code.mk.hook = incr tmp; code.mk.Hook = tmp + 128;
+% in Czech, called a h\'a\v{c}ek. AKA caron
+
+code.mk.breve = incr tmp; code.mk.Breve = tmp + 128;
+code.mk.hungarian = incr tmp; code.mk.Hungarian = tmp + 128;
+code.mk.cedilla = 6; code.mk.Cedilla = 128 + code.mk.cedilla;
+code.mk.ogonek = 7; code.mk.Ogonek = 128 + code.mk.ogonek;
+
+% These appear once only:
+code.mk.dot = 22;
+code.mk.twodots = 23;
+code.mk.macron = 22 + 128;
+code.mk.maacron = 23 + 128; % macron for 2 chars
+
+%}}}
+%{{{ 24-31 -- l.c.-only ligs and special letters
+
+tmp := 24 - 1;
+code.lc.eszet = incr tmp;
+code.lc.dotless_i = incr tmp;
+code.lc.dotless_j = incr tmp;
+code.lc.f.f = incr tmp;
+code.lc.f.i = incr tmp;
+code.lc.f.l = incr tmp;
+code.lc.f.f.i = incr tmp;
+code.lc.f.f.l = incr tmp;
+
+%}}}
+%{{{ "!"-"?" -- symbols and punct
+
+% Most are as ASCII except for
+% "" trademark -- this should encourage people to
+% remember to use '' for double quote marks
+% ' apostrophe (only)
+% - hyphen (only)
+% < > single guillemets
+% 0123456789 old-style numerals
+
+input ascii
+% defines a common ASCII subset
+
+code.bullet = 32;
+
+code.trademark = 34; % replaces doublequote (this is intentional)
+code.hyphen = ASCII"-";
+
+code.zero.old_style = ASCII"0"; % defines all old-style figures
+
+code.guillemet.single.left = ASCII"<";
+code.guillemet.single.right = ASCII">";
+
+%}}}
+%{{{ "A"-"Z", "a"-"z" etc.
+
+code.cap.o.slash = hex"5C"; code.lc.o.slash = hex"7C";
+code.cap.ae = hex"5E"; code.lc.ae = hex"7E";
+code.cap.oe = hex"5F"; code.lc.oe = hex"7F";
+
+code.brace.left = 123;
+code.brace.right= 125;
+
+%}}}
+%{{{ 128-159 -- cap versions of 0-31 and extra syms
+
+code.mc.thorn = hex"80";
+code.mc.a.ogonek = hex"81";
+code.mc.eng = hex"82";
+code.mc.l.slash = hex"83";
+code.mc.eth = hex"84";
+code.mc.e.ogonek = hex"85";
+code.sc.thorn = hex"90";
+code.sc.a.ogonek = hex"91";
+code.sc.eng = hex"92";
+code.sc.l.slash = hex"93";
+code.sc.eth = hex"94";
+code.sc.e.ogonek = hex"95";
+code.ord_feminine = hex"98"; % Na.
+code.ord_masculine = hex"99"; % No.
+code.care_of = hex"9A"; % c/o
+code.sp.lc.c = hex"9B"; % as in McDonald
+code.lc.d.hook = hex"9C"; % d' -- Czech d with hook
+code.lc.t.hook = hex"9D"; % t' -- Czech t with hook
+code.lc.h.circumflex = hex"9E"; % \^h -- Esperanto hho
+code.lc.l.hook = hex"9F"; % l' -- Slovakian?
+
+%}}}
+%{{{ meta"!"..meta"?" -- symbols and more punct
+
+code.ballotbox = meta " ";
+code.inv.exclam = meta "!"; % !` (should that be exclam.inv?)
+code.cent = hex"A2";
+code.sterling = meta "#"; % \pounds
+code.currency = meta "$"; % ISO 646 currency sign
+code.per_thousand = meta "%";
+code.multiply = meta "&"; % as in 2x4 ...
+code.yen = meta "(";
+code.florin = meta ")";
+code.dbl.apostrophe = meta "'"; % ''
+code.dagger = meta "*"; % \dag
+code.dbl.dagger = meta "+"; % \ddag
+code.dbl.comma = meta ","; % ,,
+code.en_dash = meta "-"; % --
+code.cdot = meta "."; % $\cdot$
+code.minus_sign = meta "/"; % $-$
+code.zero = meta "0"; % ranging figures start here
+code.section = meta ":"; % \S
+code.paragraph = meta ";"; % \P
+code.guillemet.left = meta "<"; % left-pointing french quote
+code.em_dash = meta "="; % ---
+code.guillemet.right = meta ">"; % right-pointing french quote
+code.inv.question = meta "?"; % ?`
+
+%}}}
+%{{{ meta"A"-meta"Z", meta"a"-meta"z" -- med caps, small caps
+
+code.degree = meta "@"; % as in angles etc.
+code.dbl.inv.comma = meta "`"; % ``
+code.copyright = meta "{";
+code.registered = meta "}";
+code.anglebr.left = meta "[";
+code.anglebr.right = meta "]";
+code.mc.o.slash = hex"DC";
+code.mc.ae = hex"DE";
+code.mc.oe = hex"DF";
+code.sc.o.slash = hex"FC";
+code.sc.ae = hex"FE";
+code.sc.oe = hex"FF";
+
+%}}}
+
+for i = ASCII"a" step 1 until ASCII"z":
+ scantokens ("code.lc." & char i) = i;
+ scantokens ("code.cap." & char i) = i - 32;
+ scantokens ("code.sc." & char i) = i + 128 - code.offset.SS;
+ scantokens ("code.mc." & char i) = i - 32 + 128 - code.offset.MS;
+endfor
+
+font_coding_scheme "Malvern A " & maversion;
+%}}} Malvern A
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/mabenc.mf b/fonts/malvern/source/mabenc.mf
new file mode 100644
index 0000000000..b8c1d0318e
--- /dev/null
+++ b/fonts/malvern/source/mabenc.mf
@@ -0,0 +1,134 @@
+% mabenc.mf 1.2.0 1994/10/11 -- Malvern encoding B
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "mabenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family, to be compiled using
+%%% METAFONT into TFM files (for TeX) and
+%%% GF files (for your printer driver).",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ mabenc.mf
+%{{{ arrows
+
+code.arrow.left = 0;
+code.arrow.right = 1;
+code.arrow.up = 2;
+code.arrow.down = 3;
+code.arrow.left_right = 4;
+code.arrow.up_down = 5;
+code.arrow.horiz_ex = 6;
+code.arrow.vert_ex = 7;
+
+code.arrow.dbl.left = 128;
+code.arrow.dbl.right = 129;
+code.arrow.dbl.up = 130;
+code.arrow.dbl.down = 131;
+code.arrow.dbl.left_right = 132;
+code.arrow.dbl.up_down = 133;
+code.arrow.dbl.horizex = 134;
+code.arrow.dbl.vertex = 135;
+%}}} arrows
+%{{{ lower case latin specials
+
+tmp := 64;
+code.cap.thorn1 = incr tmp;
+code.cap.eth1 = incr tmp;
+code.cap.wyn = incr tmp;
+code.cap.yogh = incr tmp; % one stroke
+code.cap.yogh1 = incr tmp; % g-ish one
+
+tmp := 96;
+
+% Some letters used in printing Old English and the like:
+code.lc.thorn1 = incr tmp;
+code.lc.eth1 = incr tmp;
+code.lc.wyn = incr tmp;
+code.lc.yogh = incr tmp; % one stroke
+code.lc.yogh1 = incr tmp; % g-ish one
+
+code.lc.c.h = incr tmp; % Fraktur
+code.lc.c.k = incr tmp; % ditto
+code.lc.c.t = incr tmp; % archaic link ligature
+code.lc.f.t = incr tmp;
+code.lc.ij = incr tmp; % ij letter not ligature?
+code.lc.l.l = incr tmp; % Fraktur
+code.lc.longs = incr tmp; %
+code.lc.longs.i = incr tmp;
+code.lc.longs.longs = incr tmp;
+code.lc.longs.s = incr tmp;
+code.lc.longs.t = incr tmp;
+code.lc.s.t = incr tmp; % archaic link ligature
+code.lc.longs.z = incr tmp; % Fraktur Eszet
+code.lc.t.z = incr tmp; % Fraktur
+
+code.lc.schwa = incr tmp; % inverted e
+
+% variant letters -- Malvern-specific:
+
+code.lc.l1 = incr tmp; % l with curl at base
+code.lc.l.acute1 = incr tmp; % ditto plus acute
+code.lc.l.hook1 = incr tmp; % ditto plus hook
+code.lc.l.slash1 = incr tmp;
+code.lc.l.l1 = incr tmp; %
+code.cap.m1 = inc tmp;
+
+%}}} lower case latin specials
+% ASCII quote and quote.dbl care called ticks because
+% quote is a reserved word
+
+code.space = ASCII " ";
+code.tick.dbl = 34;
+code.per_thousand_zero = ASCII "%"; % a Cork-ism
+code.tick = ASCII "'";
+code.comma = ASCII ",";
+code.ellipsis = ASCII ".";
+code.fraction = ASCII "/";
+
+code.zero.superior = ASCII"0";
+
+code.divide = ASCII ":";
+code.less = ASCII "<";
+code.greater = ASCII ">";
+
+code.backslash = ASCII "\";
+code.ascii.circumflex = ASCII "^";
+code.ascii.underscore = ASCII "_";
+code.backtick = ASCII "`";
+
+code.vert = ASCII "|";
+code.swung_dash = ASCII "~";
+
+numeric t; t = 160 - 1;
+code.ascii.visible_space = incr t;
+code.one_quarter = incr t;
+code.one_half = incr t;
+code.three_quarters = incr t;
+code.logical_not = incr t;
+code.gr.lc.mu = incr t;
+code.ascii.broken_bar = incr t;
+
+code.zero.inferior = ASCII"0" + 128;
+
+font_coding_scheme "Malvern B " & maversion;
+%}}}
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/macaps.mf b/fonts/malvern/source/macaps.mf
new file mode 100644
index 0000000000..273764bf03
--- /dev/null
+++ b/fonts/malvern/source/macaps.mf
@@ -0,0 +1,348 @@
+% macaps.mf 1.2.0 94/10/11 -- capital letters program file
+% Copyright 1991-4 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "macaps.mf",
+%%% version = "1.2.0",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family, to be compiled using
+%%% METAFONT into TFM files (for TeX) and
+%%% GF files (for your printer driver).",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% This file produces capital letters of the Latin alphabet, including
+% a couple of national letters like thorn and AE ligature.
+
+%{{{ macaps.mf
+
+set_cap_widths;
+
+if testing: endinput fi
+
+input maglcaps
+
+%{{{ L
+
+ma_cap(capcode.l, narrow_wd# + pn_adj#)(1,1/2);
+ box_points;
+ draw (x.l, y.t) -- (x.l, y.b) -- (x.r, y.b);
+remember;
+ some_cap_marks(0.45[l,r]) l;
+endchar;
+
+%}}} L
+%{{{ D
+
+D_wd# := wide_wd# + pn_adj#;
+
+ma_cap(capcode.d, D_wd#)(1, O_sp);
+ D_stem; D_bowl.bowl(h, -d, r); set_ic_O;
+if not no_co:
+remember;
+ some_cap_marks(0.45[l,r]) D;
+fi
+endchar;
+
+%}}} D
+%{{{ R
+
+ma_cap(capcode.r, max(2pn_wd# + 3u#, narrow_wd# + pn_adj#))(1,1/2);
+ P_stem; D_bowl.bowl(h, hround bot 0.5[-d, h], r);
+ z1tail = z4bowl;
+ z2tail = (lft r + ho, top -d - o); % bot right
+ draw z1tail -- z2tail;
+ labels(1tail, 2tail);
+ set_ic 0.9h#; charic := max(0, charic - 0.1(r# - l#));
+if not no_co:
+remember;
+ some_cap_marks(0.5[l,r]) R;
+fi
+endchar;
+
+%}}}
+%{{{ G
+
+ma_cap(capcode.g, wide_wd# + 2pn_adj#)(O_sp, 3/4);
+ draw_C(l, h, r, -d) 1/20;
+ x6 = x5; x7 = good.x 0.6[l,r];
+ y6 = y7 = good.y (0.45[-d, h]);
+ draw z5 -- z6 -- z7;
+ labels(6,7); set_ic 0.95h#;
+if not no_co:
+remember;
+ some_cap_marks(0.6[l,r]) G;
+fi
+endchar;
+
+%}}}
+%{{{ Y
+
+ma_cap(capcode.y, medium_wd# + 2pn_adj#)(1/2,1/2);
+ draw_Y(0.475[-d, h]); set_ic_tr;
+remember;
+if not no_co:
+ some_cap_marks(0.5w) Y;
+fi
+endchar;
+
+%}}}
+%{{{ U
+
+ma_cap(capcode.u,medium_wd# + 2pn_adj#)(1,1);
+ lft x1 = lft x0 = l; rt x3 = rt x4 = r;
+ top y0 = top y4 = h + o;
+ bot z2 = (1/2[l,r], -d -o);
+ z1 = z2 + whatever*(-hratio,1); z3 = z2 + whatever*(hratio,1);
+ draw z0 --- z1 ... z2 ... z3 --- z4;
+ labels(0,1,2,3,4); set_ic_tr;
+remember;
+if not no_co:
+some_cap_marks(1/2[l,r]) U;
+similarly(code.co.U.ring); "Cap. U with ring";
+ if cap_mark_t - h >= 4v:
+ % there is room to float the ring:
+ draw_clear_ring.ring(1/2[l,r], 1/2[h, cap_mark_t] - 1.5v - eps, 3u, 3v);
+ elseif cap_mark_t - h >= 3v:
+ draw_clear_ring.ring(1/2[l,r], h, 3u, 3v);
+ else:
+ % Not enough room -- squash the ring:
+ draw_joined_ring.ring(1/2[l,r], h, 3u, min(cap_mark_t - h + pn.ht - o, 3v));
+ fi
+ charht := cap_mark_t#;
+wug;
+fi
+endchar;
+%}}} U
+%{{{ C
+
+% Compressible pdc Mon. 6 May 1991
+
+ma_cap(capcode.c, wide_wd# + 2pn_adj#)(O_sp, 1/3);
+ draw_C(l, h, r, -d) 1/16; set_ic 0.95h#;
+remember;
+if not no_co:
+ some_cap_marks(0.6[l,r]) C;
+fi
+similarly(code.C_cedilla); "cap C with cedilla";
+ chardp := Cedilla_ht#; charht := cap_ht#;
+ draw_cedilla.cedilla(x2, 0, Cedilla_wd, Cedilla_ht);
+wug;
+endchar;
+
+%}}}
+%{{{ S
+
+ma_cap(capcode.s, 0.9narrow_wd# + pn_adj#)(0.8,0.8);
+ draw_S(h, -d)(0.53, 0.075, 0.1);
+ set_ic_tr; charic := max(0, charic - 1/2u#);
+remember;
+if not no_co:
+ some_cap_marks(0.5[l,r]) S;
+fi
+similarly(code.S_cedilla); "cap S with cedilla";
+ chardp := Cedilla_ht#; charht := cap_ht#;
+ draw_cedilla.cedilla(1/2[l,r], 0, Cedilla_wd, Cedilla_ht);
+wug;
+endchar;
+
+%}}}
+if co_only: endinput; fi
+%{{{ A-ogonek
+
+iff known capcode.a.ogonek: "Capital A with ogonek";
+ma_char(capcode.a.ogonek, wide_wd# + 3pn_adj#, height#, ogonek_dp#)(1/3,1/3);
+ A_body(true, false);
+ z1ogonek = z3; y2ogonek = 2/3[y1ogonek, y3ogonek];
+ rt x2ogonek = lft x1ogonek - min(u, pn.wd);
+ if lft x2ogonek < 1/2[l,r]: x2ogonek := rt 1/2[l,r]; fi
+ x3ogonek = good.x (lft x2ogonek + 2.5u);
+ bot y3ogonek = vround -ogonek_dp;
+ draw hvarc(1ogonek,2ogonek) ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+endchar;
+
+%}}} A-ogonek
+%{{{ E-ogonek
+
+iff known capcode.e.ogonek: "E with ogonek";
+
+ma_cap(capcode.e.ogonek, narrow_wd# + pn_adj#)(1, 1/2);
+ rt x1 = rt x4 = r; lft x2 = lft x3 = lft x1bar = l;
+ top y1 = top y2 = h; bot y3 = bot y4 = 0;
+ y1bar = y2bar = 0.52h; x2bar = 4/5[l,r];
+ draw z1 -- z2 -- z3 -- z4; draw z1bar -- z2bar;
+ set_ic_tr;
+ labels(1,2,3,4, 1bar, 2bar);
+ z1ogonek = z4; y2ogonek = 2/3[y1ogonek, y3ogonek];
+ rt x2ogonek = lft x1ogonek - min(u, pn.wd);
+ if lft x2ogonek < 1/2[l,r]: x2ogonek := rt 1/2[l,r]; fi
+ x3ogonek = good.x (lft x2ogonek + 2.5u);
+ bot y3ogonek = vround -ogonek_dp;
+ draw hvarc(1ogonek,2ogonek) ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+endchar;
+
+%}}} E-ogonek
+%{{{ AE and OE
+
+% - pdc Tue. 26 Feb. 1991
+
+def draw_lig_E =
+ top y1mid = top y1bar = h;
+ y2mid = y2bar = good.y 0.55[-d, h];
+ bot y3mid = bot y3bar = -d;
+ lft x1mid = lft x2mid = lft x3mid = hround (r - narrow_wd);
+ rt x1bar = rt x3bar = r; x2bar = good.x 4/5[x1mid, x1bar];
+ draw z1bar -- z1mid -- z3mid -- z3bar;
+ draw z2mid -- z2bar;
+ labels(1mid, 2mid, 3mid, 1bar, 2bar, 3bar); set_ic_tr
+enddef;
+
+if known capcode.ae:
+ "Cap. lig. AE";
+ ma_char(capcode.ae, 3/4medium_wd# + narrow_wd#, height#, 0v#)(1/2,1/2);
+ draw_lig_E;
+ y1 = y1mid; y2 = y2mid; y3=y3mid;
+ x1 = x1mid - 2apex_adjust; lft x3 = l; z2 = whatever[z1, z3];
+ draw z3 -- z1 -- z1mid; draw z2 -- z2mid;
+ labels(1, 2, 3);
+ endchar;
+fi
+
+if known capcode.oe:
+ "Cap. lig. OE";
+ ma_char(capcode.oe, 1/2width# + narrow_wd# + 1/2pn.wd#,
+ height#, 0v#)(1/2,1/2);
+ draw_lig_E;
+ x1 = x3 = lft x1mid ; y1 = y1mid; y3 = y3mid;
+ lft x2 = l; y2 = 1/2[-d, h];
+ draw z1mid --- z1 .. z2 .. z3 --- z3mid;
+ labels(1,2,3);
+ endchar;
+fi
+%}}}
+%{{{ ETH
+
+iff known capcode.eth: "Cap. Eth";
+ma_cap(capcode.eth, D_wd#)(1, O_sp);
+ D_stem; D_bowl.bowl(h, -d, r);
+ lft x3 = hround (x1 - 1/10(r - l) - 1/2pn.wd);
+ rt x4 = hround (x3 + 1/2(r - l));
+ y3 = y4 = good.y (1/2[-d, h]);
+ draw z3 -- z4;
+ labels(3,4); set_ic_O;
+endchar;
+
+%}}}
+%{{{ F, L-bar
+
+if known capcode.f:
+ do_EFL(capcode.f, true, 0, 3/4, false);
+fi
+
+if known capcode.l.slash:
+ "Cap. L with bar";
+ do_EFL(capcode.l.slash, false, -1/4, 1/2, true);
+fi
+
+%}}}
+%{{{ Eng
+
+iff known capcode.eng: "Lappish cap. Eng";
+ma_char(capcode.eng, medium_wd# + 2pn_adj#, height#, 2/3desc_dp#)(1,1);
+ lft x1l = lft x2l = lft x3l = l; rt x1r = rt x2r = r;
+ top y1l = top y1r = h + o; bot y3l = - o;
+ bot y3r = bot y4r - 1/2v = -d - o;
+ x3r = 0.55[x2r, x4r]; x4r = 0.45[r,l];
+ z2r = z3r + whatever*ne; z2l = z1r + whatever*ne;
+ draw z1l -- z3l; draw z2l -- z1r --- z2r ... z3r{left} ... z4r;
+ labels(1l, 2l, 3l, 1r, 2r, 3r, 4r, 5r); set_ic_tr;
+endchar;
+
+%} }}
+%{{{ Thorn
+
+iff known capcode.thorn: "Cap. Thorn";
+ma_cap(capcode.thorn, max(2pn_wd# + 3u#, narrow_wd# + pn_adj#))(1,1/2);
+ H_stem; D_bowl.bowl(0.85[-d,h], 0.35[-d, h], r); set_ic 0.75h#;
+endchar;
+
+%}}}
+%{{{ Q O/slash
+
+"Cap. Q";
+ma_char(capcode.q, O_wd#, height#, 1/6height#)(O_sp, O_sp);
+ draw_O; set_ic_O;
+ x1tail = x3 + 3u; y1tail = -d; draw z3 -- z1tail;
+endchar;
+
+iff known capcode.o.slash: "Cap. O with slash";
+ma_char(capcode.o.slash, O_wd#, height#, 0v#)(O_sp, O_sp);
+ draw_O; draw_O_slash; set_ic_O;
+endchar;
+
+%}}}
+%{{{ V
+
+ma_cap(capcode.v, medium_wd# + 3pn_adj#)(1/3,1/3);
+ draw_V; set_ic_tr;
+endchar;
+
+%}}}
+%{{{ W
+
+"Cap. W";
+ma_char(capcode.w, 1.2width# + 2pn_adj#, height#, 0pt#)(1/3,1/3);
+ if 1/2w <> apex.x 1/2w: change_width; fi
+ lft x1 = w - rt x5 = l; top y1 = top y5 = h + o;
+ bot y2 = bot y4 = -d;
+ x3 = 1/2[x1,x5]; y3 = good.y 4/5[-d,h];
+ x2 = w - x4 = apex.x (y3 / (y3 + y1))[l,1/2[l,r]];
+ draw z1 -- vpex_path2 -- apex_path3 -- vpex_path4 -- z5;
+ labels(1, 2, 3, 4, 5); set_ic_tr;
+endchar;
+
+%}}} W
+%{{{ J
+
+"Cap. J";
+ma_char(capcode.j, 0.5width# + pn_adj#, height#, 0pt#)(1/3,1);
+ rt x1 = rt x2 = r; top y1 = h + o;
+ x3 = 1/2[r, l]; bot y3 = -d - o;
+ z2 = z3 + whatever*(hratio,1);
+ lft x4 = l; y4 = 1/8[-d, h];
+ draw z1 --- z2 .. z3 .. z4;
+ labels(1,2,3,4); set_ic_tr;
+remember;
+if not no_co:
+ some_cap_marks(lft r) J;
+fi
+if not co_only:
+similarly(capcode.ij); "IJ ligature";
+ charwd := charwd + pn.wd# + 4/3sp#;
+ interim xoffset := pn.wd + hround(7/3sp#*hppp);
+ lft x1I = lft x0I = hround(-xoffset + sp);
+ top y0I = h + o; bot y1I = -d - o;
+ draw z0I -- z1I;
+fi
+endchar;
+
+%}}}
+%}}} macaps
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/macenc.mf b/fonts/malvern/source/macenc.mf
new file mode 100644
index 0000000000..24a4a5e7eb
--- /dev/null
+++ b/fonts/malvern/source/macenc.mf
@@ -0,0 +1,227 @@
+% macenc.mf 1.2.0 1994/10/11 -- Malvern encoding C (Cyrillic)
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "macenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Encoding definition for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ macenc.mf
+% no idea how to name the Cyrillic letters, sorry, so I am using the
+% transliterations in my dictionaries.
+% The encoding is based on the various *CYR10 fonts.
+%
+%{{{ alphabets
+
+code.cy.cap.nj = 0; % macedonian
+code.cy.cap.lj = 1; % serbian
+code.cy.cap.dz_hook = 2; % macedonian
+code.cy.cap.e_acute = 3;
+code.cy.cap.old_i = 4; % pre-1918 russian
+code.cy.cap.ye = 5; % ukranian
+code.cy.cap.d_bar = 6; % serbian
+code.cy.cap.c_acute = 7; % serbian
+code.cy.lc.nj = 8; % macedonian
+code.cy.lc.lj = 9; % serbian
+code.cy.lc.dz_hook = 10; % macedonian
+code.cy.lc.e_acute = 11;
+code.cy.lc.old_i = 12; % pre-1918 russian
+code.cy.lc.ye = 13; % ukranian
+code.cy.lc.d_bar = 14; % serbian
+code.cy.lc.c_acute = 15; % serbian
+code.cy.cap.yu = 16;
+code.cy.cap.zh = 17;
+code.cy.cap.i_breve = 18; % *
+code.cy.cap.e_twodots = 19; % * obselete?
+code.cy.cap.upsilon = 20; % * pre-1918, > i
+code.cy.cap.theta = 21; % * pre-1918, > f
+code.cy.cap.dz = 22; % macedonian
+code.cy.cap.ya = 23;
+code.cy.lc.yu = 24;
+code.cy.lc.zh = 25;
+code.cy.lc.i_breve = 26; % *
+code.cy.lc.e_twodots = 27; % * obselete?
+code.cy.lc.upsilon = 28; % * pre-1918, > i
+code.cy.lc.theta = 29; % * pre-1918, > f
+code.cy.lc.dz = 30; % macedonian
+code.cy.lc.ya = 31;
+code.cy.cap.old_e = 35; % * pre-1918, > e
+code.cy.lc.old_e = 43; % * pre-1918, > e
+code.cy.cap.g_acute = 128; % * macedonian
+code.cy.cap.k_acute = 129; % * macedonian
+code.cy.cap.i_twodots = 130; % * ukranian
+code.cy.cap.old_g = 131; % * ukranian, obselete
+code.cy.cap.w = 132; % * belorussian
+code.cy.lc.g_acute = 136; % * macedonian
+code.cy.lc.k_acute = 137; % * macedonian
+code.cy.lc.i_twodots = 138; % * ukranian
+code.cy.lc.old_g = 139; % * ukranian, obselete
+code.cy.lc.w = 140; % * belorussian
+
+code.cy.lc.a = ASCII"a";
+code.cy.lc.b = ASCII"b";
+code.cy.lc.ts = ASCII"c"; % (like esperanto c!)
+code.cy.lc.d = ASCII"d";
+code.cy.lc.e = ASCII"e";
+code.cy.lc.f = ASCII"f";
+code.cy.lc.g = ASCII"g";
+code.cy.lc.kh = ASCII"h";
+code.cy.lc.i = ASCII"i";
+code.cy.lc.j = ASCII"j"; % serbian
+code.cy.lc.k = ASCII"k";
+code.cy.lc.l = ASCII"l";
+code.cy.lc.m = ASCII"m";
+code.cy.lc.n = ASCII"n";
+code.cy.lc.o = ASCII"o";
+code.cy.lc.p = ASCII"p";
+code.cy.lc.ch = ASCII"q";
+code.cy.lc.r = ASCII"r";
+code.cy.lc.s = ASCII"s";
+code.cy.lc.t = ASCII"t";
+code.cy.lc.u = ASCII"u";
+code.cy.lc.v = ASCII"v"; % actually 3rd letter of alfabet..
+code.cy.lc.shch = ASCII"w";
+code.cy.lc.sh = ASCII"x";
+code.cy.lc.y = ASCII"y";
+code.cy.lc.z = ASCII"z"; % actually 9th letter of alphabet
+code.cy.lc.soft_sign = ASCII"~"; % '
+code.cy.lc.hard_sign = 127; % ''
+
+code.cy.cap.a = ASCII"A";
+code.cy.cap.b = ASCII"B";
+code.cy.cap.ts = ASCII"C"; % (like Esperanto c!)
+code.cy.cap.d = ASCII"D";
+code.cy.cap.e = ASCII"E";
+code.cy.cap.f = ASCII"F";
+code.cy.cap.g = ASCII"G";
+code.cy.cap.kh = ASCII"H";
+code.cy.cap.i = ASCII"I";
+code.cy.cap.j = ASCII"J"; % Serbian
+code.cy.cap.k = ASCII"K";
+code.cy.cap.l = ASCII"L";
+code.cy.cap.m = ASCII"M";
+code.cy.cap.n = ASCII"N";
+code.cy.cap.o = ASCII"O";
+code.cy.cap.p = ASCII"P";
+code.cy.cap.ch = ASCII"Q";
+code.cy.cap.r = ASCII"R";
+code.cy.cap.s = ASCII"S";
+code.cy.cap.t = ASCII"T";
+code.cy.cap.u = ASCII"U";
+code.cy.cap.v = ASCII"V"; % actually 3rd letter of alfabet..
+code.cy.cap.shch = ASCII"W";
+code.cy.cap.sh = ASCII"X";
+code.cy.cap.y = ASCII"Y";
+code.cy.cap.z = ASCII"Z"; % actually 9th letter of alphabet
+code.cy.cap.soft_sign = ASCII"^"; % '
+code.cy.cap.hard_sign = ASCII"_"; % ''
+%}}} alphabets
+%{{{ substitutions2
+
+% Substitute similar latin or greek letters. Some letters like
+% cy.cap.k, cy.cap.r, cy.cap.u are normally drawn slightly differently
+% from their latin sijmilars cap.k, cap.p, cap.y, but these will
+% do for now.
+
+vardef subst(suffix $, $$) =
+ if unknown code$: code$ := code.cy$$; fi
+enddef;
+
+% forsuffixes $=y,j: subst(cap$,cap$); endfor
+forsuffixes $=e,y,j: subst(lc$,lc$); endfor
+
+% subst(cap.c, cap.s);
+% subst(cap.s, cap.dz);
+% subst(cap.v, cap.upsilon); % not a great match
+subst(cap.e.twodots, cap.e_twodots);
+subst(gr.cap.alpha, cap.a);
+subst(gr.cap.beta, cap.v);
+subst(gr.cap.chi, cap.kh);
+subst(gr.cap.epsilon, cap.e);
+subst(gr.cap.eta, cap.n);
+subst(gr.cap.gamma, cap.g);
+subst(gr.cap.iota, cap.old_i);
+subst(gr.cap.kappa, cap.k);
+subst(gr.cap.mu, cap.m);
+subst(gr.cap.omicron, cap.o);
+subst(gr.cap.phi, cap.f);
+subst(gr.cap.rho, cap.r);
+
+subst(lc.a, lc.a);
+subst(sc.b, lc.v);
+if italic: subst(lc.eth, lc.d); fi
+subst(lc.e, lc.e);
+subst(lc.e.twodots, lc.e_twodots);
+subst(lc.sc.h, lc.n);
+subst(gr.lc.omicron, lc.o);
+if italic: subst(lc.n, lc.p); fi
+subst(gr.lc.rho, lc.r);
+subst(lc.c, lc.s);
+if italic: subst(lc.m, lc.t); fi
+subst(lc.y, lc.u);
+subst(gr.lc.phi, lc.f);
+subst(lc.x, lc.kh);
+subst(lc.i, lc.old_i);
+subst(lc.v, lc.upsilon);
+subst(lc.y.breve, lc.w);
+subst(lc.j, lc.j);
+subst(lc.i.twodots, lc.i_twodots);
+
+
+%}}} substitutions
+%{{{ digits, punctuation, symbols
+
+code.mk.twodots = ASCII" ";
+code.exclam = ASCII"!";
+code.dbl.apostrophe = ASCII ditto;
+code.mk.breve = ASCII"$";
+code.percent = ASCII"%";
+code.mk.acute = ASCII"&";
+code.apostrophe = ASCII"'";
+code.paren.left = ASCII"(";
+code.paren.right = ASCII")";
+code.asterisk6 = ASCII"*";
+code.comma = ASCII",";
+code.hyphen = ASCII"-";
+code.full_stop = ASCII".";
+code.slash = ASCII"/";
+code.zero = ASCII"0";
+code.colon = ASCII":";
+code.semicolon = ASCII";";
+code.guillemet.left = ASCII"<";
+code.lc.dotless_i = ASCII "=";
+code.guillemet.right = ASCII">";
+code.question = ASCII"?";
+code.mk.breve1 = ASCII"@";
+code.brack.left = ASCII"[";
+code.brack.right = ASCII"]";
+code.dbl.inv.comma = ASCII"\";
+code.inv.comma = ASCII"`";
+code.en_dash = 121;
+code.em_dash = 122;
+code.numero = 123;
+
+%}}} digits, punctuation, symbols
+font_coding_scheme "Malvern C " & maversion;
+
+%}}}
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/macy.mf b/fonts/malvern/source/macy.mf
new file mode 100644
index 0000000000..3fd94850fe
--- /dev/null
+++ b/fonts/malvern/source/macy.mf
@@ -0,0 +1,279 @@
+% macy.mf 1.2.0 94/10/11 -- Cyrillic letters
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "macy.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ macy.mf
+%{{{ kit
+%{{{ heights etc for caps & lc
+
+cap.height# := cap_ht#;
+cap.narrow_wd# := 6.5u#;
+cap.medium_wd# := 8u#;
+cap.wide_wd# := 12u#;
+cap.tail_dp# := 2v#;
+
+lc.height# := x_ht#;
+lc.narrow_wd# := 5u#;
+lc.medium_wd# := 6u#;
+lc.wide_wd# := 9u#;
+lc.tail_dp# := 2v#;
+
+pn_adj# := pn.wd# - u#;
+
+string cap.case, lc.case;
+cap.case = "capital";
+lc.case = "lower case";
+%}}} heights etc for caps & lc
+%{{{ macro to start a char
+
+def ma_cy_char(expr pre)(suffix $$, ##) =
+ if pre <> "": pre & " " & fi
+ "Cyrillic " & $$case & " " & str ##;
+ ma_char(code.cy.$$.##)
+enddef;
+%}}} macro to start a char
+%{{{ loop for rhs of several letters
+
+vardef cy_loop@#(expr leftx, rightx) =
+ top y1@# = h + o;
+ lft x1@# = lft x2@# = lft x6@# = hround leftx;
+ rt x4@# = hround rightx;
+ if italic:
+ bot y3@# = -d - o; y2@# = y3@# + 1/12h;
+ top y5@# = 2/3[-d, h]; y6@# = y5@# - 1/12h;
+ else:
+ bot y3@# = bot y2@# = -d;
+ top y5@# = top y6@# = 2/3[-d, h];
+ fi
+ y4@# = 1/2[y3@#, y5@#];
+ z5@# = z4@# + whatever * se; x3@# = x5@#;
+ draw z1@# -- z2@# ... z3@#{right} ... z4@#{up} ... z5@#{left} ... z6@#;
+ labels(1@#, 2@#, 3@#, 4@#, 5@#);
+enddef;
+%}}} loop for rhs of several letters
+%}}} kit
+
+forsuffixes $$ = cap:
+
+endfor
+
+
+if testing: endinput fi
+
+forsuffixes $$ = cap, lc:
+
+%{{{ D
+
+ma_cy_char("", $$, d)($$medium_wd# + 2pn_adj#, $$height#, $$tail_dp#)(1,1)
+ bot lft z1 = (l, 0); bot rt z2 = (r, 0);
+ top rt z3 = (r, h); top lft z4 = (0.3[l,r], h);
+ draw z1 -- z2 -- z3 -- z4 -- cycle;
+ bot lft z1tail = (l, -d - o); bot rt z2tail = (r, -d - o);
+ draw z1 -- z1tail; draw z2 -- z2tail;
+ labels(1,2,3,4, 1tail, 2tail);
+endchar;
+
+%}}} D
+%{{{ L
+
+
+ma_cy_char("", $$, l)($$medium_wd# + 2pn_adj#, $$height#, 0v#)(1,1)
+ bot lft z1 = (l, 0); bot rt z2 = (r, 0);
+ top rt z3 = (r, h); top lft z4 = (0.3[l,r], h);
+ draw z1 -- z4 -- z3 -- z2;
+ labels(1,2,3,4);
+endchar;
+
+%}}} L
+%{{{ TS
+
+ma_cy_char("", $$, ts)($$medium_wd# + 2pn_adj#, $$height#, $$tail_dp#)(1,1)
+ top lft z1 = (l, h + o); top rt z4 = (r, h + o);
+ bot lft z2 = (l, 0); bot rt z3 = (r, 0); bot rt z5 = (r, -d - o);
+ draw z1 -- z2 -- z3; draw z4 -- z5;
+ labels(1,2,3,4,5); set_ic_tr;
+endchar;
+
+%}}} TS
+%{{{ SHCH
+
+
+ma_cy_char("", $$, shch)($$wide_wd# + 2pn_adj#, $$height#, $$tail_dp#)(1,1)
+ if 1/2w <> good.x (1/2w): change_width; fi
+ top lft z1 = (l, h + o); top rt z4 = (r, h + o);
+ bot lft z2 = (l, 0); bot rt z3 = (r, 0); bot rt z5 = (r, -d - o);
+ z6 = 1/2[z1,z4]; z7 = 1/2[z2,z3];
+ draw z1 -- z2 -- z3; draw z4 -- z5; draw z6 -- z7;
+ labels(1,2,3,4,5,6,7); set_ic_tr;
+endchar;
+
+%}}} SHCH
+%{{{ SH
+
+
+ma_cy_char("", $$, sh)($$wide_wd# + 2pn_adj#, $$height#, 0v#)(1,1)
+ if 1/2w <> good.x (1/2w): change_width; fi
+ top lft z1 = (l, h + o); top rt z4 = (r, h + o);
+ bot lft z2 = (l, 0); bot rt z3 = (r, 0);
+ z6 = 1/2[z1,z4]; z7 = 1/2[z2,z3];
+ draw z1 -- z2 -- z3 -- z4; draw z6 -- z7;
+ labels(1,2,3,4,6,7); set_ic_tr;
+endchar;
+
+%}}} SH
+%{{{ DZ-hook
+
+ma_cy_char("Macedonian", $$, dz_hook)
+ ($$medium_wd# + 2pn_adj#, $$height#, $$tail_dp#)(1,1)
+ if 1/2w <> good.x (1/2w): change_width; fi
+ top lft z1 = (l, h + o); top rt z4 = (r, h + o);
+ bot lft z2 = (l, 0); bot rt z3 = (r, 0);
+ z5 = (1/2[l,r], 0); bot z6 = (1/2[l,r], -d - o);
+ draw z1 -- z2 -- z3 -- z4; draw z5 -- z6;
+ labels(1,2,3,4,5,6); set_ic_tr;
+endchar;
+
+%}}} DZ-hook
+%{{{ I
+
+ma_cy_char("", $$, i)($$medium_wd#, $$height#, 0pt#)(1,1)
+ top lft z1l = (l, h + o); top rt z1r = (r, h + o);
+ bot lft z2l = (l, 0 - o); bot rt z2r = (r, 0 - o);
+ z1join = z2l + whatever * ne; x1join = x1r;
+ draw z1l -- z2l -- z1join; draw z1r -- z2r;
+ set_ic_tr; labels(1l,1r,2l,2r,1join);
+endchar;
+
+%}}} I
+%{{{ P
+
+ma_cy_char("", $$, p)($$medium_wd#, $$height#, 0pt#)(1,1);
+ bot lft z1 = (l, 0 - o); top lft z2 = (l , h);
+ top rt z3 = (r, h); bot rt z4 = (r, 0 - o);
+ draw z1 -- z2 -- z3 -- z4;
+ labels(1,2,3,4); set_ic_tr;
+endchar;
+%}}} P
+%{{{ CH
+
+ma_cy_char("", $$, ch)($$medium_wd#, $$height#, 0pt#)(1/2,1);
+ top rt z1r = (r, h + o); bot rt z2r = (r, -o);
+ top lft z1l = (l, h + o); x2l = x1l;
+ bot y3l = 1/3h; % bottom tangent of bowl
+ bot rt z4l = (r, bot y3l + 0.5v); % where it joins stem
+ z3l = z2l + whatever * se; % make circular curve
+ x3l = 0.55[x1l, x1r];
+ draw z1l --- z2l{down} ... z3l{right} ... z4l;
+ draw z1r -- z2r;
+ labels(1l, 2l, 3l, 4l, 1r, 2r); set_ic_tr;
+endchar;
+
+%}}} CH
+%{{{ T
+
+% This is one that looks different in Kursiv
+ma_cy_char("", $$, t)($$medium_wd#, $$height#, 0pt#)(1/3,1/3);
+ if 1/2w <> good.x (1/2w): change_width; fi
+ top lft z1t = (l, h); top rt z2t = (r, h);
+ z1s = 1/2[z1t, z2t]; bot z2s = (x1s, 0 - o);
+ draw z1t -- z2t; draw z1s -- z2s;
+ set_ic_tr; labels(1t, 2t, 1s, 2s);
+endchar;
+
+%}}} T
+%{{{ YE/E-acute
+
+ma_cy_char("Ukranian", $$, ye)
+ (4/5$$height# * hratio + 2pn_adj#, $$height#, 0pt#)(1/3, 1/2);
+ draw_C.c(l, h, r, -d) 1/16;
+ z1bar = z3c; y2bar = y1bar; rt x2bar = 0.9[x3c, x1c];
+ draw z1bar -- z2bar;
+ set_ic 0.95h#;
+remember;
+similarly(code.cy$$E_acute)
+ "Cyrillic " & $$case & " E-acute";
+ currentpicture := currentpicture reflectedabout
+ ((1/2w,0), (1/2w,h)); % this effectively transposes the sidebearings
+wug;
+endchar;
+
+%}}} YE/E-acute
+%{{{ Hard/Soft/Y
+
+ma_cy_char("", $$, soft_sign)
+ ($$medium_wd# + 2pn_adj#, $$height#, 0pt#)(1, 1/2);
+ cy_loop(l, r);
+endchar;
+
+ma_cy_char("", $$, hard_sign)
+ ($$medium_wd# + 2u# + 2pn_adj#, $$height#, 0pt#)(1/3, 1/2);
+ cy_loop(l + 2u, r);
+ lft z0 = (l, y1);
+ draw z0 -- z1;
+endchar;
+
+ma_cy_char("", $$, y)
+ ($$medium_wd# + u# + pn.wd# + 2pn_adj#, $$height#, 0pt#)(1, 1);
+ cy_loop(l, r - u - pn.wd);
+ top rt z1r = (r, h + o); bot rt z2r = (r, 0 - o);
+ draw z1r -- z2r; labels(1r, 2r); set_ic_tr;
+endchar;
+
+%}}} Hard/Soft/Y
+%{{{ Z
+
+ma_cy_char("",$$,z)($$narrow_wd#, $$height#, 0pt#)(1/2,1/2);
+ lft x1 = lft x8 = l; rt x6 = r;
+ top y2 = h + o; bot y7 = -d - o;
+ x2 = x7 = 0.45[x1, x6]; % top & bot tangents
+ y5 = y4 = good.y (0.55[y7, y2]); % height of join
+ y3 = 1/2[y2,y4]; y6 = 1/2[y4, y7];
+ y1 = y2 - 1/16h; y8 = y7 + 1/16h;
+ x4 = x2 + 1v; lft x5 = 0.2[x1, x6];
+ x3 = good.x (x6 - 1/2u);
+ draw z1 ... z2{right} ... z3{down} ... z4 -- z5
+ -- z4 ... z6{down} ... z7{left} .. z8;
+ labels(1,2,3,4,5,6,7,8); set_ic 0.85$$height#;
+endchar;
+
+%}}} Z
+%{{{ Macedonian NJ
+
+ma_cy_char("Macedonian", $$, nj)($$wide_wd#, $$height#, 0pt#)(1,1/2);
+ top lft z1l = (l, h + o); bot lft z2l = (l, 0 - o);% left stem
+ cy_loop.loop(lft 1/2[l,r], r);
+ z.join = (x1l, y6loop);
+ draw z1l -- z2l; draw z.join -- z6loop;
+ labels(1l, 2l, join);
+endchar;
+
+%}}} Macedonian NJ
+endfor
+
+%}}} macy.mf
+
+
+%Local variables:
+%fold-folded-p: t
+%End:
+
diff --git a/fonts/malvern/source/maeenc.mf b/fonts/malvern/source/maeenc.mf
new file mode 100644
index 0000000000..91c0fb5a32
--- /dev/null
+++ b/fonts/malvern/source/maeenc.mf
@@ -0,0 +1,79 @@
+% maeenc.mf 1.2.0 1994/10/11 -- Malvern composite letters encoding
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "maeenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Encoding definition for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ maeenc.mf
+
+% This file is in a bit of a mess -- needs an overhaul.
+% I haven't bothered because I have no particular use for
+% this font.
+
+tmp := 0;
+def def_composite(suffix @#)text t =
+ forsuffixes $$ = t:
+ code.cap.@#.$$ = tmp;
+ code.lc.@#.$$ = tmp + 32;
+ code.mc.@#.$$ = tmp + 128;
+ code.sc.@#.$$ = tmp + 128 + 32;
+ tmp := tmp + 1; if tmp = 32:tmp := 64; fi
+ endfor
+enddef;
+
+co_only := true;
+
+%code.mcap.A = 0;
+code.lc.a= code.a = 64;
+%code.A = 128;
+%code.scap.A = 128 + 64;
+
+%code.offset.LC = 32;
+%code.offset.MC = 32 + 128;
+%code.offset.SC = 32 + 128 + 64;
+
+def_composite(a) acute, grave, circumflex, tilde, ring, breve, twodots;
+def_composite(c) acute, circumflex, hook, cedilla;
+def_composite(d) hook, bar;
+def_composite(e) acute, grave, circumflex, hook, twodots;
+def_composite(g) circumflex, breve;
+def_composite(h) circumflex;
+def_composite(i) acute, grave, circumflex, dot, breve, twodots;
+def_composite(j) circumflex;
+def_composite(l) acute, hook;
+def_composite(n) acute, tilde, hook;
+def_composite(o) acute, grave, circumflex, tilde, hungarian, twodots, cdot;
+def_composite(r) acute, hook;
+def_composite(s) acute, circumflex, hook, cedilla;
+def_composite(t) hook, cedilla;
+def_composite(u) acute, grave, circumflex, ring, breve, hungarian, twodots;
+def_composite(w) circumflex;
+def_composite(y) acute, circumflex, twodots, macron;
+def_composite(z) acute, hook, dot;
+def_composite() ij;
+
+font_coding_scheme "Malvern D " & maversion;
+
+%}}}
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/maencode.mf b/fonts/malvern/source/maencode.mf
new file mode 100644
index 0000000000..0860ad6c66
--- /dev/null
+++ b/fonts/malvern/source/maencode.mf
@@ -0,0 +1,68 @@
+% maencode.mf 1.2.0 94/10/11 -- Malvern Encoding
+% Copyright 1991, 1992, 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "maencode.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Get the right encoding definition for the Malvern
+%%% font family.",
+%%% dependencies = "ma*enc.mf",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ maencode.mf 1.2.0 1994/10/11
+
+% If it is important to distinguish different versions of the Malvern
+% encoding, append the Malvern package version number, e.g., Malvern A 1.0.
+
+% 19 S TeX text (like CMR12)
+% 26 AZ TxT Text, old-stye figures
+% 1 A letters, digits, punctuation, usual symbols
+% 2 B symbols & dingbats & sup figs.
+% 3 C Cyrillic
+% 4 E just composite letters
+% 7 G greek
+
+vardef meta primary s = 128 + byte s enddef;
+
+boolean co_only; co_only := false;
+
+if unknown encoding: encoding := 19; fi
+if encoding = 1:
+ input maaenc
+elseif encoding = 2:
+ input mabenc
+elseif encoding = 3:
+ input macenc
+elseif encoding = 5:
+ input maeenc
+elseif encoding = 7:
+ input magenc
+elseif (encoding = 19) or (encoding = 26):
+ input masenc
+fi
+
+if new_mf:
+ if known code.frac_slash: boundarychar := code.frac_slash;
+ elseif known code.cwm: boundarychar := code.cwm;
+ else: boundarychar := 127;
+ fi
+fi
+
+%}}} maencode.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/mafigs.mf b/fonts/malvern/source/mafigs.mf
new file mode 100644
index 0000000000..a256f78150
--- /dev/null
+++ b/fonts/malvern/source/mafigs.mf
@@ -0,0 +1,230 @@
+% mafigs.mf 1.2.0 1994/10/11 -- program file for figures
+% Copyright 1991, 1992, 1993 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "mafigs.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% This file is read in more than once in order to create several sets
+% of figures: old-style (`text'), ranging, and maybe superior (superscript)
+% and inferior (subscript). To do this several parameters set in
+% ma.mf must be set correctly.
+
+%{{{ mafigs.mf
+%{{{ macro to start each character with
+
+% So that each program can generate `superior' figures as well as
+% text and ranging figures, they refer to |fig_b| instead of |-d|.
+% For text figures this is set to |-d|. For others it must be set
+% before the |input mafigs| command.
+
+string type_of_figs;
+type_of_figs :=
+ if text_figs: "old style"
+ elseif fig_b > 0: "superior" % footnotes etc.
+ elseif fig_b < 0: "inferior"
+ else: "ranging" % fixed width and height
+ fi;
+
+if (fig_b > 0) or (fig_ht# < x_ht#) and unknown sfig_pn:
+ small_figs := true;
+ pickup pencircle xscaled sfig.pn.wd yscaled sfig.pn.ht;
+ fig_pn := savepen;
+fi
+
+def ma_fig(expr num)(expr w_sh, h_sh, d_sh) =
+ type_of_figs & " figure " & char(ASCII"0" + num);
+ ma_char(fig_offset + num,
+ if text_figs: w_sh, h_sh, d_sh
+ else: fig_wd#, fig_ht#, fig_dp# fi)
+ (1,1);
+ if text_figs: fig_b := -d; fi
+ if known fig_pn: pickup fig_pn; fi
+enddef;
+%}}}
+
+def hsuper(suffix f, t) =
+ z.f
+ ... (1/sqrt2)[(x.f, y.t), (x.t, y.f)]{z.t - z.f}
+ ... z.t
+enddef;
+
+def vsuper(suffix f, t) =
+ z.f
+ ... (1/sqrt2)[(x.t, y.f), (x.f, y.t)]{z.t - z.f}
+ ... z.t
+enddef;
+
+if testing: endinput; fi
+
+%{{{ 1
+
+% - pdc Mon. 25 Feb. 1991
+
+ma_fig(1, 4u#, x_ht#, 0v#);
+ top z1 = (hround (1/2w + 1/2u), h + o); bot z2 = (x1, fig_b - o);
+ z0 = z1 + whatever*ne; x0 = x1 - 2u;
+ draw z0 -- z1 -- z2;
+ labels(0,1,2); set_ic_tr;
+endchar;
+%}}}
+%{{{ 0
+
+ma_fig(0, 8u#, x_ht#, 0v#);
+ top z1 = (1/2[l,r], h + o); bot z4 = (x1, fig_b - o);
+ lft x2 = lft x3 = l; rt x0 = rt x5 = r;
+ if x0 - x2 < y1 - y4:
+ y2 = y0 = 2/3[1/2[fig_b, h] + eps, y1 - 1/2(x0 - x2)];
+ y3 = y5 = 2/3[1/2[fig_b, h] - eps, y4 + 1/2(x0 - x2)];
+ draw vsuper(0,1) & hsuper(1,2) --- vsuper(3,4) & hsuper(4,5) --- cycle;
+ else:
+ y2 = y0 = 1/2[y4, y1];
+ draw superellipse(z0, z1, z2, z4)(1/sqrt2);
+ fi
+ labels(1, 2, 3, 4, 5, 0); set_ic_tr;
+endchar;
+
+%}}}
+%{{{ 3 & 5
+
+def draw_fivthree =
+ rt z4 = (r, 1/2[y3,y5]);
+ bot z5 = (0.55[r,l], fig_b - o);
+ bot lft z6 = (l, good.y (fig_b - o + 1/2v));
+ draw z1 -- z2 -- z3 ... hsuper(3',4){down} & vsuper(4,5){left}
+ & hsuper(5,6);
+ labels(1,2,3,3',4,5,6)
+enddef;
+
+ma_fig(5, 7.25u#, x_ht#, desc_dp#);
+ top rt z1 = (good.x 0.8[l,r], h);
+ top lft z2 = (good.x 0.1[l,r], h);
+ top y3 + if r - l > 5u: 1/4v else: 1/8v fi = top y3'
+ = if text_figs: 0.708[fig_b,h] else: 2/3[fig_b,h] fi;
+ x3 = x2; x3' = x5;
+ draw_fivthree;
+endchar;
+
+ma_fig(3, 7.25u#, x_ht#, desc_dp#);
+ top lft z1 = (0.05[l,r], h); top rt z2 = (good.x 0.875[l,r], h);
+ top y3 if r - l > 6u: + 1/6v fi = top y3'
+ = if text_figs: 0.683[fig_b,h] else: 2/3[fig_b,h] fi;
+ x3 = max(1/6[l,r] + 1/2pn.wd, min(0.35[l,r], x2 - (y2 - y3)));
+ x3' = x5;
+ draw_fivthree;
+endchar;
+
+%}}}
+%{{{ 7
+ma_fig(7, 6.5u#, x_ht#, desc_dp#);
+ draw bot rt (l,h) -- bot lft (r, h) -- top (good.x 1/3[l,r], fig_b - o);
+endchar;
+%}}}
+%{{{ 4
+
+ma_fig(4, 7u#, x_ht#, 2/3desc_dp#)
+ top y1 = h + o; x1 = good.x 1/3[l,r];
+ bot y2 = bot y3 = if text_figs: 0 else: 1/4[fig_b, h] fi;
+ lft x2 = l; rt x3 = r;
+ draw z1 -- z2 -- z3;
+ x4 = x5 = good.x 1/3[r,l];
+ top y4 = 2/3[fig_b, h];
+ bot y5 = fig_b - o;
+ draw z4 -- z5;
+ labels(1,2,3,4,5);
+endchar;
+%}}}
+%{{{ 2
+
+ma_fig(2, 6u#, x_ht#, 0v#);
+ lft x1 = l; top y2 = top y1 + if text_figs: 1.25v else: 1.5v fi = h + o;
+ rt x3 = rt x7 = r; lft x6 = l; bot y6 = bot y7 = fig_b;
+
+ x2 = x4 = 0.55[r,l];
+ y3 = if text_figs: 2/3 else: 0.75 fi [y6, y2];
+ y4 = 0.55[y6, y3]; %% if text_figs: 3/8 else: 2/5 fi [y6, y2];
+ z5 = z6 + 1/2pn.ht * up;
+ draw z1 ... hsuper(2,3)
+ ... z4 ... z5
+ ... {(z6 - z4) yscaled 8} z6 -- z7;
+ labels(1,2,3,4,5,6,7);
+endchar;
+
+%}}}
+%{{{ 8
+
+ma_fig(8, 8u#, fig_ht#, 0v#);
+ bot z3bot = (1/2[l,r], fig_b - o);
+ lft x2bot = l - ho; rt x0bot = r + ho;
+ x1bot = x3bot = x1top = x3top = 1/2[x2top, x0top];
+ y2top = y0top = 1/2[y3top, y1top];
+ y2bot = y0bot = 1/2[y3bot, y1bot]; top y1top = h + o;
+ y1bot = y3top = max(0.55[y3bot, y1top],
+ min(2/3[y3bot, y1top], y3bot + (x0bot - x2bot)));
+ x2top = max(rt 1/16[l,r], 1/2[l,r] -
+ 1/2(y1top - y3top) * max(1, (x0bot - x2bot)/(y1bot - y3bot)));
+ draw superellipse(z0bot, z1bot, z2bot, z3bot)(1/sqrt2);
+ draw superellipse(z0top, z1top, z2top, z3top)(1/sqrt2);
+endchar;
+
+%}}}
+%{{{ 69
+
+% pdc Wed. 27 Feb. 1991
+% tails fixed pdc Tue. 23 Apr. 1991
+
+ma_fig(6, 8u#, fig_ht#, 0v#);
+ lft x2 = l; rt x0 = r + ho; bot y3 = fig_b - o;
+ y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2];
+ top z2tail = (1/2[l,r], h + o);
+ y1 = max(0.55[y3, y2tail], min(3/4[y3, y2tail], y3 + (x0 - x2)));
+ draw superellipse(z0, z1, z2, z3)(1/sqrt2);
+
+ % try to guess the point on bowl where tail connects:
+ numeric theta;
+ theta = angle(y1 - y0, (y2tail - y0) +-+ (y1 - y0));
+ z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 90)
+ xscaled ((x0 - x2)/(y1 - y3)));
+ draw z1tail -- z2tail;
+ labels(0, 1, 2, 3, 1tail, 2tail);
+endchar;
+
+ma_fig(9, 8u#, x_ht#, desc_dp#);
+ lft x2 = l; rt x0 = r + ho; top y1 = h + o;
+ y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2];
+ bot z2tail = (1/2[l,r], fig_b - o);
+ y3 = min(0.55[y1, y2tail], max(3/4[y1, y2tail], y1 - (x0 - x2)));
+ draw superellipse(z0, z1, z2, z3)(1/sqrt2);
+
+ % try to guess the point on bowl where tail connects:
+ numeric theta;
+ theta = angle(y1 - y0, (y0 - y2tail) +-+ (y1 - y0));
+ z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 270)
+ xscaled ((x0 - x2)/(y1 - y3)));
+ draw z1tail -- z2tail;
+ labels(0, 1, 2, 3, 1tail, 2tail);
+endchar;
+%}}}
+%}}}
+
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/magenc.mf b/fonts/malvern/source/magenc.mf
new file mode 100644
index 0000000000..a6a1b5eb6c
--- /dev/null
+++ b/fonts/malvern/source/magenc.mf
@@ -0,0 +1,384 @@
+% magenc.mf 1.2.0 1994/10/11 -- Malvern G (greek)
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "magenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Greek encoding definition for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ magenc.mf
+
+numeric c; c = -1;
+vardef next_code =
+ c := c + 1;
+ if c = 32: c := hex"80"; fi
+ c
+enddef;
+
+%{{{ capitals
+
+code.gr.cap.alpha = ASCII"A";
+code.gr.cap.beta = ASCII"B";
+code.gr.cap.sigma1 = ASCII"C"; % lunate sigma
+code.gr.cap.delta = ASCII"D";
+code.gr.cap.epsilon = ASCII"E";
+code.gr.cap.phi = ASCII"F";
+code.gr.cap.gamma = ASCII"G";
+code.gr.cap.eta = ASCII"H";
+code.gr.cap.iota = ASCII"I";
+code.gr.cap.theta = ASCII"J";
+code.gr.cap.kappa = ASCII"K";
+code.gr.cap.lambda = ASCII"L";
+code.gr.cap.mu = ASCII"M";
+code.gr.cap.nu = ASCII"N";
+code.gr.cap.omicron = ASCII"O";
+code.gr.cap.pi = ASCII"P";
+code.gr.cap.chi = ASCII"Q";
+code.gr.cap.rho = ASCII"R";
+code.gr.cap.sigma = ASCII"S";
+code.gr.cap.tau = ASCII"T";
+code.gr.cap.upsilon = ASCII"U";
+code.gr.cap.digamma = ASCII"V"; % obselete
+code.gr.cap.omega = ASCII"W";
+code.gr.cap.xi = ASCII"X";
+code.gr.cap.psi = ASCII"Y";
+code.gr.cap.zeta = ASCII"Z";
+
+%code.gr.cap.upsilon1 = 91;
+%code.gr.cap.koppa = 92;
+%code.gr.cap.xi1 = 93;
+
+%}}} capitals
+%{{{ lower case
+
+% Transliteration as per Yannis's
+
+% alpha beta gamma delta epsilon zeta eta theta iota kappa mu nu
+% a b g d e z h j i k m n
+% xi omicron pi rho sigma final-sigma tau upsilon phi chi psi omega
+% x o p r s c t u f q y w
+
+% also: koppa digamma lunate-sigma sampi stimga
+% 92/124 v 91/123 64/96
+
+% code.gr.lc.sampi = 96; % obselete letter
+
+code.gr.lc.alpha = ASCII"a";
+code.gr.lc.beta = ASCII"b";
+code.gr.lc.sigma1 = ASCII"c"; % lunate sigma
+code.gr.lc.delta = ASCII"d";
+code.gr.lc.epsilon = ASCII"e";
+code.gr.lc.phi = ASCII"f";
+code.gr.lc.gamma = ASCII"g";
+code.gr.lc.eta = ASCII"h";
+code.gr.lc.iota = ASCII"i";
+code.gr.lc.theta = ASCII"j";
+code.gr.lc.kappa = ASCII"k";
+code.gr.lc.lambda = ASCII"l";
+code.gr.lc.mu = ASCII"m";
+code.gr.lc.nu = ASCII"n";
+code.gr.lc.omicron = ASCII"o";
+code.gr.lc.pi = ASCII"p";
+code.gr.lc.chi = ASCII"q";
+code.gr.lc.rho = ASCII"r";
+code.gr.lc.sigma = ASCII"s"; % medial sigma ($\sigma$)
+code.gr.lc.tau = ASCII"t";
+code.gr.lc.upsilon = ASCII"u";
+code.gr.lc.digamma = ASCII"v"; % obselete letter
+code.gr.lc.omega = ASCII"w";
+code.gr.lc.xi = ASCII"x";
+code.gr.lc.psi = ASCII"y";
+code.gr.lc.zeta = ASCII"z";
+
+code.gr.lc.final_sigma = 127; % $\varsigma$
+code.gr.lc.phi1 = 92;
+
+%code.gr.lc.koppa = 124; % obselete letter
+%code.gr.lc.epsilon1 = 125;
+%code.gr.lc.theta1 = 127;
+%code.gr.lc.rho1 = 94;
+%code.gr.lc.pi1 = 95;
+
+%}}} lower case
+%{{{ punctuation etc.
+
+code.exclam = ASCII"!";
+code.colon = ASCII":"; % two dots
+code.gr.colon = ASCII";"; % raised dot
+code.gr.question = ASCII"?"; % looks like ;
+code.full_stop = ASCII".";
+code.comma = ASCII",";
+code.hyphen = ASCII"-";
+
+code.zero = ASCII"0";
+code.percent = ASCII"%";
+code.plus_sign = ASCII"+";
+code.asterisk7 = ASCII"*";
+code.equals = ASCII"=";
+code.paren.left = ASCII"(";
+code.paren.right = ASCII")";
+code.brack.left = ASCII"[";
+code.brack.right = ASCII"]";
+code.slash = ASCII"/";
+code.guillemet.left = ASCII"{";
+code.guillemet.right = ASCII"}";
+
+code.cwm = ASCII" "; % same effect as end of word
+code.null = ASCII"@"; % supresses effect of being at end of word
+
+forsuffixes $ = apostrophe, en_dash, em_dash:
+ code.$ = next_code;
+endfor
+
+%}}} punctuation
+%{{{ marks
+
+code.gr.accent = next_code;
+code.gr.breve = next_code;
+code.gr.macron = next_code;
+
+code.gr.acute = ASCII"'";
+code.gr.grave = ASCII"`";
+code.gr.circumflex = ASCII"~";
+code.gr.asp = ASCII"<";
+code.gr.len = ASCII">";
+code.gr.di = 34;
+code.gr.iota_sub = ASCII"|";
+
+forsuffixes $ = asp, len, di:
+ forsuffixes @ = acute, grave, circumflex:
+ code.gr.$.@ = next_code;
+ endfor
+endfor
+
+code.gr.di.accent = next_code;
+
+if false:
+
+code.gr.iota_sub = 0; % iota subscript
+code.gr.lc.alpha.iota_sub = 1;
+code.gr.lc.eta.iota_sub = 2;
+code.gr.lc.omega.iota_sub = 3;
+
+code.gr.acute = 9;
+code.gr.grave = 10;
+code.gr.circumflex = 11;
+code.gr.tilde = 12;
+code.gr.accent = 13; % the new universal accent
+
+code.gr.asp = 14;
+code.gr.asp.acute = 15;
+code.gr.asp.grave = 16;
+code.gr.asp.circumflex = 17;
+code.gr.asp.tilde = 18;
+code.gr.breve = 19; % instead of asp.accent, which does not occur
+
+code.gr.len = 20;
+code.gr.len.acute = 21;
+code.gr.len.grave = 22;
+code.gr.len.circumflex = 23;
+code.gr.len.tilde = 24;
+code.gr.macron = 25; % instead of len.accent
+
+code.gr.di = 26;
+code.gr.di.acute = 27;
+code.gr.di.grave = 28;
+code.gr.di.circumflex = 29;
+code.gr.di.tilde = 30;
+code.gr.di.accent = 31;
+
+fi
+
+%}}} marks
+%{{{ composites
+
+if c + 1 < hex"10": c := hex"10" - 1; fi
+
+forsuffixes $ = alpha, eta, omega:
+ code.gr.lc.$.iota_sub = next_code;
+endfor
+
+forsuffixes # = asp, len:
+ code.gr.lc.rho.# = next_code;
+endfor
+
+forsuffixes $$ = cap, lc:
+ forsuffixes $ = sigma, zeta, psi, xi:
+ code.gr.$$.$.breve = next_code;
+ endfor
+endfor
+
+%if c + 1 < hex"80": c := hex"80" - 1; fi
+
+forsuffixes $ = alpha, alpha.iota_sub, epsilon, eta, eta.iota_sub,
+ iota, omicron, upsilon, omega, omega.iota_sub:
+ forsuffixes @ = accent, acute, grave, circumflex:
+ code.gr.lc.$.@ = next_code;
+ endfor
+ forsuffixes # = asp, len:
+ forsuffixes @ = , acute, grave, circumflex:
+ code.gr.lc.$.#.@ = next_code;
+ endfor
+ endfor
+endfor
+
+forsuffixes $ = iota, upsilon:
+ forsuffixes @ = , accent, acute, grave, circumflex:
+ code.gr.lc.$.di.@ = next_code;
+ endfor
+endfor
+
+if false:
+% These codes are from Levy's fonts.
+
+code.gr.lc.alpha.grave = hex"80";
+code.gr.lc.alpha.asp = hex"81";
+code.gr.lc.alpha.len = hex"82";
+
+code.gr.lc.alpha.iota_sub.grave = hex"84";
+code.gr.lc.alpha.iota_sub.asp = hex"85";
+code.gr.lc.alpha.iota_sub.len = hex"86";
+
+code.gr.lc.alpha.acute = hex"88";
+code.gr.lc.alpha.asp.acute = hex"89";
+code.gr.lc.alpha.len.acute = hex"8A";
+
+code.gr.lc.alpha.iota_sub.acute = hex"8C";
+code.gr.lc.alpha.iota_sub.asp.acute = hex"8D";
+code.gr.lc.alpha.iota_sub.len.acute = hex"8E";
+
+code.gr.lc.alpha.circumflex = hex"90";
+code.gr.lc.alpha.asp.circumflex = hex"91";
+code.gr.lc.alpha.len.circumflex = hex"92";
+
+code.gr.lc.alpha.iota_sub.circumflex = hex"94";
+code.gr.lc.alpha.iota_sub.asp.circumflex = hex"95";
+code.gr.lc.alpha.iota_sub.len.circumflex = hex"96";
+
+code.gr.lc.eta.grave = hex"98";
+code.gr.lc.eta.asp = hex"99";
+code.gr.lc.eta.len = hex"9A";
+
+code.gr.lc.eta.iota_sub.grave = hex"9C";
+code.gr.lc.eta.iota_sub.asp = hex"9D";
+code.gr.lc.eta.iota_sub.len = hex"9E";
+
+code.gr.lc.eta.acute = hex"A0";
+code.gr.lc.eta.asp.acute = hex"A1";
+code.gr.lc.eta.len.acute = hex"A2";
+
+code.gr.lc.eta.iota_sub.acute = hex"A4";
+code.gr.lc.eta.iota_sub.asp.acute = hex"A5";
+code.gr.lc.eta.iota_sub.len.acute = hex"A6";
+
+code.gr.lc.eta.circumflex = hex"A8";
+code.gr.lc.eta.asp.circumflex = hex"A9";
+code.gr.lc.eta.len.circumflex = hex"AA";
+
+code.gr.lc.eta.iota_sub.circumflex = hex"AC";
+code.gr.lc.eta.iota_sub.asp.circumflex = hex"AD";
+code.gr.lc.eta.iota_sub.len.circumflex = hex"AE";
+
+code.gr.lc.omega.grave = hex"B0";
+code.gr.lc.omega.asp = hex"B1";
+code.gr.lc.omega.len = hex"B2";
+
+code.gr.lc.omega.iota_sub.grave = hex"B4";
+code.gr.lc.omega.iota_sub.asp = hex"B5";
+code.gr.lc.omega.iota_sub.len = hex"B6";
+
+code.gr.lc.omega.acute = hex"B8";
+code.gr.lc.omega.asp.acute = hex"B9";
+code.gr.lc.omega.len.acute = hex"BA";
+
+code.gr.lc.omega.iota_sub.acute = hex"BC";
+code.gr.lc.omega.iota_sub.asp.acute = hex"BD";
+code.gr.lc.omega.iota_sub.len.acute = hex"BE";
+
+code.gr.lc.omega.circumflex = hex"C0";
+code.gr.lc.omega.asp.circumflex = hex"C1";
+code.gr.lc.omega.len.circumflex = hex"C2";
+
+code.gr.lc.omega.iota_sub.circumflex = hex"C4";
+code.gr.lc.omega.iota_sub.asp.circumflex = hex"C5";
+code.gr.lc.omega.iota_sub.len.circumflex = hex"C6";
+
+code.gr.lc.iota.grave = hex"C8";
+code.gr.lc.iota.asp = hex"C9";
+code.gr.lc.iota.len = hex"CA";
+
+code.gr.lc.upsilon.grave = hex"CC";
+code.gr.lc.upsilon.asp = hex"CD";
+code.gr.lc.upsilon.len = hex"CE";
+
+code.gr.lc.iota.acute = hex"D0";
+code.gr.lc.iota.asp.acute = hex"D1";
+code.gr.lc.iota.len.acute = hex"D2";
+
+code.gr.lc.upsilon.acute = hex"D4";
+code.gr.lc.upsilon.asp.acute = hex"D5";
+code.gr.lc.upsilon.len.acute = hex"D6";
+
+code.gr.lc.iota.circumflex = hex"D8";
+code.gr.lc.iota.asp.circumflex = hex"D9";
+code.gr.lc.iota.len.circumflex = hex"DA";
+
+code.gr.lc.upsilon.circumflex = hex"DC";
+code.gr.lc.upsilon.asp.circumflex = hex"DD";
+code.gr.lc.upsilon.len.circumflex = hex"DE";
+
+code.gr.lc.epsilon.grave = hex"E0";
+code.gr.lc.epsilon.asp = hex"E1";
+code.gr.lc.epsilon.len = hex"E2";
+
+code.gr.lc.omicron.grave = hex"E4";
+code.gr.lc.omicron.asp = hex"E5";
+code.gr.lc.omicron.len = hex"E6";
+
+code.gr.lc.epsilon.acute = hex"E8";
+code.gr.lc.epsilon.asp.acute = hex"E9";
+code.gr.lc.epsilon.len.acute = hex"EA";
+
+code.gr.lc.omicron.acute = hex"EC";
+code.gr.lc.omicron.asp.acute = hex"ED";
+code.gr.lc.omicron.len.acute = hex"EE";
+
+code.gr.lc.iota.di = hex"F0";
+code.gr.lc.iota.di.grave = hex"F1";
+code.gr.lc.iota.di.acute = hex"F2";
+code.gr.lc.iota.di.circumflex = hex"F3";
+code.gr.lc.upsilon.di = hex"F4";
+code.gr.lc.upsilon.di.grave = hex"F5";
+code.gr.lc.upsilon.di.acute = hex"F6";
+code.gr.lc.upsilon.di.circumflex = hex"F7";
+
+code.gr.lc.rho.asp = hex"FB";
+code.gr.lc.rho.len = hex"FC";
+
+fi
+
+%}}} composites
+
+font_coding_scheme "Malvern G " & maversion;
+
+%}}} Malvern G
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/maglcaps.mf b/fonts/malvern/source/maglcaps.mf
new file mode 100644
index 0000000000..5e403264a0
--- /dev/null
+++ b/fonts/malvern/source/maglcaps.mf
@@ -0,0 +1,293 @@
+% maglcaps.mf 1.2.0 94/10/11 -- caps common to Greek and Latin
+% Copyright 1992-4 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "maglcaps.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Greek/Latin cap. character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ maglcaps.mf
+
+set_cap_widths;
+
+if capmode = 1:
+ vardef subst@# suffix $ =
+ if unknown code.cap$: code.cap$ := code.gr.cap@#; fi
+ enddef;
+
+ subst alpha (a);
+ subst beta (b);
+ subst chi (x);
+ subst epsilon (e);
+ subst eta (h);
+ subst iota (i);
+ subst kappa (k);
+ subst mu (m);
+ subst nu (n);
+ subst omicron (o);
+ subst rho (p);
+ subst tau (t);
+ subst zeta (z);
+fi
+
+if testing: endinput fi
+
+%{{{ N
+
+iff known capcode.n: "Capital Nu";
+ma_cap(capcode.n, medium_wd# + 2pn_adj#)(1,1);
+ box_points; set_ic_tr;
+ y1 = y.t + o - (x.r - x.l);
+ if y1 < y.b: y1 := y.b; fi
+ draw_box_l_o; draw_box_r_o;
+ draw (x.l, y.t + o) -- (x.r, y1);
+if not no_co:
+remember;
+ some_cap_marks(0.5[l,r]) N;
+fi
+endchar;
+
+%}}}
+%{{{ H
+
+iff known capcode.h: "Capital Eta";
+ma_cap(capcode.h, medium_wd# + 2pn_adj#)(1,1);
+ box_points; draw_box_l_o; draw_box_r_o; draw_box_m; set_ic_tr;
+if not no_co:
+remember;
+ some_cap_marks(0.5[l,r]) H;
+fi
+endchar;
+
+%}}}
+%{{{ Z
+
+iff known capcode.z: "Capital Zeta";
+ma_cap(capcode.z, medium_wd# + 2pn_adj#)(1/2,1/2);
+ box_points; set_ic_tr;
+ draw (good.x 1/24[x.l, x.r], y.t)
+ -- (good.x 1/24[x.r, x.l], y.t) -- (x.l, y.b) -- (x.r, y.b);
+if not no_co:
+remember;
+ some_cap_marks(0.5[l,r]) Z;
+similarly(code.co.Z.dot); "Cap. Z with dot above";
+ charht := mark_t#;
+ draw_dot_mark.dot(0.5[l,r], mark_b, dot_wd, mark_ht);
+wug;
+fi
+endchar;
+
+%}}}
+%{{{ E
+
+iff known capcode.e: "Capital Epsilon";
+ma_cap(capcode.e, narrow_wd# + pn_adj#)(1, 1/2);
+ rt x1 = rt x4 = r; lft x2 = lft x3 = lft x1bar = l;
+ top y1 = top y2 = h; bot y3 = bot y4 = 0;
+ y1bar = y2bar = 0.52h; x2bar = 4/5[l,r];
+ draw z1 -- z2 -- z3 -- z4;
+ draw z1bar -- z2bar;
+ labels(1,2,3,4, 1bar, 2bar);
+ set_ic_tr;
+remember;
+some_cap_marks(0.475[l,r]) E;
+endchar;
+
+%}}}
+%{{{ A
+
+iff known capcode.a: "Capital Alpha";
+ma_cap(capcode.a, wide_wd# + 3pn_adj#)(1/3,1/3);
+ A_body(true, false);
+remember;
+if not no_co:
+ some_cap_marks(0.5[l,r]) A;
+similarly(code.cap.a.ring); "Cap. A with ring";
+ if cap_mark_t - h > 4v:
+ draw_clear_ring.ring(1/2[l,r], 1/2[h, cap_mark_t] - 3/2v - eps, 3u, 3v);
+ elseif cap_mark_t - h > 3.5v:
+ draw_clear_ring.ring(1/2[l,r], h + 1/2v, 3u, 3v);
+ else:
+ draw_joined_ring.ring(1/2[l,r], h, 3u, min(3v, cap_mark_t - h + pn.ht - o));
+ fi
+ charht := cap_mark_t#;
+wug;
+fi
+endchar;
+
+%}}}
+%{{{ T
+
+iff known capcode.t: "Capital Tau";
+ma_cap(capcode.t,medium_wd# + 2pn_adj#)(0,0);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ lft x1 = w - rt x2 = l - eps; x3 = x4 = 1/2[x1,x2];
+ top y1 = top y2 = top y3 = h; bot y4 = -d - o;
+ draw z1 -- z2; draw z3 -- z4;
+ labels(1,2,3,4); set_ic_tr;
+remember;
+if not no_co:
+ some_cap_marks(0.5[l,r]) T;
+fi
+similarly(code.cap.t.cedilla); "cap T with cedilla";
+ chardp := Cedilla_ht#; charht := cap_ht#;
+ draw_cedilla.cedilla(1/2[l,r], 0, Cedilla_wd, Cedilla_ht);
+wug;
+endchar;
+
+%}}}
+%{{{ O
+
+iff known capcode.o: "Captial Omicron (O)";
+ma_char(capcode.o, O_wd#, height#, 0v#)(O_sp, O_sp);
+ draw_O; set_ic_O;
+if not no_co:
+remember;
+ some_cap_marks(0.5[l,r]) O;
+fi
+endchar;
+
+%}}}
+%{{{ I
+
+iff known capcode.i: "Capital Iota (I)";
+ma_char(capcode.i, pn.wd#, height#, 0pt#)(1,1);
+ if 1/2w <> good.x (1/2w): change_width; fi
+ draw (1/2w, bot h + o) -- (1/2w, top -d - o); set_ic_tr;
+endchar;
+
+if not no_co:
+%{{{ composite letters based on I
+
+def do_marked_I(expr code, mark_width_sharp)(text MARK_PROC) text CODA =
+ iff known code:
+ ma_char(code, max(pn.wd#, mark_width_sharp - sp#), mark_t#, 0v#)(1,1);
+ if good.x (1/2[l,r]) <> 1/2[l,r]: change_width; fi
+ draw (1/2[l,r], bot (vround height#*vppp)) -- (1/2[l,r], top (0 - o));
+ MARK_PROC(1/2[l,r], mark_b,
+ mark_width_sharp * hppp, mark_ht) CODA;
+ set_ic_tr;
+ endchar;
+enddef;
+
+do_marked_I(code.cap.i.acute, max(2pn.wd#, (mark_t# - mark_b#)*hratio))
+ (draw_acute_grave) false;
+do_marked_I(code.cap.i.grave, max(2pn.wd#, (mark_t# - mark_b#)*hratio))
+ (draw_acute_grave) true;
+do_marked_I(code.cap.i.twodots, 2dot_wd# + sp#)
+ (draw_twodots);
+do_marked_I(code.cap.i.circumflex,
+ max(3pn.wd#, (mark_t# - mark_b#)*hratio - pn.wd#))
+ (draw_circumflex) false;
+do_marked_I(code.cap.i.breve,
+ max(3pn.wd#, (mark_t# - mark_b#)*hratio - pn.wd#))
+ (draw_breve);
+do_marked_I(code.cap.i.dot, dot_wd#)(draw_dot_mark);
+
+%}}} composite letters based on I
+fi
+
+%}}}
+
+if co_only: endinput; fi
+
+%{{{ B, P
+
+iff known capcode.b: "Capital Beta";
+ma_cap(capcode.b,max(2pn_wd# + 3u#, narrow_wd# + pn_adj#))(1,0.6);
+ numeric mid; mid = good.y (0.55[-d, h]);
+ D_stem;
+ D_bowl.top(h, bot mid, hround 0.9[l,r]);
+ D_bowl.bot(top mid, -d, r);
+ set_ic 0.9h#; charic := max(0, charic - 0.1(r# - l#));
+endchar;
+
+iff known capcode.p: "Capital Rho";
+ma_cap(capcode.p, max(2pn_wd# + 3u#, narrow_wd# + pn_adj#))(1,1/2);
+ P_stem; D_bowl.bowl(h, hround bot 0.45[-d, h], r); set_ic 0.9h#;
+endchar;
+
+%}}}
+%{{{ K
+
+iff known capcode.k: "Capital Kappa";
+ma_cap(capcode.k, medium_wd# + pn_adj#)(1,1/2);
+ box_points;
+ z1top = (1/18[x.r, x.l],y.t + o);
+ z2top = z1top + whatever*(hratio, 1); x2top = x.l;
+ z1bot = (x.r, y.b - o);
+ z2bot = whatever[z1top, z2top] = z1bot + whatever*(-hratio, 1);
+ draw_box_l_o; draw z1top -- z2top; draw z1bot -- z2bot;
+ labels(1top, 2top, 1bot, 2bot); set_ic_tr;
+endchar;
+%}}}
+%{{{ M
+
+if known capcode.m:
+
+def do_variant_M(expr code) =
+ ma_cap(code, wide_wd# + 3pn_adj#)(1,1);
+ if 1/2w <> hround 1/2w: change_width; fi
+ box_points;
+ z1 = (x.l, y.t + o); z3 = (x.r, y.t + o);
+ x2 = 1/2[x1, x3]; y2 = 1/2[-d, h];
+ draw z1 -- z2 -- z3; draw_box_l_o; draw_box_r_o;
+ labels(1,2,3); set_ic_tr;
+ endchar
+enddef;
+
+def do_M(expr code) =
+ ma_char(code, width# + 2pn_adj#, height#, 0pt#)(3/4,3/4);
+ if 1/2w <> apex.x 1/2w: change_width; fi
+ lft x1 = w - rt x5 = l; bot y1 = bot y5 = -d -o;
+ top y2 = top y4 = h;
+ x3 = 1/2[l, r]; y3 = 0.1[y1, y2];
+ x2 = w - x4 = x1 + floor(1/18(r - l));
+ draw z1 -- apex_path2 -- vpex_path3 -- apex_path4 -- z5;
+ labels(1,2,3,4,5); set_ic_tr;
+ endchar
+enddef;
+
+if (width# < 7.5pt#):
+ do_variant_M(capcode.m);
+ if known code.cap.m1: "variant cap. M";
+ do_M(code.cap.m1);
+ fi
+else:
+ do_M(capcode.m);
+ if known code.cap.m1: "variant cap. M";
+ do_variant_M(code.cap.m1);
+ fi
+fi
+
+fi
+
+%}}} M
+%{{{ X
+iff known capcode.x: "Capital Chi";
+ma_cap(capcode.x, medium_wd# + 2pn_adj#)(1/2,1/2);
+ draw_X 1/16; set_ic_tr;
+endchar;
+%}}} X
+
+%}}} maglcaps.mf
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/magrcaps.mf b/fonts/malvern/source/magrcaps.mf
new file mode 100644
index 0000000000..b0aeb84484
--- /dev/null
+++ b/fonts/malvern/source/magrcaps.mf
@@ -0,0 +1,219 @@
+% magrcaps.mf 1.2.0 1994/10/11 -- caps in greek and not latin
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "magrcaps.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Greek cap. character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ magrcaps.mf
+
+set_cap_widths;
+
+if testing: endinput fi
+
+"Greep capital Gamma"; do_EFL(code.gr.cap.gamma, true, 0, 0, false);
+%{{{ Delta, Lambda
+
+"Greek capital Delta";
+ma_cap(code.gr.cap.delta, wide_wd# + 3pn_adj#)(1/3,1/3);
+ A_body(false, true);
+endchar;
+
+"Greek capital Lambda";
+ma_cap(code.gr.cap.lambda, wide_wd# + 3pn_adj#)(1/3,1/3);
+ A_body(false, false);
+endchar;
+
+%}}}
+%{{{ Theta, Koppa
+
+"Greek Capital Theta";
+ma_char(code.gr.cap.theta, O_wd#, height#, 0v#)(O_sp, O_sp);
+ draw_O;
+ y1bar = y2bar = good.y 0.505h;
+ lft x1bar = w - rt x2bar = max(1/5[l,r], rt x2 + 1/2u);
+ draw z1bar -- z2bar;
+ labels(1bar, 2bar);
+ set_ic_O;
+endchar;
+
+iff known code.gr.cap.koppa: "Greek Capital Koppa";
+ma_char(code.gr.cap.koppa, O_wd#, height#, desc_dp#)(O_sp, O_sp);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ draw_O; set_ic_O;
+ z1stroke = good.top (1/2w, 1/3h);
+ bot y2stroke = -d; x2stroke = x1stroke;
+ draw z1stroke -- z2stroke;
+ labels(1stroke, 2stroke);
+endchar;
+
+%}}}
+%{{{ Xi
+
+iff known code.gr.cap.xi1: "eccentric Greek capital Xi";
+ma_cap(code.gr.cap.xi1, medium_wd# + 2pn_adj#)(1/2,1/2);
+ lft x1 = lft x5 = w - rt x2 = w - rt x6 = l;
+ top y1 = top y2 = h; bot y5 = bot y6 = -d;
+ y3 = y4 = good.y 0.55[-d, h];
+ lft x3 = w - rt x4 = max(lft x1 + 1/2u, 1/5[l,r]);
+ draw z1 -- z2 -- bot z2
+ -- top z3 -- z3 -- z4 -- bot z4
+ -- top z5 -- z5 -- z6;
+ labels(range 1 thru 6); set_ic_tr;
+endchar;
+
+iff known code.gr.cap.xi: "Greek capital Xi";
+ma_cap(code.gr.cap.xi, medium_wd# + 2pn_adj#)(1/2,1/2);
+ lft x1 = lft x5 = w - rt x2 = w - rt x6 = l;
+ top y1 = top y2 = h; bot y5 = bot y6 = -d;
+ y3 = y4 = good.y 0.55[-d, h];
+ lft x3 = w - rt x4 = max(lft x1 + 1/2u, 1/5[l,r]);
+ draw z1 -- z2;
+ draw z3 -- z4;
+ draw z5 -- z6;
+ labels(range 1 thru 6); set_ic_tr;
+endchar;
+
+%}}}
+%{{{ Pi
+
+ma_cap(code.gr.cap.pi, medium_wd# + 2pn_adj#)(1,1);
+ lft x1 = lft x2 = w - rt x3 = w - rt x4 = l;
+ top y2 = top y3 = h; bot y1 = bot y4 = -d - o;
+ draw z1 -- z2 -- z3 -- z4;
+ set_ic_tr;
+ labels(1,2,3,4);
+endchar;
+
+%}}}
+%{{{ Sigma
+
+ma_cap(code.gr.cap.sigma, medium_wd# + 2pn_adj#)(1/3,1/2);
+ rt x1 = rt x5 = r; lft x2 = lft x4 = l;
+ top y1 = top y2 = h; bot y4 = bot y5 = -d;
+ y3 = 0.54[y4, y2]; x3 = good.x 0.7[x2, x1];
+ draw z1 -- z2 -- bot z2 -- z3 -- top z4 -- z4 -- z5;
+ labels(1, 2, 3, 4, 5);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ Upsilon
+
+iff known code.gr.cap.upsilon:
+ma_cap(code.gr.cap.upsilon, medium_wd# + 2pn_adj#)(1/2,1/2);
+ draw_Y(0.55[-d, h]); set_ic_tr;
+endchar;
+
+iff known code.gr.cap.upsilon1:
+ma_cap(code.gr.cap.upsilon1, medium_wd# + 2pn_adj#)(1/3,1/3);
+ if 1/2w <> good.x (1/2w): change_width; fi
+ x2stem = x1stem = 1/2w;
+ bot y2stem = d - o; y1stem = 0.475[-d, h];
+ lft x1arm = l; top y2arm = h;
+ y1arm = bot y2arm; x2arm = rt x1arm;
+ y3arm = y1arm; lft x3arm = rt x2arm;
+ path p; p = z1arm ... z2arm ... z3arm{z1stem - z2arm} ... z1stem;
+ draw p; draw p reflectedabout(z1stem, z2stem);
+ draw z1stem -- z2stem;
+ labels(1stem, 2stem, 1arm, 2arm); set_ic_tr;
+endchar;
+
+%}}}
+%{{{ Phi, Psi
+
+def PhiPsi(expr pp) =
+ if 0.5w <> good.x 0.5w: change_width; fi
+ top z1stem = (1/2w, h + o); bot z2stem = (1/2w, -d - o);
+ top y1a = top y1b = bot y3a + 8v = bot y3b + 8v
+ = vround (1/2[-d, h] + 4v);
+ x1a = x3a = lft x1stem; x1b = x3b = rt x1stem;
+ lft x2a = w - rt x2b = l; y2a = y2b = 1/2[y1a, y3a];
+ forsuffixes $ = a,b:
+ draw
+ if pp: z1${(x2$ - x1$, 0)}
+ ... (1/sqrt2)[(x1$, y2$), (x2$, y1$)]{z2$ - z1$}
+ else: (x2$, y1$)
+ fi
+ ... z2${down}
+ ... (1/sqrt2)[(x3$, y2$), (x2$, y3$)]{z3$ - z2$}
+ ... z3${(x3$ - x2$, 0)};
+ endfor;
+ draw z1stem -- z2stem;
+ labels(1stem, 2stem);
+enddef;
+
+"Greek capital Phi"; ma_cap(code.gr.cap.phi, 8u# + pn.wd#)(1/2, 1/2); PhiPsi(true); endchar;
+"Greek capital Psi"; ma_cap(code.gr.cap.psi, 6u# + 3pn.wd#)(1/2, 1/2); PhiPsi(false); endchar;
+%}}}
+%{{{ Omega
+
+% 6
+% 5 7
+% 4 8
+%
+% 3 9
+% 1 2 10 11
+
+"Greek Capital Omega";
+ma_char(code.gr.cap.omega, O_wd#, height#, 0v#)(O_sp, O_sp);
+ lft x1 = w - rt x11 = lft x4 = w - rt x8 = l;
+ bot y1 = bot y2 = bot y10 = bot y11 = -d; top y6 = h + o;
+ x6 = 1/2[l,r];
+ rt x2 = w - lft x10 = hround min(1/2w - 1/2u, 1/3[l,r]);
+ y4 = y8 = 0.52[top y2, y6];
+ numeric super; super = 1/sqrt2;
+ z5 = super[(x6, y4), (x4, y6)]; z7 = super[(x6, y8), (x8, y6)];
+ x3 = x5; x9 = x7;
+ 1/2[y3, y5] = 1/2[y9, y7] = y4;
+ draw z1 -- z2 --- top z2
+ ... z3{z6 - z8} ... z4 ... z5{z6 - z4} ... z6 ... z7{z8 - z6} ... z8
+ ... z9{z4 - z6} ... top z10 --- z10 -- z11;
+ labels(range 1 thru 11);
+ set_ic_O;
+endchar;
+
+
+%}}}
+%{{{ Digamma/Wau
+
+if known code.gr.cap.digamma:
+ do_EFL(code.gr.cap.digamma, true, 0, 5/6, false);
+fi
+
+%}}} Digamma
+%{{{ Lunate Sigma
+
+iff known code.gr.cap.sigma1: "Capital Greek lunate Sigma";
+ma_cap(code.gr.cap.sigma1, medium_wd# + pn_adj#)(1/2,1/3);
+ draw_C(l, h, r, -d) 0; set_ic_tr;
+endchar;
+
+%}}} Lunate Sigma
+
+greek_names := 1;
+input maglcaps
+
+%}}} magrcaps.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
+
diff --git a/fonts/malvern/source/magrlc.mf b/fonts/malvern/source/magrlc.mf
new file mode 100644
index 0000000000..1cbf8b19c0
--- /dev/null
+++ b/fonts/malvern/source/magrlc.mf
@@ -0,0 +1,846 @@
+% magrlc.mf 1.2.0 1994/10/11 -- lowercase greek letters
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "magrlc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Lower case Greek character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ magrlc.mf
+%{{{ macros to start characters
+
+def grlc_char(suffix $$) =
+ iff known code.gr.lc$$: "Greek lower case " & str $$;
+ ma_char(code.gr.lc$$)
+enddef;
+
+def grlc_variant(suffix $$) =
+ iff known code.gr.lc$$1: "variant Greek lower case " & str $$;
+ ma_char(code.gr.lc$$1)
+enddef;
+
+% standalone marks:
+def gr_mk(suffix $$) =
+ iff known code.gr$$: str $$ & " mark for Greek letters";
+ ma_char(code.gr$$)(8u#, body_ht#, 0pt#)(0,0);
+enddef;
+
+%}}} start characters
+%{{{ ad hoc parameters
+
+numeric gr_mk_bot; gr_mk_bot = vround (x_ht + v);
+numeric gr_low_mk_bot; gr_low_mk_bot = vround (x_ht + 1/2v);
+numeric gr_mk_top; gr_mk_top = vround (body_ht);
+
+%}}} ad hoc parameters
+%{{{ add marks
+
+def gr_maybe_many_marks(suffix $)(expr anchorx) =
+ gr_maybe_many_marks_(code.gr.lc.$, anchorx)
+enddef;
+
+def gr_maybe_many_marks_(suffix $$)(expr anchorx) =
+ remember;
+ similarly($$.len);
+ "Greek lc " & str $$ & " len mark";
+ charht := body_ht#;
+ gr_breathing.len(anchorx - 1.5u, gr_mk_top,
+ anchorx + u, gr_mk_bot) true;
+ wug;
+ similarly($$.asp);
+ "Greek lc " & str $$ & " asp mark";
+ charht := body_ht#;
+ gr_breathing.asp(anchorx - 1u, gr_mk_top,
+ anchorx + 1.5u, gr_mk_bot) false;
+ wug;
+ similarly($$.di);
+ "Greek lc " & str $$ & " di mark";
+ charht := body_ht#;
+ gr_draw_twodots.di(2u + dot_wd, gr_mk_bot);
+ wug;
+ similarly($$.acute);
+ "Greek lc " & str $$ & " acute mark";
+ charht := body_ht#;
+ 1/2[x1acute, x2acute] = anchorx; gr_draw_ag.acute true;
+ wug;
+ similarly($$.di.acute);
+ "Greek lc " & str $$ & " di.acute mark";
+ charht := body_ht#;
+ x2di.acute.a = anchorx; gr_draw_ag.di.acute.a true;
+ gr_draw_twodots.di.acute.d(5u, gr_mk_bot);
+ wug;
+ similarly($$.len.acute);
+ "Greek lc " & str $$ & " len.acute mark";
+ charht := body_ht#;
+ gr_breathing.len.acute.b(anchorx - 2.75u, gr_mk_top,
+ anchorx - 1/4u, gr_mk_bot) true;
+ lft x2len.acute.a = anchorx + 1/4u; gr_draw_ag.len.acute.a true;
+ wug;
+ similarly($$.asp.acute);
+ "Greek lc " & str $$ & " asp.acute mark";
+ charht := body_ht#;
+ gr_breathing.asp.acute.b(anchorx - 2.5u, gr_mk_top,
+ anchorx, gr_mk_bot) false;
+ lft x2asp.acute.a = anchorx; gr_draw_ag.asp.acute.a true;
+ wug;
+ similarly($$.grave);
+ "Greek lc " & str $$ & " grave mark";
+ charht := body_ht#;
+ 1/2[x1grave, x2grave] = anchorx; gr_draw_ag.grave false;
+ wug;
+ similarly($$.di.grave);
+ "Greek lc " & str $$ & " di.grave mark";
+ charht := body_ht#;
+ x2di.grave.a = anchorx; gr_draw_ag.di.grave.a false;
+ gr_draw_twodots.di.grave.d(5u, gr_mk_bot);
+ wug;
+ similarly($$.len.grave);
+ "Greek lc " & str $$ & " len.grave mark";
+ charht := body_ht#;
+ gr_breathing.len.grave.b(anchorx - 3.5u, gr_mk_top,
+ anchorx - u, gr_mk_bot) true;
+ lft x2len.grave.a = anchorx; gr_draw_ag.len.grave.a false;
+ wug;
+ similarly($$.asp.grave);
+ "Greek lc " & str $$ & " asp.grave mark";
+ charht := body_ht#;
+ gr_breathing.asp.grave.b(anchorx - 4u, gr_mk_top,
+ anchorx - 1.5u, gr_mk_bot) false;
+ lft x2asp.grave.a = anchorx; gr_draw_ag.asp.grave.a false;
+ wug;
+ similarly($$.circumflex);
+ "Greek lc " & str $$ & " circumflex mark";
+ charht := body_ht#;
+ gr_circ.circumflex(anchorx - 2u, gr_mk_bot, anchorx + 2u, gr_mk_top - v);
+ wug;
+ similarly($$.di.circumflex);
+ "Greek lc " & str $$ & " di.circumflex mark";
+ charht := body_ht#;
+ gr_circ.di.circumflex.a(anchorx - 2u, gr_mk_bot + 1v, anchorx + 2u, gr_mk_top);
+ gr_draw_twodots.di.circumflex.d(u + dot_wd, gr_low_mk_bot);
+ wug;
+ similarly($$.len.circumflex);
+ "Greek lc " & str $$ & " len.circumflex mark";
+ charht := body_ht#;
+ gr_circ.len.circumflex.a(anchorx - 2u, gr_mk_bot + 1.25v,
+ anchorx + 2u, gr_mk_top);
+ gr_breathing.len.circumflex.b(anchorx - 1u, gr_mk_top - 1.25v,
+ anchorx + 1u, gr_low_mk_bot) true;
+ wug;
+ similarly($$.asp.circumflex);
+ "Greek lc " & str $$ & " asp.circumflex mark";
+ charht := body_ht#;
+ gr_circ.asp.circumflex.a(anchorx - 2u, gr_mk_bot + 1.25v,
+ anchorx + 2u, gr_mk_top);
+ gr_breathing.asp.circumflex.b(anchorx - 1u, gr_mk_top - 1.25v,
+ anchorx + 1u, gr_low_mk_bot) false;
+ wug;
+ similarly($$.tilde);
+ "Greek lc " & str $$ & " tilde mark";
+ charht := body_ht#;
+ gr_tilde.tilde(anchorx - 2.5u, gr_mk_bot, anchorx + 2.5u, gr_mk_top - v);
+ wug;
+ similarly($$.di.tilde);
+ "Greek lc " & str $$ & " di.tilde mark";
+ charht := body_ht#;
+ gr_tilde.di.tilde.a(anchorx - 2.5u, gr_mk_bot + 1.25v,
+ anchorx + 2.5u, gr_mk_top);
+ gr_draw_twodots.di.tilde.d(u + dot_wd, gr_low_mk_bot);
+ wug;
+ similarly($$.len.tilde);
+ "Greek lc " & str $$ & " len.tilde mark";
+ charht := body_ht#;
+ gr_tilde.len.tilde.a(anchorx - 2.5u, gr_mk_bot + 1.5v,
+ anchorx + 2.5u, gr_mk_top);
+ gr_breathing.len.tilde.b(anchorx - 2u, gr_mk_top - 1.25v,
+ anchorx + 0u, gr_low_mk_bot) true;
+ wug;
+ similarly($$.asp.tilde);
+ "Greek lc " & str $$ & " asp.tilde mark";
+ charht := body_ht#;
+ gr_tilde.asp.tilde.a(anchorx - 2.5u, gr_mk_bot + 1.5v,
+ anchorx + 2.5u, gr_mk_top);
+ gr_breathing.asp.tilde.b(anchorx - 1.5u, gr_mk_top - 1.25v,
+ anchorx + 0.5u, gr_low_mk_bot) false;
+ wug;
+ similarly($$.accent);
+ "Greek lc " & str $$ & " accent mark";
+ charht := body_ht#;
+ x1accent = x2accent = good.x anchorx;
+ top y1accent = gr_mk_top; bot y2accent = gr_mk_bot;
+ draw z1accent -- z2accent;
+ labels(1accent, 2accent);
+ wug;
+ similarly($$.di.accent);
+ "Greek lc " & str $$ & " with diaeresis accent mark";
+ charht := body_ht#;
+ draw z1accent -- z2accent;
+ gr_draw_twodots.di.accent.d(5u, gr_mk_bot);
+
+ wug
+enddef;
+
+%}}} magrlc.mf
+
+if testing: endinput fi
+%{{{ standalone marks
+
+co_only := true;
+iff known code.gr.acute:
+ma_char(" ", 8u#, body_ht#, 0pt#)(0,0);
+gr_maybe_many_marks_(code.gr, 1/2w);
+endchar;
+co_only := false;
+
+iff known code.gr.iota_sub:
+ma_char(code.gr.iota_sub, 8u#, 0pt#, desc_dp#)(0,0);
+ gr_iota_sub(0.4w);
+endchar;
+
+%}}} standalone marks
+%{{{ mu
+
+grlc_char(mu)(n_wd#, x_ht#, desc_dp#)(1,1);
+ draw_n_arch(r,l);
+ draw (x1, y2) -- (x1, y4); H_stem.l; set_ic_tr;
+endchar;
+
+%}}} mu
+%{{{ phi
+
+grlc_char(phi)(8u#, asc_ht#, desc_dp#)(o_sp, o_sp);
+ force_symmetry;
+ x0m = x1m = x3m = x4m = 1/2[l,r]; top y0m = h + o; bot y4m = -d - o;
+ x1l = x3l = lft x0m; x1r = x3r = rt x0m; % where loops join
+ top y1l = top y1m = top y1r = x_ht;
+ bot y3l = bot y3m = bot y3r = 0;
+ lft x2l = l; rt x2r = r;
+ y2l = y2r = 1/2[y1l, y3l];
+ forsuffixes $ = l, r:
+ for i = 1, 3:
+ x[i]$2 = (1/sqrt2)[x[i]m, x2$];
+ y[i]$2 = (1/sqrt2)[y2$, y[i]$];
+ endfor
+ endfor
+ draw z0m -- z4m;
+ draw z1l .. z1l2{z2l - z1m} .. z2l .. z3l2{z3m - z2l} .. z3l
+ --- z3r .. z3r2{z2r - z3m} .. z2r .. z1r2{z1m - z2r} .. z1r --- cycle;
+ labels(0m, 1m, 3m, 4m, 1l, 2l, 3l, 1r, 2r, 3r, 1l2, 3l2, 1r2, 3r2);
+endchar;
+
+grlc_variant(phi)(8.5u#, x_ht#, desc_dp#)(o_sp, o_sp);
+ lft x2 = l; bot y3 = 0 - o; rt x4 = r; top y5 = h + o; bot y7 = -d - o;
+ x6 = x7 = 0.5[x2, x4]; x3 = 1/2[x2, x4];
+ y1 = y5; x1 = 0.4[x2, x6]; x5 = 0.4[x6, x4];
+ y2 = y6 = y4 = 0.5[y3, y5];
+ draw z1 .. z2{down} .. z3{right} .. z4{up} .. z5{left} ... z6 --- z7;
+ labels(range 1 thru 7);
+endchar;
+
+%}}} phi
+%{{{ psi
+
+grlc_char(psi)(8u#, asc_ht#, desc_dp#)(o_sp, o_sp);
+ force_symmetry;
+ x1 = x2 = 1/2[l,r]; top y1 = h + o; bot y2 = -d - o;
+ x3l = lft x1; x3r = rt x1;
+ top y1l = top y1r = x_ht; bot y3l = bot y3r = 0;
+ lft x1l = lft x2l = l - eps; rt x1r = rt x2r = r + eps;
+ y2l = y2r = 1/2[y1l, y3l];
+ draw z1 -- z2;
+ draw z1l --- z2l ... z3l --- z3r ... z2r --- z1r;
+ labels(1, 2, 1l, 2l, 3l, 1r, 2r, 3r);
+endchar;
+%}}} psi
+%{{{ lambda
+
+grlc_char(lambda)(7u#, asc_ht#, 0pt#)(1/2,1/2);
+ bot lft z2l = (l, 0 - o); bot rt z2r = (r, 0 - o);
+ z1l = z1r = (1/2[l,r], x_ht); % join straddles x-height
+ top lft z0r = (l + u, h + o);
+ draw z1l -- z2l; draw z0r ... z1r --- z2r;
+ labels(1l, 2l, 0r, 1r, 2r);
+endchar;
+%}}} lambda
+%{{{ theta
+
+grlc_char(theta)(7.5u#, asc_ht#, 0pt#)(2/3,2/3);
+ top z1 = (1/2w, h + o); bot z3 = (1/2w, -d - o);
+ lft z4 = (l, 1/2[-d, h]); rt z2 = (r, 1/2[-d, h]);
+ draw z4 -- z2{down} .. z3 .. z4 .. z1 .. z2{down};
+ labels(1, 2, 3, 4);
+endchar;
+%}}} theta
+%{{{ zeta
+
+grlc_char(zeta)(7u#, asc_ht#, desc_dp#)(1/2,1/2);
+ % curly top:
+ top y1t = top y3t = h + o;
+ lft x1t = hround (0.2[l,r]); rt x3t = hround (0.95[l,r]);
+ x2t = 1/2[x1t, x3t]; y2t = y1t - 1/2v;
+ path p; p = z1t .. z2t .. z3t; draw p;
+ z1 = point 1.75 of p; % stem joins top loop
+ lft x2 = l; y2 = 0.2h; % left tangent of stem
+ bot y3 = bot y4 = 0; % tangent at baseline
+ x3 = 1/3[l,r]; x4 = 2/3[l,r];
+ rt x5 = r; y5 = 1/2[y4, y6]; % tangent at right
+ bot y6 = -d - o; x6 = x4;
+ draw z1 .. tension 1.4 .. z2{down} .. z3 --- z4 ... z5{down} .. z6;
+ labels(1t, 2t, 3t, 1, 2, 3, 4, 5, 6);
+endchar;
+%}}} zeta
+%{{{ beta
+
+grlc_char(beta)(7.5u#, asc_ht#, desc_dp#)(1, 2/3);
+ lft x1 = lft x2 = l; bot y1 = -d - o;
+ top y3 = h + o; rt x6 = r; bot y7 = 0 - o;
+
+ y2 = y4 = 1/2[y5, y3]; x3 = 1/2[x2, x4]; y6 = 1/2[y7, y5];
+
+ y5 = 0.6[y7, y3];
+ x4 = x6 - 1.25u; y8 = y7 + 1/2v;
+ lft x8 = rt x1; x5 = x3 = x7;
+
+ draw z1 --- z2 .. z3 .. z4{down} .. z5
+ & z5 .. z6{down} .. z7{left} .. z8;
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+%}}} beta
+%{{{ gamma
+
+grlc_char(gamma)(8u#, x_ht#, desc_dp#)(1/3, 1/3);
+ if good.x(1/2w) <> 1/2w: change_width; fi
+ top lft z1 = (l, h + o); top rt z3 = (r, h + o);
+ bot z2 = (1/2[l, r], -d - o);
+ z.j = (x2, 0.6[y2, y1]);
+ draw z1 ... z.j{(z.j - z1) yscaled 2};
+ draw z.j{(z3 - z.j) yscaled 2} ... z3;
+ draw z.j -- z2;
+ set_ic_tr;
+endchar;
+%}}} gamma
+%{{{ delta
+
+grlc_char(delta)(8u#, asc_ht#, 0pt#)(o_sp, o_sp);
+ lft x2 = l; rt x4 = r; bot y3 = -d - o; top y6 = h + o;
+ y1 = x_ht;
+ y2 = y4 = 1/2[y3, y1];
+ x1 = x3 = 1/2[x2, x4];
+ x5 = good.x (0.15[x2, x4]); y5 = y6 - v; x6 = x5 + u;
+ x7 = good.x (0.85[x2, x4]); y7 = good.y (0.5[y1, y6]);
+ draw z1{left} .. z2{down} .. z3 .. z4{up} .. z1
+ .. z5 .. {right}z6 ... z7{(z7 - z6) yscaled 1.5};
+endchar;
+%}}} delta
+%{{{ epsilon
+
+% This is the 2-stroke epsilon:
+grlc_variant(epsilon)(6u#, x_ht#, 0pt#)(o_sp, 2/3);
+ top rt z1 = (r, h + o); bot rt z3 = (r, -d - o);
+ lft z2 = (l, good.y (0.5[y3, y1]));
+ x4 = 0.85[x2, x1]; y4 = y2;
+ draw z1{left} .. z2 .. {right}z3; draw z2 -- z4;
+ set_ic_tr; labels(1, 2, 3, 4);
+endchar;
+
+% One-stroke epsilon:
+grlc_char(epsilon)(6u#, x_ht#, 0pt#)(o_sp, 2/3);
+ top y2 = h + o; bot y6 = -d - o;
+ lft x3 = lft x5 = l; rt x1 = rt x7 = r;
+ y5 = 1/2[y4, y6]; y3 = 1/2[y2, y4];
+
+ y4 = y4a = good.y (0.55[y6, y2]); x4 = 0.75[x3, x2]; x4a = 0.6[x3, x1];
+ x2 = x6 = 0.6[x5, x7];
+ y1 = 0.15[y2, y4]; y7 = 0.15[y6, y4];
+
+ draw z1 .. z2{left} .. z3{down} .. z4 --- z4a;
+ draw z7 .. z6{left} .. z5{up} .. z4 --- z4a;
+ labels(1, 2, 3, 4, 5, 6, 7); set_ic_tr;
+gr_maybe_many_marks(epsilon, 0.55[l,r]);
+endchar;
+
+
+%}}} epsilon
+%{{{ iota
+
+grlc_char(iota)(pn.wd#, x_ht#, 0pt#)(1,1);
+ top z1 = (1/2w, h + o);
+ bot z2 = (1/2w, -d - o);
+ draw z1 -- z2; set_ic_tr; labels(1,2);
+gr_maybe_many_marks(iota, x1);
+endchar;
+
+%}}} iota
+%{{{ xi
+
+grlc_char(xi)(7u#, asc_ht#, desc_dp#)(1, 1/2);
+ top y1 = h + o; lft x4 = l; rt x7 = r;
+ bot y5 = bot y6 = 0;
+ bot y8 = -d - o;
+ y7 = 0.45[y6, y8]; y4 = 1/2[y3, y5]; y2 = 0.45[y3, y1];
+ x2 = good.x (x4 + 0.5u);
+ x3 = x5 = 0.5[x4, x7]; x6 = 0.6[x4, x7]; x8 = 0.7[x4, x7];
+ y3 = 0.55[y5, y1]; x1 = good.x (x7 - u); y3a = y3; x3a = 0.4[x3, x1];
+ draw z1{left} .. z2{down} .. z3 --- z3a &
+ z3a --- z3 .. z4{down} .. z5 --- z6 .. z7{down} .. z8;
+ labels(1, 2, 3, 3a, 4, 5, 6, 7, 8); set_ic_tr;
+endchar;
+%}}} xi
+%{{{ kappa
+
+% This is the one-stroke kappa:
+grlc_char(kappa)(8u#, x_ht#, 0pt#)(1/2,1/2);
+ top lft z1 = (l, h + o); top rt z4 = (r, h + o);
+ bot lft z3 = (l, -o); bot rt z6 = (r, -o);
+ y2 = h - y5 = 1/2h; x2 = w - x5 = x1 + u;
+ draw z1 .. z2 .. z3; draw z4 .. z5 .. z6;
+ draw z3 + o * up -- z4 + o * down;
+ labels(1, 2, 3, 4, 5, 6); set_ic_tr;
+endchar;
+%}}} kappa
+%{{{ nu
+
+grlc_char(nu)(7u#, x_ht#, 0pt#)(1/2,1/2);
+ top lft z1 = (l, h + o); top rt z3 = (r, h + o);
+ bot y2 = -d - o; x2 = 0.45[x1, x3];
+ draw z1{(z2 - z1) xscaled 2} .. z2 & z2 .. z3{up};
+ set_ic_tr; labels(1,2,3);
+endchar;
+%}}} nu
+%{{{ pi
+
+% Three-stroke version:
+grlc_char(pi)(8u#, x_ht#, 0pt#)(1,1);
+ top lft z1 = (l, h + o); top rt z2 = (r, h + o);
+ lft x1l = hround (l + 1.5u); x2l = 0.25[x1l, x1];
+ rt x1r = hround (r - 1.5u); rt x3r = r; x2r = 0.15[x1r, x3r];
+ y1l = y1r = y1;
+ bot y2l = bot y3r = -o; y2r = y3r + pn.ht;
+ draw z1 -- z2; draw z1r{down} ... z2r .. z3r{right};
+ draw z1l{down} .. z2l;
+ labels(1, 2, 1l, 2l, 1r, 2r, 3r); set_ic_tr;
+endchar;
+
+%}}} pi
+%{{{ koppa
+
+% This is an obselete letter:
+grlc_char(koppa)(7u#, x_ht#, desc_dp#)(o_sp, o_sp);
+ draw_circle(l, h, r, vround v);
+ bot z4 = (x3, -d - o);
+ draw z3 -- z4;
+ labels(4); set_ic(0.75h#);
+endchar;
+%}}} koppa
+%{{{ rho
+
+grlc_char(rho)(8u#, x_ht#, desc_dp#)(1/2, o_sp);
+ lft x1 = lft x2 = lft x6 = l;
+ top y3 = h + o; rt x4 = r; bot y5 = -o; bot y1 = -d - o;
+ y2 = y4 = 1/2[y3, y5]; x3 = x5 = 1/2[x2, x4];
+ y6 = y5 + 1.5v;
+ draw z1 --- z2 .. z3 .. z4 .. z5{left} .. z6;
+ labels(1, 2, 3, 4, 5, 6); set_ic_o;
+gr_maybe_many_marks(rho, x3);
+endchar;
+
+%}}} rho
+%{{{ sigma
+
+grlc_char(final_sigma)(7u#, x_ht#, desc_dp#)(1/2,1/2);
+ rt x1 = rt x5 = r; top y2 = h + o; lft x3 = l;
+ bot y4 = 0; bot y6 = -d - o;
+ x2 = x4 = 0.55[x3, x1]; y3 = 1/2[y2, y4]; y5 = 1/2[y4, y6];
+ y1 = good.y (y2 - 0.5v); x6 = good.x (0.7[x3, x1]);
+ draw z1 .. z2{left} .. z3{down} .. z4 .. z5{down} .. z6{left};
+ labels(1, 2, 3, 4, 5, 6); set_ic_tr;
+endchar;
+
+% Medial looped sigma
+grlc_char(sigma)(8.5u#, x_ht#, 0pt#)(o_sp, 1/2);
+ top y5 = top y6 = h; bot y3 = -d - o;
+ lft x4 = l; rt x6 = r;
+ y2 = y4 = 1/2[y3, y5]; x3 = x5 = 1/2[x2, x4];
+ rt x2 = hround (l + 8u);
+ x1 = 0.5[x5, x6]; y1 = bot y5;
+ draw z1 .. z2{down} .. z3{left} .. z4{up} .. z5 --- z6;
+ labels(1,2,3,4,5,6); set_ic_tr;
+endchar;
+
+% lunate sigma:
+grlc_variant(sigma)(4.5u# + pn.wd#, x_ht#, 0pt#)(1/2,1/3);
+ draw_C(l, h, r, -d) 0; set_ic_tr;
+endchar;
+
+%}}} sigma
+%{{{ tau
+
+grlc_char(tau)(7u# + pn.wd#, x_ht#, 0pt#)(1/2,1/2);
+ top lft z1 = (l, h); top rt z2 = (r, h); y3 = y1;
+ bot y5 = 0 - o;
+ x3 = 1/2[x1, x2]; % stem joins with bar
+ x4 = good.x (0.45[x1, x2]); % start of curl
+ y4 = 0.24[y5, y3]; % at bot of stem
+ x5 = 0.5[x4, x6]; % bot tangent of curl
+ x6 = 0.8[x1, x2]; % end of curl
+ y6 = y5 + 0.25v;
+ draw z1 -- z2; draw z3 ... z4{down} .. z5{right} .. z6;
+ labels(1, 2, 3, 4, 5, 6); set_ic_tr;
+endchar;
+%}}} tau
+%{{{ upsilon
+
+grlc_char(upsilon)(6u# + 2pn.wd#, x_ht#, 0pt#)(2/3, 2/3);
+ lft x1 = lft x2 = l; bot y3 = -d - o; rt x4 = r;
+ top y1 = top y5 = h + o;
+ y2 = 0.45[y3, y1]; y4 = 0.6[y3, y5]; x3 = 0.5[x2, x4];
+ x5 = x4 - 0.5u;
+ draw z1 --- z2 .. z3{right} .. z4{up} .. z5;
+ labels(1, 2, 3, 4, 5); set_ic(0.9h#);
+gr_maybe_many_marks(upsilon, x3);
+endchar;
+
+%}}} upsilon
+%{{{ digamma
+
+grlc_char(digamma)(5u# + pn.wd#, x_ht#, desc_dp#)(1,1/3);
+ top y1 = top y2 = h; bot y3 = -d - o;
+ lft x2 = lft x1b = lft x3 = l; rt x1 = r;
+ y1b = y2b = good.y (0.575[y3, y2]); x2b = good.x (0.75[x2, x1]);
+ draw z1 -- z2 -- z3; draw z1b -- z2b;
+ labels(1, 2, 3, 1b, 2b); set_ic_tr;
+endchar;
+
+%}}} digamma
+%{{{ chi
+
+grlc_char(chi)(7.5u#, x_ht#, desc_dp#)(1/2,1/2);
+ top y1 = top y3 = h + o; bot y2 = bot y4 = -d - o;
+ lft x4 = l; rt x2 = r;
+ x1 = good.x (x4 + 0.25u); x3 = good.x (x2 - 0.25u);
+ z5 = (z1 -- z2) intersectionpoint (z3 -- z4);
+ draw z1{(z2 - z1) xscaled 2} .. z5 .. z2{(z2 - z1) xscaled 2};
+ draw z3 -- z4;
+ labels(1, 2, 3, 4, 5); set_ic(0.9h#);
+endchar;
+%}}} chi
+%{{{ alpha
+
+def draw_alpha =
+ top rt z1 = (r, h + o); bot rt z5 = (r, 0 - o);
+ lft z3 = (l, 1/2[0, h]); y4 = y1; y2 = y5;
+ y.j = 1/2[y1, y5];
+ x2 = x4 = 0.35[l, r]; x.j = 0.75[x2, x5];
+ draw z1 .. z.j .. z2{left} .. z3{up}
+ .. z4{right} .. z.j .. z5;
+ labels(1, 2, 3, 4, 5, j); set_ic_tr
+enddef;
+
+grlc_char(alpha)(9u#, x_ht#, 0pt#)(o_sp, 1/2);
+ draw_alpha;
+gr_maybe_many_marks(alpha, 0.2[x4, x1]);
+endchar;
+
+grlc_char(alpha.iota_sub)(9u#, x_ht#, desc_dp#)(o_sp, 1/2);
+ draw_alpha;
+ gr_iota_sub.i(0.35[x3, x1]);
+gr_maybe_many_marks(alpha.iota_sub, 0.2[x4, x1]);
+endchar;
+
+%}}} alpha
+%{{{ eta
+
+def draw_eta =
+ draw_n_arch(l,r);
+ draw (x1, y2) -- (x1, y4);
+ x.tail = x4; bot y.tail = -d - o;
+ draw z.tail .. z4{up};
+ set_ic_tr;
+enddef;
+
+grlc_char(eta)(n_wd#, x_ht#, desc_dp#)(1,1);
+ draw_eta;
+gr_maybe_many_marks(eta, x2);
+endchar;
+
+grlc_char(eta.iota_sub)(n_wd#, x_ht#, desc_dp#)(1,1);
+ draw_eta;
+ gr_iota_sub.i(0.35[x1, x3]);
+gr_maybe_many_marks(eta.iota_sub, x2);
+endchar;
+
+%}}} eta
+%{{{ omega
+% This omega is symmetrical:
+
+def draw_omega =
+ if 1/2w <> good.x (1/2w): change_width; fi
+ top y1 = top y7 = h + o; lft x2 = l; bot y3 = bot y5 = 0 - o; rt x6 = r;
+ x4 = x4a = 1/2[x2, x6]; x3 = 1/2[x2, x4]; x5 = 1/2[x4, x6];
+
+ y2 = y6 = 0.5[y3, y1]; y4 = 0.3[y3, y1]; y4a = good.y (0.6[y3, y1]);
+ x1 = w - x7 = 0.2[x2, x4];
+ draw z1 .. z2{down} .. z3{right} .. z4 -- z4a;
+ draw z7 .. z6{down} .. z5{left} .. z4;
+enddef;
+
+grlc_char(omega)(3pn.wd# + 8.5u#, x_ht#, 0pt#)(2/3, 2/3);
+ draw_omega;
+gr_maybe_many_marks(omega, 1/2w);
+endchar;
+
+grlc_char(omega.iota_sub)(3pn.wd# + 8.5u#, x_ht#, desc_dp#)(2/3, 2/3);
+ draw_omega;
+ gr_iota_sub.i(x4);
+gr_maybe_many_marks(omega.iota_sub, 1/2w);
+endchar;
+
+%}}} omega
+%{{{ omicron
+
+iff known code.gr.lc.omicron: "l.c. omicron";
+ma_char(code.gr.lc.omicron, 8u#, x_ht#, 0v#)(o_sp, o_sp);
+ draw_circle(l - ho, h + oo, r + ho, -d - oo);
+ set_ic_o;
+gr_maybe_many_marks(omicron, 1/2w);
+endchar;
+
+%}}} omicron
+
+if false:
+%{{{ marks for Greek letters
+%{{{ no accent
+
+gr_mk(len);
+ gr_breathing(1/2w - 1.5u, h, 1/2w + u, gr_mk_bot) true;
+endchar;
+
+gr_mk(asp);
+ gr_breathing(1/2w - 1u, h, 1/2w + 1.5u, gr_mk_bot) false;
+endchar;
+
+gr_mk(di);
+ gr_draw_twodots.d(2u + dot_wd, gr_mk_bot);
+endchar;
+%}}} no accent
+%{{{ acute
+
+gr_mk(acute);
+ 1/2[x1, x2] = 1/2w; gr_draw_ag true;
+endchar;
+
+gr_mk(di.acute)
+ x2 = 1/2w; gr_draw_ag true; gr_draw_twodots.d(5u, gr_mk_bot);
+endchar;
+
+gr_mk(len.acute);
+ gr_breathing.b(1/2w - 2.75u, h, 1/2w - 1/4u, gr_mk_bot) true;
+ lft x2 = 1/2w + 1/4u; gr_draw_ag true;
+endchar;
+
+gr_mk(asp.acute);
+ gr_breathing.b(1/2w - 2.5u, h, 1/2w, gr_mk_bot) false;
+ lft x2 = 1/2w; gr_draw_ag true;
+endchar;
+%}}} acute
+%{{{ grave
+
+gr_mk(grave)
+ 1/2[x1, x2] = 1/2w; gr_draw_ag false;
+endchar;
+
+gr_mk(di.grave)
+ x2 = 1/2w; gr_draw_ag false; gr_draw_twodots.d(5u, gr_mk_bot);
+endchar;
+
+gr_mk(len.grave);
+ gr_breathing.b(1/2w - 3.5u, h, 1/2w - u, gr_mk_bot) true;
+ lft x2 = 1/2w; gr_draw_ag false;
+endchar;
+
+gr_mk(asp.grave);
+ gr_breathing.b(1/2w - 4u, h, 1/2w - 1.5u, gr_mk_bot) false;
+ lft x2 = 1/2w; gr_draw_ag false;
+endchar;
+%}}} grave
+%{{{ circumflex
+
+gr_mk(circumflex);
+ gr_circ(1/2w - 2u, gr_mk_bot, 1/2w + 2u, h - v);
+endchar;
+
+gr_mk(di.circumflex);
+ gr_circ.a(1/2w - 2u, gr_mk_bot + 1v, 1/2w + 2u, h);
+ gr_draw_twodots.d(u + dot_wd, gr_low_mk_bot);
+endchar;
+
+gr_mk(len.circumflex);
+ gr_circ.a(1/2w - 2u, gr_mk_bot + 1.25v, 1/2w + 2u, h);
+ gr_breathing.b(1/2w - 1u, h - 1.25v, 1/2w + 1u, gr_low_mk_bot) false;
+endchar;
+
+gr_mk(asp.circumflex);
+ gr_circ.a(1/2w - 2u, gr_mk_bot + 1.25v, 1/2w + 2u, h);
+ gr_breathing.b(1/2w - 1u, h - 1.25v, 1/2w + 1u, gr_low_mk_bot) true;
+endchar;
+%}}} circumflex
+%{{{ tilde
+
+gr_mk(tilde);
+ gr_tilde(1/2w - 2.5u, gr_mk_bot, 1/2w + 2.5u, h - v);
+endchar;
+
+gr_mk(di.tilde);
+ gr_tilde.a(1/2w - 2.5u, gr_mk_bot + 1.25v, 1/2w + 2.5u, h);
+ gr_draw_twodots.d(u + dot_wd, gr_low_mk_bot);
+endchar;
+
+gr_mk(len.tilde);
+ gr_tilde.a(1/2w - 2.5u, gr_mk_bot + 1.5v, 1/2w + 2.5u, h);
+ gr_breathing.b(1/2w - 2u, h - 1.25v, 1/2w + 0u, gr_low_mk_bot) false;
+endchar;
+
+gr_mk(asp.tilde);
+ gr_tilde.a(1/2w - 2.5u, gr_mk_bot + 1.5v, 1/2w + 2.5u, h);
+ gr_breathing.b(1/2w - 1.5u, h - 1.25v, 1/2w + 0.5u, gr_low_mk_bot) true;
+endchar;
+%}}} tilde
+%{{{ iota subscript
+
+iff known code.gr.iota_sub:
+ma_char(code.gr.iota_sub, 8u#, 0pt#, desc_dp#)(0,0);
+ gr_iota_sub(0.4w);
+endchar;
+%}}} iota subscript
+%{{{ the new universal accent
+
+gr_mk(accent);
+ x1 = x2 = 1/2w;
+ top y1 = h; bot y2 = gr_mk_bot;
+ draw z1 -- z2;
+ labels(1, 2);
+endchar;
+%}}} the new universal accent
+%}}} magrlc.mf
+fi
+
+if known code.gr.lc.alpha:
+%{{{ ligtable
+
+def startligtable(suffix $$$) =
+ ligtable code.$$$:
+ if string ligs.$$$:
+ scantokens ligs.$$$
+ else:
+ code.null kern 0pt#
+ fi
+enddef;
+
+string ligs.gr.acute;
+ligs.gr.acute = "code.gr.acute =: code.apostrophe"
+ & ", code.cwm =:| code.apostrophe";
+
+startligtable(gr.lc.sigma)
+ forsuffixes $$ = cwm, comma, full_stop, gr.colon, gr.question, exclam:
+ , code$$ =:| code.gr.lc.final_sigma
+ endfor
+ ;
+show boundarychar;
+
+forsuffixes $ = di, len, asp:
+ startligtable(gr.$)
+ forsuffixes # = alpha, alpha.iota_sub, epsilon, eta, eta.iota_sub,
+ iota, omicron, upsilon, omega, omega.iota_sub, rho:
+ if known code.gr.lc.#.$:
+ , code.gr.lc.# =: code.gr.lc.#.$
+ fi
+ endfor
+ forsuffixes @ = acute, grave, circumflex, tilde, accent:
+ if known code.gr.$.@:
+ , code.gr.@ =: code.gr.$.@
+ fi
+ endfor
+ ;
+ forsuffixes @ = acute, grave, circumflex, tilde, accent:
+ if known code.gr.$.@:
+ startligtable(gr.$.@)
+ forsuffixes # = alpha, alpha.iota_sub, epsilon,
+ eta, eta.iota_sub, iota, omicron, upsilon,
+ omega, omega.iota_sub, rho:
+ if known code.gr.lc.#.$.@:
+ , code.gr.lc.# =: code.gr.lc.#.$.@
+ fi
+ endfor
+ ;
+ fi
+ endfor
+endfor
+
+forsuffixes @ = acute, grave, circumflex, tilde, accent:
+ if known code.gr.@:
+ startligtable(gr.@)
+ forsuffixes # = alpha, alpha.iota_sub, epsilon, eta, eta.iota_sub,
+ iota, omicron, upsilon, omega, omega.iota_sub, rho:
+ if known code.gr.lc.#.@:
+ , code.gr.lc.# =: code.gr.lc.#.@
+ fi
+ endfor
+ forsuffixes $ = di, asp, len:
+ if known code.gr.$.@:
+ , code.gr.$ =: code.gr.$.@
+ fi
+ endfor
+ ;
+ fi
+endfor
+
+forsuffixes # = alpha, eta, omega:
+ forsuffixes $ = , len, asp:
+ forsuffixes @ = , accent, acute, grave, circumflex:
+ if known code.gr.lc.#.iota_sub.$.@:
+ startligtable(gr.lc.#.$.@)
+ , code.gr.iota_sub =: code.gr.lc.#.iota_sub.$.@
+ ;
+ fi
+ endfor
+ endfor
+endfor
+
+if known code.en_dash:
+ ligtable code.hyphen: code.hyphen =: code.en_dash;
+ if known code.em_dash:
+ ligtable code.en_dash: code.hyphen =: code.em_dash;
+ fi
+fi
+
+if known code.guillemet.left:
+ ligtable code.paren.left: code.paren.left =: code.guillemet.left;
+ ligtable code.paren.right: code.paren.right =: code.guillemet.right;
+fi
+
+
+%}}} ligtable
+fi
+
+%}}} magrlc.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
+
diff --git a/fonts/malvern/source/makit.mf b/fonts/malvern/source/makit.mf
new file mode 100644
index 0000000000..00b50406d2
--- /dev/null
+++ b/fonts/malvern/source/makit.mf
@@ -0,0 +1,1167 @@
+% makit.mf 1.2.0 94/10/11 -- bits of "kit"
+% Copyright 1991, 1992, 1993 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "makit.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Macro definitions for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ makit.mf
+% See the file COPYING for details.
+
+%{{{ oneof -- check if elt in set
+
+% if oneof(1,5,7)var: ...; fi
+
+def oneof(text t) suffix $ =
+ false
+ for i = t: or ($ = i) endfor
+enddef;
+
+%}}}
+%{{{ |ma_char| -- macro to start/end characters with
+
+% Instead of giving the width of the bounding box and then
+% drawing within it -- as with most font programs -- I make explicit in
+% the character program's header how much space is left on either side
+% of the glyph itself.
+
+% This is used to calculate the usual |w| value, and also |l| and |r|,
+% which are set to be the left and right edges of the glyph. The
+% character programs then set points etc. relative to |l| and |r|
+% rather than |0| and |w|.
+
+def ma_char(expr code, w_sharp, h_sharp, d_sharp, l_sp, r_sp) =
+ beginchar(code_offset + byte code, % matched by endchar
+ if known force_wd#: force_wd# else: w_sharp + (l_sp + r_sp) * sp# fi,
+ h_sharp, d_sharp);
+ h# := charht; l# := l_sp * sp#; r# := charwd - r_sp * sp#;
+ % for italcor calc
+ l := hround (l_sp * sp);
+ if known force_wd#:
+ r := hround (charwd * hppp - r_sp*sp);
+ else:
+ r := l + hround (w_sharp * hppp);
+ fi
+ pickup the_pen;
+enddef;
+%}}}
+%{{{ beginglyph etc. -- new conventions
+
+% New beginglyph acts like beginchar but has no code parameter
+% The code is given to shipglyph or endglyph.
+
+def beginglyph(expr w_sharp, h_sharp, d_sharp) =
+ begingroup % matched by endglyph
+ charcode := -1;
+ charwd := w_sharp; w := hround(charwd * hppp);
+ charht := h_sharp; h := vround(charht * hppp);
+ chardp := d_sharp; d := vround(chardp * hppp);
+ charic := 0; clearxy; clearit; clearpen;
+ glyph_tmp := nullpicture; glyph_set := false;
+ scantokens extra_beginchar;
+ scantokens extra_beginglyph
+enddef;
+
+def endglyph(expr code) =
+ if known code:
+ scantokens extra_endchar; scantokens extra_endglyph;
+ if proofing > 0: makebox(proofrule); fi
+ charcode := code_offset + byte code; chardx := w;
+ shipit;
+ if displaying > 0: makebox(screenrule); showit; fi
+ fi
+ endgroup % matches beginglyph
+enddef;
+
+% Shipglyph may be used between beginglyph and endglyph
+% it ships out the current picture with the goven code
+% and then if this is a composite glyph it restores the base glyph
+% (the picture that was current the first time shipglyph was invoked).
+%
+% thus
+% beginglyph(w,h,d);
+% ...
+% shipglyph(base);
+% ... (draw acute)
+% shipglyph(base.acute)
+% ... (draw grave)
+% shipglyph(base.grave)
+% ... (draw circumflex)
+% endchar(base.circumflex)
+%
+def shipglyph(expr code) =
+ if known code:
+ if not glyph_set: glyph_tmp := currentpicture; fi
+ scantokens extra_endchar; scantokens extra_endglyph;
+ if proofing > 0: makebox(proofrule); fi
+ charcode := code_offset + byte code; chardx := w;
+ shipit;
+ if displaying > 0: makebox(screenrule); showit; fi
+ if glyph_set:
+ currentpicture := glyph_tmp;
+ else:
+ glyph_set := true; % for next time
+ fi
+ fi
+enddef;
+
+string extra_beginglyph, extra_endglyph;
+extra_beginglyph = extra_endglyph = "";
+picture glyph_tmp;
+boolean glyph_set;
+
+def ma_glyph(expr w_sharp, h_sharp, d_sharp, l_sp, r_sp) =
+ beginglyph( % matched by endchar
+ if known force_wd#: force_wd# else: w_sharp + (l_sp + r_sp) * sp# fi,
+ h_sharp, d_sharp);
+ h# := charht; l# := l_sp * sp#; r# := charwd - r_sp * sp#;
+ % for italcor calc
+ l := hround (l_sp * sp);
+ if known force_wd#:
+ r := hround (charwd * hppp - r_sp*sp);
+ else:
+ r := l + hround (w_sharp * hppp);
+ fi
+ pickup the_pen;
+enddef;
+
+%}}}
+%{{{ alter some standard macros to fit with my l,r convention
+
+def force_symmetry =
+ if odd ((r - l) - pn.wd): change_width; fi
+enddef;
+
+def change_width =
+ begingroup save delta; delta = if w>charwd*hppp: -1 else: +1 fi;
+ w := w + delta; r := r + delta;
+ endgroup
+enddef;
+
+def change_depth =
+ begingroup save delta; delta = if d>chardp*hppp: -1 else: +1 fi;
+ d := d + delta;
+ endgroup
+enddef;
+
+def makebox(text rule) =
+ for y = if charht > x_ht#: body_ht, brack_ht, cap_ht, asc_ht, fig_ht, fi
+ x_ht, axis_ht
+ if chardp <> 0: , -desc_dp, -brack_dp, -body_dp fi:
+ rule ((l,y)t_, (r,y)t_);
+ endfor
+ for x = 0, w: rule ((x, h + v)t_, (x, -d - v)t_); endfor % set width
+ rule ((0, 0)t_, (w,0)t_);
+ for x = l step u until r: rule ((x,-d)t_, (x, h)t_); endfor
+ if charic <> 0:
+ rule ((w + charic/pt#*pt, h o_), (w + charic/pt#*pt, 1/2h o_));
+ fi
+enddef;
+%}}}
+%{{{ macros to start l.c. characters with
+
+def lctitle expr s =
+ if (byte s > 96) and (byte s < 123):
+ "lower case " & if string s: s else: "code " & decimal s fi;
+ fi
+enddef;
+
+def x_char(expr code, w_sharp) =
+ lctitle code; ma_char(code, w_sharp, x_ht#, 0v#)
+enddef;
+
+def y_char(expr code, w_sharp) =
+ lctitle code; ma_char(code, w_sharp, x_ht#, desc_dp#)
+enddef;
+
+def b_char(expr code, w_sharp) =
+ lctitle code; ma_char(code, w_sharp, asc_ht#, 0v#)
+enddef;
+
+def b_glyph(expr w_sharp) =
+ ma_glyph(w_sharp, asc_ht#, 0v#)
+enddef;
+%}}}
+%{{{ macros to start cap letters with
+
+def capttl expr code =
+ if string code:
+ if (ASCII code > 64) and (ASCII code < 91):
+ "Capital " & code;
+ fi
+ fi
+enddef;
+
+def ma_cap(expr code, wd_sh) =
+ capttl code; ma_char(code, wd_sh, height#, 0v#)
+enddef;
+
+%}}} macros to start cap letters with
+%{{{ The usual iff macro to skip characters with
+
+% I originally used the more straightforward method of surrounding
+% character programs in if ... fi. But this gets too cluttered,
+% and the indentation gets out of control...
+
+% METAFONTbook p.307
+let semi_=; ; let colon_ = : ; let endchar_ = endchar;
+let endglyph_ = endglyph;
+
+def iff expr b =
+ if b: let next_ = use_it; else: let next_ = lose_it; fi
+ next_
+enddef;
+
+def use_it = let : = restore_colon; enddef;
+def restore_colon = let : = colon_; enddef;
+
+def lose_it =
+ let endchar = fi; let endglyph = fi; let ; = fix_ semi_
+ if false % everything from colon to matching |endchar| deleted
+enddef;
+
+def fix_ =
+ let ; = semi_; let endchar = endchar_; let endglyph = endglyph_;
+enddef;
+
+%}}}
+%{{{ |similarly| -- One character program makes several characters
+
+% Several characters are made by combining one basic glyph (usually a
+% letter) with some sort of mark -- for example, `\'e' is a composite
+% letter made from `e' and `\'{}'.
+
+% The |anotherchar| macro ships out the current charcter and then
+% starts a new character with the same currentpicture, pen, variables
+% etc. |yetanotherchar| reuses the picture from the first char.
+% If the new code is |whatever|, the old code + 1 is used.
+
+
+picture anothercharpicture;
+boolean finishcharp;
+
+def remember =
+ anothercharpicture := currentpicture;
+ save_chardp := chardp; save_charht := charht;
+ finishcharp := not co_only
+enddef;
+
+def similarly(expr newcode) =
+ if known newcode:
+ if finishcharp: finishchar; else: finishcharp := true; fi
+ charcode := code_offset + newcode;
+ chardp := save_chardp; charht := save_charht;
+ scantokens extra_beginchar;
+ currentpicture := anothercharpicture;
+ let next_ = \;
+ let wug = \;
+ else:
+ let next_ = skip_subprog;
+ fi
+ next_
+enddef;
+
+def skip_subprog =
+ let wug = fi; let ; = sim_fix_ semi_
+ if false: % matched by |wug|, whose following |;| becomes |sim_fix_|.
+enddef;
+
+def sim_fix_ =
+ semi_ let ; = semi_; let wug = \;
+enddef;
+
+def finishchar =
+ scantokens extra_endchar;
+ if proofing > 0: makebox(proofrule); fi
+ chardx := w; shipit;
+ if displaying > 0: makebox(screenrule); showit; fi
+enddef;
+
+% beginchar(...)
+% ...
+% remember;
+% similarly(...)
+% ...
+% wug;
+% similarly(...)
+% ...
+% wug;
+% endchar;
+%}}}
+%{{{ italic corrections
+
+def set_ic expr z =
+ italcorr r# + slant*z + 1/2sp# - charwd
+enddef;
+
+def set_icc(expr tx, ty) expr y =
+ charic := max(0, tx + slant*ty + 1/2sp# - charwd,
+ r# + slant*y + 1/2sp# - charwd);
+enddef;
+
+def set_ic_Oo(expr wd, ht) =
+ for theta = angle (1, slant):
+ x# := wd * cosd theta + (r# - wd)
+ + slant * (ht * sind theta + ht);
+ charic := max(0, x# + 1/2sp# - charwd);
+ endfor
+enddef;
+def set_ic_o = set_ic_Oo(4u#, 4v#) enddef;
+def set_ic_O =
+ if hratio >= 0.9:
+ set_ic_Oo(1/2width#, 1/2height#)
+ else:
+ set_ic(11/12h#)
+ fi
+enddef;
+def set_ic_tr = set_ic h# enddef;
+def set_ic_e = set_ic_o enddef;
+%}}}
+%{{{ Circles & arcs
+
+vardef draw_circle@#(expr leftx, topy, rightx, boty) =
+ x1@# = x3@# = 1/2[x0@#, x2@#]; y0@# = y2@# = 1/2[y1@#, y3@#];
+ top y1@# = topy; bot y3@# = boty;
+ rt x0@# = rightx; lft x2@# = leftx;
+ z1a@# = z3b@# = z0@#; z1b@# = z3a@# = z2@#; % for later calculations
+ draw superellipse(z0@#, z1@#, z2@#, z3@#)(1/sqrt2);
+ labels(0@#, 1@#, 2@#, 3@#)
+enddef;
+
+def hvarc(suffix f, t) =
+ z.f
+ ... (1/sqrt2)[(x.f, y.t), (x.t, y.f)]{z.t - z.f}
+ ... z.t
+enddef;
+
+def vharc(suffix f, t) =
+ z.f
+ ... (1/sqrt2)[(x.t, y.f), (x.f, y.t)]{z.t - z.f}
+ ... z.t
+enddef;
+
+%}}}
+%{{{ "box" x.l, x.r, ... for simple boxlike chars
+
+vardef box_points@# =
+ lft x@#l = l; rt x@#r = r;
+ top y@#t = h; bot y@#b = -d;
+ y@#m = good.y (0.55[y@#b,y@#t]);
+enddef;
+
+vardef draw_box_l@# = draw (x.l, y.t) -- (x.l, y.b) enddef;
+vardef draw_box_r@# = draw (x.r, y.t) -- (x.r, y.b) enddef;
+vardef draw_box_l_o@# = draw (x.l, y.t + o) -- (x.l, y.b - o) enddef;
+vardef draw_box_r_o@# = draw (x.r, y.t + o) -- (x.r, y.b - o) enddef;
+vardef draw_box_t@# = draw (x.l, y.t) -- (x.r, y.t) enddef;
+vardef draw_box_m@# = draw (x.l, y.m) -- (x.r, y.m) enddef;
+vardef draw_box_b@# = draw (x.l, y.b) -- (x.r, y.b) enddef;
+vardef draw_box@# =
+ draw (x.l, y.b) -- (x.r, y.b) -- (x.r, y.t) -- (x.l, y.t) -- cycle
+enddef;
+%}}}
+%{{{ apex
+
+vardef apex.x primary x =
+ save trial; trial := hround x;
+ if odd apex_adjust:
+ if trial > x: trial - 1/2 else: trial + 1/2 fi
+ else:
+ trial
+ fi
+enddef;
+
+vardef apex_path@# =
+ x@#a = x@# - 1/2apex_adjust;
+ x@#c = x@# + 1/2apex_adjust;
+ x@#b = 1/2[x@#a, x@#c];
+ y@#a = y@#c = y@#; y@#b = y@# + apex_o;
+ labels(@#a,@#b,@#c);
+ z@#a & z@#a .. z@#b .. z@#c & z@#c
+enddef;
+
+vardef vpex_path@# =
+ x@#a = x@# - 1/2apex_adjust;
+ x@#c = x@# + 1/2apex_adjust;
+ x@#b = 1/2[x@#a, x@#c];
+ y@#a = y@#c = y@#; y@#b = y@# - apex_o;
+ labels(@#a,@#b,@#c);
+ z@#a & z@#a .. z@#b .. z@#c & z@#c
+enddef;
+%}}}
+
+vardef draw_dot@# =
+ fill fullcircle xscaled dot_wd yscaled dot_ht shifted z@#
+enddef;
+
+%{{{ Left stem
+
+vardef left_stem@#(expr to, bo) =
+ lft x@#1 = lft x@#2 = l;
+ top y@#1 = h + to; bot y@#2 = -d - bo;
+ draw z@#1 -- z@#2;
+ labels(@#1, @#2);
+enddef;
+
+vardef D_stem@# = left_stem@#(0,0) enddef;
+vardef P_stem@# = left_stem@#(0,o) enddef;
+vardef H_stem@# = left_stem@#(o,o) enddef;
+%}}}
+%{{{ Macros for symetrical characters:
+
+boolean b;
+
+def leftright = if b: "left " else: "right " fi & enddef;
+def lftrt = if b: lft else: rt fi enddef;
+def rtlft = if b: rt else: lft fi enddef;
+def topbot = if b: top else: bot fi enddef;
+def bottop = if b: bot else: top fi enddef;
+def lr = if b: l else: r fi enddef;
+def rl = if b: r else: l fi enddef;
+def hd = if b: h else: -d fi enddef;
+def dh = if b: -d else: h fi enddef;
+def minmax = if b: min else: max fi enddef;
+def maxmin = if b: max else: min fi enddef;
+def plus = if b: + else: - fi enddef;
+def minus = if b: - else: + fi enddef;
+
+pair ne, se; ne = (hratio, 1); se = (hratio, -1);
+%}}}
+%{{{ Marks
+
+% These have an anchor point and width and height
+% For marks that go above characters, anchor point is optical centre
+% of top of character.
+% For cedilla, it is bottom of character.
+% Width and height are of the mark itself
+
+%{{{ cedilla
+
+def cedilla_pen(expr w, h) =
+ begingroup
+ save ww, hh;
+ hh = min(pn.ht, 0.4h);
+ ww = min(pn.wd, 0.5w);
+ pencircle xscaled ww yscaled hh
+ endgroup
+enddef;
+
+vardef draw_cedilla@#(expr anchorx, anchory, wd, ht) =
+ pickup cedilla_pen(wd, ht);
+ top y1@# = vround anchory; bot y5@# = vround(anchory - ht);
+ y3@# = 0.5[y1@#, y5@#]; x5@# = 0.66[x3@#, x6@#];
+ anchorx = 1/2[x1@#, x3@#];
+ lft x6@# + hround wd = rt x3@#;
+ y6@# = y5@# + 1/2v#;
+ x1@# = 1/2[x6@#, x3@#];
+ draw z1@#{right} ... z3@#{down} ... z5@#{left} ... z6@#;
+ labels(1@#, 2@#, 3@#, 4@#, 5@#, 6@#);
+ pickup the_pen;
+enddef;
+
+%}}} cedilla
+%{{{ ring
+
+% pdc Wed. 30 Oct. 1991
+vardef draw_clear_ring@#(expr anchorx, anchory, wd_, ht_) =
+ numeric wd, ht;
+ % will shrink ring slightly to make it circular:
+ if (wd_ < ht_) and (wd_/ht_ > 0.9):
+ ht = wd = wd_;
+ elseif (ht_ < wd_) and (ht_/wd_ > 0.9):
+ wd = ht = ht_;
+ else:
+ wd = wd_; ht = ht_;
+ fi
+ numeric ring.pn.ht, ring.pn.wd;
+ ring.pn.ht = vround max(1, min(1/3(ht), acc.pn.th));
+ ring.pn.wd = hround max(1, min(1/3wd, acc.pn.th));
+ pickup pencircle xscaled ring.pn.wd yscaled ring.pn.ht;
+ top y1@# = vround (anchory + ht);
+ bot y3@# = vround (anchory);
+ lft x2@# = hround (anchorx - 1/2wd - eps);
+ rt x4@# = hround (anchorx + 1/2wd + eps);
+ x1@# = x3@# = 1/2[x2@#, x4@#]; y2@# = y4@# = 1/2[y1@#, y3@#];
+ draw superellipse(z4@#, z1@#, z2@#, z3@#,
+ (max(0, weight - 1))[1/sqrt2, 0.8]);
+ labels(1@#, 2@#, 3@#, 4@#);
+ pickup the_pen;
+enddef;
+
+
+% A ring that connects to the top of the character!
+% pdc Fri. 1 Nov. 1991
+vardef draw_joined_ring@#(expr anchorx, anchory, wd_, ht_) =
+ numeric lap; lap = pn.ht - o;
+ numeric wd, ht;
+ % will shrink ring slightly to make it circular:
+ if (wd_ < ht_ ) and (wd_/(ht_ + lap) > 0.9):
+ ht + lap = wd = wd_;
+ elseif (ht_ < wd_) and (ht_/wd_ > 0.9):
+ wd = ht= ht_;
+ else:
+ wd = wd_; ht = ht_;
+ fi
+ numeric ring.pn.ht, ring.pn.wd;
+ ring.pn.ht = vround max(1, min(1/3ht, acc.pn.th));
+ ring.pn.wd = hround max(1, min(1/3wd, acc.pn.th));
+ pickup pencircle xscaled ring.pn.wd yscaled ring.pn.ht;
+ top y1@# = vround (anchory + ht - lap);
+ bot y3@# = vround (anchory - lap);
+ lft x2@# = hround (anchorx - 1/2wd - eps);
+ rt x4@# = hround (anchorx + 1/2wd + eps);
+ x1@# = x3@# = 1/2[x2@#, x4@#]; y2@# = y4@# = 1/2[y1@#, y3@#];
+ draw superellipse(z4@#, z1@#, z2@#, z3@#,
+ (max(0, weight - 1))[1/sqrt2, 0.8]);
+ labels(1@#, 2@#, 3@#, 4@#);
+ pickup the_pen;
+enddef;
+%}}} ring
+%{{{ acute & grave
+
+vardef draw_acute_grave@#(expr anchorx, anchory, wd_, ht_) expr grave =
+ b := grave; pickup mark_pn;
+ rtlft x2@# = hround (anchorx plus 1/3wd_);
+ lftrt x1@# = hround (rtlft x2@# minus wd_);
+ x1'@# = x1@# plus (pn.wd - acc.pn.th);
+ top y1@# = top y1'@# = anchory + ht_;
+ bot y2@# = anchory;
+ draw z2@# -- z1@# -- z1'@# -- z2@#;
+ labels(1@#, 1'@#, 2@#, 3@#)
+enddef;
+
+%}}} acute
+%{{{ dot & twodots
+
+vardef draw_dot_mark@#(expr anchorx, anchory, wd, ht) =
+ pickup pencircle xscaled dot_wd yscaled dot_ht;
+ x@# = anchorx;
+ y@# = min(anchory + ht - 1/2dot_ht,
+ max(anchory + 1/2ht, anchory + 1/2dot_wd));
+ drawdot z@#;
+ labels(@#);
+enddef;
+
+vardef draw_twodots@#(expr anchorx, anchory, wd, ht) =
+ pickup pencircle xscaled dot_wd yscaled dot_ht;
+ lft x1@# = hround (anchorx - 1/2(hround wd) - eps);
+ rt x2@# = hround (anchorx + 1/2(hround wd) + eps);
+ y1@# = y2@# = min(anchory + ht - 1/2dot_ht,
+ max(anchory + 1/2ht, anchory + 1/2dot_wd));
+ drawdot z1@#; drawdot z2@#;
+ labels(1@#, 2@#);
+enddef;
+
+%}}} dot & twodots
+%{{{ circumflex
+
+vardef draw_circumflex@#(expr anchorx, anchory, width, height) expr inverted_p =
+ b := inverted_p;
+ pickup mark_pn;
+ lft x1@# = hround (anchorx - 1/2width - eps); % |-eps| is for symmetry
+ rt x3@# = good.x (anchorx + 1/2width);
+ x2@# = x2'@# = 1/2[x1@#,x3@#];
+ topbot y1@# = topbot y3@#
+ = vround (if inverted_p: anchory + height else: anchory fi);
+ bottop y2@# = bottop y2'@# minus pn.wd plus acc.pn.th
+ = vround (if inverted_p: anchory else: anchory + height fi);
+ % Now for some digitization hacks:
+ numeric rat; rat := (x2@# - x1@#) / (y2@# - y1@#);
+ if not inverted_p and (rat > 1):
+ y1@# := y3@# :=
+ max(top anchory - 1/2v, y2@# - (x2@# - x1@#));
+ elseif inverted_p and (rat < 1):
+ y2@# := max(top anchory - 1/2v, y1@# - (x2@# - x1@#));
+ y2'@# := y2@# + pn.wd - acc.pn.th;
+ fi
+ draw z1@# -- z2@# -- z3@#; %%%% -- z2'@# -- z1@#
+ labels(1@#,2@#,2'@#,3@#);
+enddef;
+
+%}}}
+%{{{ tilde
+
+% This glyph is rather simpler than the original in mamarks.mf.
+
+vardef draw_tilde@#(expr anchorx, anchory, width, height) =
+ pickup mark_pn;
+ lft x1@# = hround (anchorx - 1/2width - eps);
+ rt x5@# = hround (anchorx + 1/2width);
+ z3@# = (1/2[x1@#, x5@#], 1/2height + anchory);
+ x2@# = 1/2[x1@#,x3@#]; x4@# = 1/2[x3@#,x5@#];
+ top y2@# = anchory + height; bot y4@# = anchory;
+ bot y1@# = anchory + 1/4height - o;
+ top y5@# = anchory + 3/4height + o;
+ draw z1@# ... z2@#{right} ... z3@# ... z4@#{right} ... z5@#;
+ labels(1@#, 2@#, 3@#, 4@#, 5@#);
+enddef;
+
+%}}} tilde
+%{{{ breve
+
+vardef draw_breve@#(expr anchorx, anchory, width, height) =
+ pickup mark_pn;
+ top y1@# = top y3@# = anchory + height;
+ bot y2@# = anchory;
+ lft x1@# = hround (anchorx - 1/2width);
+ rt x3@# = hround (anchorx + 1/2width);
+ x2@# = 1/2[x1@#, x3@#];
+ draw z1@#{down} ... z2@# ... z3@#{up};
+ labels(1@#, 2@#, 3@#);
+enddef;
+
+%}}} breve
+%{{{ variant hacek -- for d and t
+% resembles an apostrophe stuck onto the right hand side of letter
+% corresponds to the inverted circumflex mark on c, e, n, r, s, z
+
+vardef draw_hook@# =
+ top z1a@# = (r - 0.55hook_wd, asc_ht);
+ top z1@# = (r - hook_wd, asc_ht - 1/4v);
+ rt x2@# = r; y2@# = 0.77[y3@#, y1@#];
+ bot lft z3@# = (min(r - hook_wd + 1/2u, lft x2@#), x_ht);
+ draw z1@# ... z1a@#{right} ... z2@#{down} ... z3@#;
+ labels(1@#, 2@#, 3@#);
+enddef;
+
+%}}} variant hacek
+%{{{ macron
+
+vardef draw_macron@#(expr anchorx, anchory, wd, ht) =
+ pickup mark_pn;
+ 1/2[x@#1, x@#2] = good.x anchorx; y@#1 = y@#2 = good.y anchory + 1/2ht;
+ lft x@#1 = hround (good.x anchorx - 1/2wd);
+ draw z@#1 -- z@#2;
+ labels(@#1, @#2);
+enddef;
+
+%}}} amcron
+%}}} Marks
+%{{{ Macros for letters that are same in caps as l.c.
+%{{{ slash for O and o
+
+def draw_O_slash =
+ x1slash = good.x (1/12[l,r] - eps);
+ y1slash = good.y (1/12[0,h] - eps);
+ z2slash = z1slash + whatever*(hratio,1);
+ y2slash = h - y1slash;
+ draw z1slash -- z2slash;
+ labels(1slash, 2slash);
+enddef;
+
+%}}}
+%{{{ V
+
+def draw_V =
+ if 1/2w <> hround 1/2w: change_width; fi
+ top lft z1 = (l, h + o); top rt z3 = (r, h + o);
+ bot z2 = (1/2w, -d);
+ draw z1 -- vpex_path2 -- z3;
+ labels(1, 2, 3);
+enddef;
+
+%}}} V
+%{{{ X
+def draw_X expr magic =
+ lft x1 = w - rt x3 = magic[l, r]; top y1 = top y3 = h + o;
+ rt x2 = w - lft x4 = r; bot y2 = bot y4 = -d -o;
+ draw z1 -- z2; draw z3 -- z4;
+ labels(1,2,3,4)
+enddef;
+%}}} X
+%{{{ Y, yen
+
+def draw_Y(expr ytwo) =
+ if 1/2w <> good.x 1/2w: change_width; fi
+ lft x1 = w - rt x3 = l; top y1 = top y3 = h + o;
+ x2 = x4 = 1/2[x1,x3]; bot y4 = -d -o;
+ y2 = ytwo;
+ draw z1 -- apex_path2 -- z3; draw z2 -- z4;
+ labels(1,2,3,4);
+enddef;
+
+%}}}
+%{{{ C
+
+% become ovals when compressed -- pdc Fri. 3 May 1991
+
+vardef draw_C@#(expr leftx, topy, rightx, boty) expr curl =
+ lft x3@# = leftx; y3@# = 1/2[boty, topy];
+ rt x1@# = rt x5@# = rightx;
+ z2@# = z3@# + whatever*(hratio,1); top y2@# = topy + o;
+ z4@# = z3@# + whatever*(hratio,-1); bot y4@# = boty - o;
+ % round form:
+ % The top edge curls is an arc with centre z4@#
+ save deltay, deltax;
+ deltax = lft rightx - x4@#;
+ deltay = (y2@# - y4@#) +-+ deltax;
+ z1@# = z4@# + whatever*(deltax, deltay);
+ z5@# = z2@# + whatever*(deltax, -deltay);
+ %% top y1@# = topy + boty - bot y5@# = good.y curl[topy,boty];
+ draw z1@#{(-deltay, deltax)}
+ .. z2@#{left} .. z3@#{down} .. z4@#{right} ..
+ {(deltay, deltax)}z5@#;
+ labels(1@#,2@#,3@#,4@#,5@#);
+enddef;
+%}}}
+%{{{ S
+
+def draw_S(expr topy, boty)(expr magic, top_magic, bot_magic) =
+ x2 = x4 = x6;
+ top y2 = topy + o; bot y6 = boty - o;
+ lft x3 = w - rt x1
+ = if r - l > 15: hround (1/20[l,r] - eps) else: l fi;
+ lft x7 = w - rt x5 = l;
+ y3 = 1/2[y2,y4]; y5 = 1/2[y4,y6];
+ y4 = good.y (magic[boty, topy] + eps);
+ top y1 = top_magic[topy, boty];
+ bot y7 = bot_magic[boty, topy];
+ z4 = whatever[z3, z5];
+ draw z1 ... hvarc(2,3) .. z4 .. vharc(5,6) ... z7;
+ labels(range 1 thru 7);
+enddef;
+
+%}}}
+%}}}
+%{{{ cap kit
+%{{{ cap codes
+
+numeric capmode; capmode := 1; % 1 for LC, 2 for MC, 3 for SC
+vardef capcode@# =
+ if capmode = 1: code.cap@#
+ elseif capmode = 2: code.mc@#
+ else: code.sc@#
+ fi
+enddef;
+
+%}}} cap codes
+%{{{ set_cap_widths
+
+def set_cap_widths =
+ if unknown height#: height# := cap_ht#; fi
+ width# := height# * hratio;
+ % narrow etc. s.cap letters will be proportionately wider:
+ narrow_wd# := 1/2[0.6width#, 6u#];
+ medium_wd# := 1/3[0.7width#, 8u#];
+ wide_wd# := 1/4[0.8width#, 10u#];
+ % define these as pixels for making ligature chars:
+ define_pixels(width, narrow_wd, medium_wd, wide_wd);
+ % adjustment for width of pen for some letters:
+ pn_adj# := 1/2(pn_wd# - 1/12width#);
+ % width and spacing of capital O:
+ O_wd# := width# + cap.pn.wd# - cap.pn.ht#;
+ O_sp := 1/2;
+ % size of marks:
+ mark_b# := min(body_ht#, height# + 0.75v#);
+ mark_t# := min(mark_b# + 2.5v#, body_ht# + 1.25v#);
+ define_whole_vertical_pixels(mark_t, mark_b);
+ mark_ht := mark_t - mark_b;
+enddef;
+
+%}}} set_cap_widths
+%{{{ A/Delta/Lambda
+
+% Draw a letter A -- sets IC, changes width to make symmetrical etc.
+% apex is z@#2, feet are z@#1 and z@#3
+% barp and boolp are booleans
+
+vardef A_body@#(expr barp, basep) =
+ if 1/2w <> apex.x 1/2w: change_width; fi
+ lft x1@# = w - rt x3@# = l;
+ bot y1@# = bot y3@# = 0 if not basep: - o fi;
+ top z2@# = (1/2w, h);
+ draw z1@# -- apex_path2@# -- z3@# if basep: -- cycle fi;
+ if barp:
+ lft z1@#bar = whatever[z1@#, z2@#]; rt z2@#bar = whatever[z3@#, z2@#];
+ y1@#bar = y2@#bar = good.y ((1 - golden_ratio) * h);
+ draw z1@#bar -- z2@#bar;
+ labels(1@#bar, 2@#bar);
+ fi
+ labels(1@#, 2@#, 3@#);
+ set_ic 0v#;
+enddef;
+
+%}}}
+%{{{ EFL
+
+def do_EFL(expr code, tb_p, mbl, mb, bb_p) =
+ ma_cap(code, narrow_wd# + pn_adj#)(1, 1/2);
+ box_points;
+ draw (x.l, y.t) -- (x.l, y.b);
+ if tb_p: draw_box_t; set_ic_tr; else: set_ic 0v#; fi
+ if mb > 0: draw (mbl[x.l,x.r], y.m) -- (mb[x.l,x.r], y.m); fi
+ if bb_p: draw_box_b; fi
+ endchar
+enddef;
+
+%}}} EFL
+%{{{ O
+
+def draw_O =
+ draw_circle(l - ho, h + oo, r + ho, - oo)
+enddef;
+%}}} O
+%{{{ how to draw the bowl of a D or P
+
+vardef D_bowl@#(expr topy, boty, rightx) suffix $ = % $ is a [DP]_stem
+ x1@# = x5@# = x$1; x2@# = x4@#;
+ top y1@# = top y2@# = topy; bot y4@# = bot y5@# = boty;
+ y3@# = 1/2[y1@#, y5@#]; rt x3@# = rightx;
+ z2@# = z3@# + whatever*(min(1, hratio),-1);
+ draw z1@# --- z2@# .. z3@# .. z4@# --- z5@#;
+ labels(1@#,2@#,3@#,4@#,5@#);
+enddef;
+
+%}}}
+%{{{ cap marks
+
+def some_cap_marks(expr nicex) suffix @ =
+if not no_co:
+ similarly(capcode@acute); str @ & " acute";
+ charht := mark_t#;
+ draw_acute_grave.acute(nicex, mark_b, acute_wd, mark_ht) false;
+ wug;
+ similarly(capcode@grave); str @ & " grave";
+ charht := mark_t#;
+ draw_acute_grave.grave(nicex, mark_b, acute_wd, mark_ht) true;
+ wug;
+ similarly(capcode@twodots); "Capital " & str @ & " two-dots";
+ charht := mark_t#;
+ draw_twodots.twodots(nicex, mark_b, acute_wd + dot_wd, mark_ht);
+ wug;
+ similarly(capcode@circumflex); "Capital " & str @ & " circumflex";
+ charht := mark_t#;
+ draw_circumflex.circumflex(nicex, mark_b,
+ max(acute_wd, 2mark_ht * hratio - pn.wd),
+ mark_ht) false;
+ wug;
+ similarly(capcode@tilde); "Capital " & str @ & " tilde";
+ charht := mark_t#;
+ draw_tilde.tilde(nicex, mark_b,
+ max(acute_wd, 2mark_ht * hratio - pn.wd), mark_ht);
+ wug;
+ similarly(capcode@breve); "Capital " & str @ & " breve";
+ charht := mark_t#;
+ draw_breve.breve(nicex, mark_b,
+ max(acute_wd, 2mark_ht * hratio - pn.wd), mark_ht);
+ wug;
+ similarly(capcode@hook); "Capital " & str @ & " hook";
+ charht := mark_t#;
+ draw_circumflex.hook(nicex, mark_b,
+ max(acute_wd, 2mark_ht * hratio - pn.wd), mark_ht) true;
+ wug;
+fi
+enddef;
+
+%}}} cap marks
+%}}} cap kit
+%{{{ l.c. kit
+%{{{ how to draw b bowl
+
+b_wd# := if italic: 1/2pn.wd# + 5.75u# else: 1/2pn.wd# + 6.5u# fi;
+
+let {{ = if; let }} = fi; let | = elseif;
+if italic:
+ vardef draw_b_bowl@#(expr l, by, r, h, bl, x_ht) expr left_p =
+ b := left_p;
+ {{b: lft else: rt}} x@#1stem =
+ {{b: lft else: rt}} x@#2stem =
+ {{b: lft else: rt}} x@#1bowl =
+ {{b: lft else: rt}} x@#5bowl = {{b: l else: r}};
+ {{b: rt else: lft}} x@#3bowl = {{b: r else: l}};
+ top y@#1stem = {{b: h + o else: h }};
+ bot y@#2stem = {{b: by else: by - o}};
+
+ if b:
+ x@#2bowl = 0.7[x@#1bowl,x@#3bowl];
+ x@#4bowl = 0.45[x@#1bowl,x@#3bowl];
+ top y@#2bowl = x_ht + o; bot y@#4bowl = bl;
+ bot y@#5bowl = bl; top y@#1bowl = 5/8[bot bl, x_ht];
+ else:
+ x@#4bowl = 0.7[x@#1bowl,x@#3bowl];
+ x@#2bowl = 0.45[x@#1bowl,x@#3bowl];
+ top y@#2bowl = x_ht; bot y@#4bowl = bl - o;
+ bot y@#5bowl = 3/8[bl, x_ht]; top y@#1bowl = x_ht;
+ fi
+ y@#3bowl = 1/2[y@#2bowl, y@#4bowl];
+ draw z@#1bowl if b: {(z@#2bowl - z@#1bowl) yscaled 2} fi
+ ... z@#2bowl{plus right} .. z@#3bowl .. z@#4bowl{plus left}
+ ... if not b: {(z@#5bowl - z@#4bowl) yscaled 2} fi z@#5bowl;
+ labels(@#1bowl, @#2bowl, @#3bowl, @#4bowl, @#5bowl, @#1stem, @#2stem);
+ enddef;
+else:
+ vardef draw_b_bowl@#(expr l, by, r, h, bl, x_ht) expr left_p =
+ b := left_p;
+ {{b: lft else: rt}} x@#1stem =
+ {{b: lft else: rt}} x@#2stem =
+ {{b: lft else: rt}} x@#1bowl =
+ {{b: lft else: rt}} x@#5bowl = {{b: l else: r}};
+ {{b: rt else: lft}} x@#3bowl = {{b: r else: l}};
+ top y@#1stem = h + o; bot y@#2stem = by - o;
+ x@#2bowl = x@#4bowl = 0.45[x@#1bowl, x@#3bowl];
+ top y@#2bowl = x_ht + o; bot y@#4bowl = bl - o;
+ y@#3bowl = 1/2[y@#2bowl, y@#4bowl];
+ bot y@#5bowl = 1/16[bl, x_ht]; top y@#1bowl = 15/16[bl, x_ht];
+ draw z@#1bowl
+ ... z@#2bowl{plus right} .. z@#3bowl .. z@#4bowl{plus left}
+ ... z@#5bowl;
+ labels(@#1bowl, @#2bowl, @#3bowl, @#4bowl, @#5bowl, @#1stem, @#2stem);
+ enddef;
+fi
+
+vardef draw_b@#(expr l, by, r, h, bl, x_ht) expr left_p =
+ draw_b_bowl(l, by, r, h, bl, x_ht) left_p;
+ draw if italic or (h > x_ht): z@#1stem else: z@#1bowl fi
+ -- if italic or (by < bl): z@#2stem else: z@#5bowl fi;
+enddef;
+
+%}}}
+%{{{ How to draw tail of g or y
+
+vardef draw_tail@# = % attaches to @#
+ x1tail = x@#; lft x3tail = 0.85[r,l];
+ bot y2tail = -d - o; x2tail = 0.55[x1tail, x3tail];
+ z1tail = z2tail + whatever*(hratio,1);
+ y3tail = good.y (y2tail + 1/2v);
+ draw z@# --- z1tail .. z2tail{left} .. z3tail;
+ labels(1tail, 2tail, 3tail)
+enddef;
+
+%}}}
+%{{{ how to draw the arch on an `n'
+
+n_wd# := 1/2pn.wd# + 6u#;
+n_dip := if italic: 5v else: 1v fi;
+define_pixels(n_wd);
+
+vardef draw_n_arch@#(expr leftrightx, rightleftx) =
+ b := leftrightx < rightleftx;
+ if b:
+ top y1@# = x_ht - n_dip;
+ top y2@# = x_ht + o; bot y4@# = -o;
+ else:
+ bot y1@# = n_dip;
+ bot y2@# = -o; top y4@# = x_ht + o;
+ fi
+ lftrt x1@# = hround leftrightx;
+ rtlft x3@# = rtlft x4@# = rightleftx;
+ x2@# = if italic: 0.3 else: 0.45 fi[x3@#, x1@#];
+ z3@# = z2@# + whatever*se if italic: yscaled 2 fi;
+ draw z1@#{(z2@# - z1@#) yscaled 2}
+ .. z2@#{(x3@# - x1@#, 0)} .. z3@# --- z4@#;
+ labels(1@#,2@#,3@#,4@#);
+enddef;
+
+def set_ic_n = set_ic(0.75x_ht#) enddef;
+%}}}
+%{{{ how to draw an `f'
+
+f_bar_left# := 1u#; f_wd# := f_bar_left# + 5u#;
+f_dp# := if italic: 3/4desc_dp# else: 0v# fi;
+
+f_join# := f_rsp*sp# + sp#;
+ % First two terms give where an "i" would go relative to rt of "f".
+fi_kern# := -1/4u#;
+
+define_pixels(f_bar_left, f_join, f_wd, fi_kern);
+
+def f_char(expr code, w_sharp) =
+ lctitle code; ma_char(code, w_sharp, asc_ht#, f_dp#)
+enddef;
+
+% leftx is left of main stroke
+vardef draw_f@#(expr leftx, kernamount) expr join_p =
+ top y@#2 = h + o; bot y@#4 = -d - o;
+ lft x@#3 = lft x@#4 = hround leftx;
+ if join_p: % Why is this bit causing me so much hassle?
+ lft x@#1 = (leftx + (f_wd - f_bar_left)) + f_join + kernamount;
+ % |lft x@#1| is where left edge of "i" following "f" would go
+ else:
+ rt x@#1 = leftx + (f_wd - f_bar_left);
+ % |rt x@#1| is |f_wd| from left end of the bar
+ fi
+ y@#1 = good.y (h - 1v); y@#3 = h - 3v;
+ z@#2 = z@#3 + whatever*ne;
+ draw z@#1 .. z@#2 .. z@#3 --- z@#4;
+ labels(@#1, @#2, @#3, @#4);
+enddef;
+
+vardef draw_f_bar@# expr join_p =
+ top y1bar = top y2bar = x_ht;
+ lft x1bar = l; x2bar = good.x x@#2; %%%% if join_p: x@#1 else: x@#2 fi;
+ draw z1bar -- z2bar;
+ labels(1bar,2bar);
+enddef;
+%}}}
+%{{{ how to draw an "i" (!)
+
+def draw_i =
+ if 1/2w <> good.x 1/2w: change_width; fi
+ top z1 = (1/2w, x_ht + o); bot z2 = (1/2w, -d - o);
+ draw z1 -- z2; labels(1, 2); set_ic_tr;
+enddef;
+
+%}}} how to draw an "i" (!)
+%{{{ generate lc letter with composites (new conventions)
+
+% There must be a vardef macro draw_lc@# that draws the base letter.
+% It takes 6 parameters: leftx, boty, rightx, topy, baseline, x-ht.
+% It must set variable x.anchor to x-coordinate of anchor for marks.
+
+vardef lc_with_composites@#(expr w_sharp, h_sharp, d_sharp, l_sp, r_sp) =
+ iff known code.lc@#:
+ ma_char(code.lc@#, w_sharp, h_sharp, d_sharp, l_sp, r_sp)
+ "lower case " & str @#;
+ draw_lc@#(l, -d, r, h, 0, x_ht);
+ endchar;
+ lc_composites_only@#(w_sharp, h_sharp, d_sharp, l_sp, r_sp)
+enddef;
+
+vardef lc_composites_only@#(expr w_sharp, h_sharp, d_sharp, l_sp, r_sp) =
+ mh# := max(d_sharp, lc_mark_t#); % height of glyph with mark
+ hh := vround(h_sharp * hppp); % height of base glyph
+ iff known code.lc@#acute:
+ ma_char(code.lc@#acute, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " acute";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_acute_grave.acute(x.anchor, lc_mark_b, acute_wd,
+ lc_mark_ht) false;
+ endchar;
+ iff known code.lc@#grave:
+ ma_char(code.lc@#grave, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " grave";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_acute_grave.grave(x.anchor, lc_mark_b, acute_wd,
+ lc_mark_ht) true;
+ endchar;
+ iff known code.lc@#twodots:
+ ma_char(code.lc@#twodots, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " two-dots";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_twodots.twodots(x.anchor, lc_mark_b, acute_wd + dot_wd,
+ lc_mark_ht);
+ endchar;
+ iff known code.lc@#circumflex:
+ ma_char(code.lc@#circumflex, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " circumflex";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_circumflex.circumflex(x.anchor, lc_mark_b,
+ 2lc_mark_ht * hratio - pn.wd, lc_mark_ht) false;
+ endchar;
+ iff known code.lc@#tilde:
+ ma_char(code.lc@#tilde, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " tilde";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_tilde.tilde(x.anchor, lc_mark_b,
+ 2lc_mark_ht * hratio - pn.wd, lc_mark_ht);
+ endchar;
+ iff known code.lc@#breve:
+ ma_char(code.lc@#breve, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " breve";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_breve.breve(x.anchor, lc_mark_b,
+ 2lc_mark_ht * hratio - pn.wd, lc_mark_ht);
+ endchar;
+ iff known code.lc@#hook:
+ ma_char(code.lc@#hook, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " inverted circumflex";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_circumflex.hook(x.anchor, lc_mark_b,
+ 2lc_mark_ht * hratio - pn.wd, lc_mark_ht) true;
+ endchar;
+ iff known code.lc@#dot:
+ ma_char(code.lc@#dot, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " inverted circumflex";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_dot_mark.dot(x.anchor, lc_mark_b, 0, lc_mark_ht);
+ endchar;
+ iff known code.lc@#macron:
+ ma_char(code.lc@#macron, w_sharp, mh#, d_sharp, l_sp, r_sp);
+ "lower case " & str @# & " inverted circumflex";
+ draw_lc@#(l, -d, r, hh, 0, x_ht);
+ draw_macron.macron(x.anchor, lc_mark_b, 0.8 * (r - l), lc_mark_ht);
+ endchar;
+enddef;
+
+%}}} generate lc letter with composites (new conventions)
+%}}} l.c. kit
+%{{{ kit for lower case Greek
+
+% Draw an acute or grave mark.
+% Set its position with some equation mentioning x1@# or x2@#
+% before using this macro.
+vardef gr_draw_ag@# expr b =
+ top y1@# = gr_mk_top; bot y2@# = gr_mk_bot;
+ z1@# - z2@# = whatever * if b: ne else: se fi yscaled 2;
+ draw z1@# -- z2@#;
+enddef;
+
+vardef gr_draw_twodots@#(expr width, boty) =
+ x1@# = 1/2dot_wd + hround (1/2w - 1/2width - 1/2dot_wd);
+ x2@# = 1/2dot_wd + hround (1/2w + 1/2width - 1/2dot_wd);
+ y2@# = y1@# = 1/2dot_ht + boty;
+ draw_dot1@#; draw_dot 2@#;
+ labels(1@#, 2@#);
+enddef;
+
+vardef gr_breathing@#(expr leftx, topy, rightx, boty) expr b_ =
+ b := b_;
+ top y1@# = topy; bot y3@# = boty;
+ y2@# = 0.6[y3@#, y1@#];
+ lftrt x1@# = if b: leftx else: rightx fi;
+ rtlft x2@# = hround if b: rightx else: leftx fi;
+ x3@# = 0.75[x1@#, x2@#];
+ draw z1@#{ (x2@# - x1@#, 0) } .. z2@#{down} .. z3@#;
+ labels(1@#, 2@#, 3@#);
+enddef;
+
+vardef gr_circ@#(expr leftx, boty, rightx, topy) =
+ lft x1@# = hround leftx; rt x3@# = hround rightx;
+ top y2@# = vround topy; bot y1@# = bot y3@# = vround boty;
+ x2@# = 1/2[x1@#, x3@#];
+ draw z1@#{up} .. z2@# .. z3@#{down};
+ labels(1@#, 2@#, 3@#);
+enddef;
+
+vardef gr_tilde@#(expr leftx, boty, rightx, topy) =
+ lft x1@# = hround leftx; rt x4@# = hround rightx;
+ top y2@# = vround topy; bot y3@# = vround boty;
+ x2@# = 0.3[x1@#, x4@#]; x4@# - x3@# = x2@# - x1@#;
+ y1@# = 0.15[y3@#, y2@#]; y4@# - y3@# = y2@# - y1@#;
+ draw z1@# .. z2@#{right} .. z3@#{right} .. z4@#;
+ labels(1@#, 2@#, 3@#, 4@#);
+enddef;
+
+% Add iota subscript to letter. Note this alters chardp!
+vardef gr_iota_sub@#(expr anchorx) =
+ chardp := desc_dp#;
+ x1@# = x2@# = good.x anchorx;
+ top y1@# = -1/2v;
+ bot y2@# = -hround desc_dp - o;
+ draw z1@# -- z2@#;
+ labels(1@#, 2@#)
+enddef;
+
+%}\}} kit for lower case Greek
+%}}} makit.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/malc.mf b/fonts/malvern/source/malc.mf
new file mode 100644
index 0000000000..e778047542
--- /dev/null
+++ b/fonts/malvern/source/malc.mf
@@ -0,0 +1,620 @@
+% malc.mf 1.2.0 1994/10/11 -- Lower case character programs
+% Copyright 1991-4 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "malc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Lower case latin character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% Glyph programs for lower case letters that generate
+% both base letters and composite letters.
+% In some cases composite letters are generated in a separate
+% program from the base letter -- these go in malcco and malcnc.
+
+%{{{ malc.mf
+
+if testing: endinput; fi
+
+%{{{ h
+
+vardef draw_lc.h@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#stem1 = (l, h + o); bot lft z@#stem2 = (l, by - o);
+ draw z@#stem1 -- z@#stem2; draw_n_arch@#(l,r); set_ic_n;
+enddef;
+
+iff known code.lc.h:
+b_char(code.lc.h, n_wd#)(1, n_sp);
+ "lower case h";
+ draw_lc.h(l, -d, r, h, 0, x_ht);
+endchar;
+
+iff known code.lc.h.circumflex:
+b_char(code.lc.h.circumflex, n_wd#)(1, n_sp);
+ "lower case h with circumflex";
+ draw_lc.h(l, -d, r, h, 0, x_ht);
+ draw_circumflex.silly(0.5[rt x.stem1, rt x4], lc_mark_b,
+ min(x4 - x.stem1 - u, 2lc_mark_ht * hratio - pn.wd), lc_mark_ht) false;
+ set_ic_tr;
+endchar;
+
+%}}} h
+%{{{ w
+
+vardef draw_lc.w@#(expr l, by, r, h, bl, x_ht) =
+ if 1/2w <> apex.x 1/2w: change_width; fi;
+ lft x@#1 = l; rt x@#5 = r;
+ x@#3 = 1/2[x@#1, x@#5];
+ x@#2 = apex.x (1/2[x@#1,x@#3] - eps);
+ x@#4 = apex.x (1/2[x@#3,x@#5] + eps);
+ top y@#1 = top y@#5 = h + o; top y@#3 = h; bot y@#2 = bot y@#4 = by;
+ draw z@#1 -- vpex_path@#2 -- apex_path@#3 -- vpex_path@#4 -- z@#5;
+ labels(@#1,@#2,@#3,@#4,@#5); set_ic_tr; x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.w(12u#, x_ht#, 0pt#)(v_sp, v_sp);
+
+%}}} w
+%{{{ t
+
+vardef draw_lc.t@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#1 = (hround (l + u), h + o); x@#2 = x@#1;
+ bot rt z@#4 = (r, by); bot z@#3 = (min(4/5[l,r], x@#4 - eps), by);
+ z@#2 = z@#3 + whatever*se;
+ draw z@#1 --- z@#2 .. z@#3 --- z@#4;
+ lft x@#1bar = l; rt x@#2bar = x@#4;
+ top y@#2bar = top y@#1bar = x_ht;
+ draw z@#1bar -- z@#2bar;
+ labels(@#1,@#2,@#3,@#4,@#1bar,@#2bar);
+enddef;
+
+iff known code.lc.t:
+ma_char(code.lc.t,
+ 3u# + pn.wd#, 1/2[asc_ht#, x_ht#], 0pt#)(f_lsp, x_sp);
+ draw_lc.t(l, 0, r, 1/2[asc_ht, x_ht], 0, x_ht);
+ set_ic(x_ht#); charic := charic - 1/2pn.wd#;
+endchar;
+
+iff known code.lc.t.cedilla:
+ma_char(code.lc.t.cedilla,
+ 3u# + pn.wd#, 1/2[asc_ht#, x_ht#], cedilla_ht#)(f_lsp, x_sp);
+ draw_lc.t(l, 0, r, 1/2[asc_ht, x_ht], 0, x_ht);
+ draw_cedilla.cedilla(1/2[l,r], 0, cedilla_wd, cedilla_ht);
+ set_ic(x_ht#); charic := charic - 1/2pn.wd#;
+endchar;
+
+iff known code.lc.t.hook:
+ma_char(code.lc.t.hook,
+ 3u# + pn.wd#, 1/2[asc_ht#, x_ht#], 0pt#)(f_lsp, x_sp);
+ draw_lc.t(l, 0, r, 1/2[asc_ht, x_ht], 0, x_ht);
+ draw_hook.hook;
+ set_ic(x_ht#); charic := charic - 1/2pn.wd#;
+endchar;
+
+%}}}
+%{{{ g
+
+vardef draw_lc.g(expr l, by, r, h, bl, x_ht) =
+ draw_b_bowl(l, bl, r, h)(bl, x_ht) false;
+ draw_tail1stem; set_ic_tr; x.anchor = x2bowl;
+enddef;
+lc_with_composites.g(b_wd#, x_ht#, desc_dp#)(o_sp, 1);
+
+%}}} g
+%{{{ r
+
+vardef draw_lc.r@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#1stem = (l, h + o); bot lft z@#2stem = (l, by - o);
+ z@#1arch = if italic: 1/3 else: 3/4 fi [z@#2stem, z@#1stem];
+ top rt z@#2arch = (r, h + o);
+ draw z@#1stem -- z@#2stem;
+ draw z@#1arch{(z@#2arch - z@#1arch) yscaled 3} .. z@#2arch;
+ labels(@#1arch, @#2arch); set_ic_tr; x.anchor = 0.4[l,r];
+enddef;
+
+lc_with_composites.r(4u#, x_ht#, 0pt#)(1, r_sp);
+
+%}}}
+%{{{ a
+if not italic:
+%{{{ roman a
+
+vardef draw_lc.a@#(expr l, by, r, h, bl, x_ht) =
+ lft x@#3bowl = l; rt x@#1bowl = rt x@#5bowl = r;
+ bot y@#4bowl = by - o; top y@#2bowl = vround 2/3[by - o, h];
+ x@#2bowl = x@#4bowl = 0.525[x@#3bowl, x@#1bowl];
+ y@#1bowl = y@#2bowl - 3/4v; y@#5bowl = 1.5v + by - o;
+ y@#3bowl = 1/2[y@#2bowl, y@#4bowl];
+ draw z@#1bowl .. z@#2bowl{left} .. z@#3bowl{down}
+ .. z@#4bowl{right} .. z@#5bowl;
+ labels(@#1bowl, @#2bowl, @#3bowl, @#4bowl, @#5bowl);
+ top y@#2spine = h + o; bot y@#4spine = by - o;
+ rt x@#3spine = rt x@#4spine = r;
+ x@#1spine = good.x 1/5[l,r]; x@#2spine = 0.575[x@#1spine, x@#3spine];
+ z@#3spine = z@#2spine + whatever*se;
+ y@#1spine = good.y (min(y@#2spine,
+ max(y@#2spine - 0.75v, y@#2bowl + pn.ht + 1/2v)));
+ draw z@#1spine .. z@#2spine{right} .. z@#3spine --- z@#4spine;
+ labels(@#1spine, @#2spine, @#3spine, @#4spine);
+ x.anchor = 0.585[l,r];
+enddef;
+
+a_wd# = 1/2pn.wd# + 6.5u#;
+
+lc_with_composites.a(a_wd#, x_ht#, 0pt#)(a_sp, n_sp);
+
+iff known code.lc.a.ring:
+ma_char(code.lc.a.ring, a_wd#, lc_mark_t#, 0pt#)(a_sp, n_sp);
+ "lower case a with ring";
+ draw_lc.a(l, 0, r, x_ht, 0, x_ht);
+ draw_clear_ring.ring(0.585[l,r], lc_mark_b, 3.5u, lc_mark_ht);
+endchar;
+
+iff known code.lc.a.ogonek:
+ma_char(code.lc.a.ogonek, a_wd#, x_ht#, ogonek_dp#)(a_sp, n_sp);
+ "lower case a with ogonek";
+ draw_lc.a(l, 0, r, x_ht, 0, x_ht);
+ pickup cedilla_pen(2.25u + 1/2pn.wd, ogonek_dp);
+ x1ogonek = x4spine; y1ogonek = 0;
+ y2ogonek = 0.5[y3ogonek, y1ogonek];
+ lft x2ogonek = min(x4spine - 1.5u, lft x4spine - 1/2u);
+ bot rt z3ogonek = (r + 0.75u, -ogonek_dp);
+ draw z1ogonek{-ne} ... z2ogonek{down} ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+endchar;
+
+iff known code.ord_feminine:
+ma_char(code.ord_feminine, 3u# + 2pn.wd#, sup_x_top#, 0pt#)(0.5,0.5);
+ draw_lc.a(l, vround (h - sup_x_ht), r, h, vround (h - sup_x_ht), h);
+ pickup pencircle scaled yen.pn.th;
+ top y1bar = top y2bar = bot y4spine - v;
+ lft x1bar = l + 1/2u; rt x2bar = r - 1/4u;
+ draw z1bar -- z2bar;
+ labels(1bar,2bar);
+endchar;
+
+%}}} roman
+else:
+%{{{ italic a
+
+vardef draw_lc.a(expr l, by, r, h, bl, x_ht) =
+ draw_b(l, by, r, h, bl, x_ht)false; set_ic_tr; x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.a(b_wd#, x_ht#, 0pt#)(o_sp, 1);
+
+iff known code.lc.a.ring:
+ma_char(code.lc.a.ring, b_wd#, lc_mark_t#, 0pt#)(o_sp, 1);
+ "lower case a with ring";
+ draw_lc.a(l, 0, r, x_ht, 0, x_ht);
+ draw_clear_ring.ring(0.6[l,r], lc_mark_b, 3.5u, lc_mark_ht);
+endchar;
+
+
+iff known code.lc.a.ogonek:
+ma_char(code.lc.a.ogonek, b_wd#, x_ht#, ogonek_dp#)(o_sp, 1);
+ "lower case a with ogonek";
+ draw_lc.a(l, 0, r, x_ht, 0, x_ht);
+ pickup cedilla_pen(3u, ogonek_dp);
+ rt x3ogonek = r;
+ lft x2ogonek = hround (rt x3ogonek - 3u);
+ bot y3ogonek = vround -ogonek_dp;
+ top y1ogonek = 0;
+ rt x1ogonek = max(lft x1stem - 1/2u, rt x2ogonek);
+ y2ogonek = max(y3ogonek, min(0.6[bot y3ogonek, top y1ogonek], y1ogonek));
+ draw z1ogonek{left} ... z2ogonek{down} ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+ pickup the_pen;
+endchar;
+
+iff known code.ord_feminine: "superior l.c. a";
+ma_char(code.ord_feminine, 3.25u# + 2pn.wd#, sup_x_top#, 0pt#)(1/2,1/2);
+ bot rt z1 = (r, vround (h - sup_x_ht));
+ top rt z2 = (r, h);
+ lft z3 = (l, 1/3[y1, y2]);
+ bot z4 = (1/3[l,r], bot y1);
+ rt z5 = (r, 1/4[y1, y2]);
+ draw z1 -- z2{left} ... z3{down} ... z4{right} ... z5;
+ labels(1, 2, 3, 4, 5);
+ pickup pencircle scaled yen.pn.th;
+ top y1bar = top y2bar = bot y1 - v;
+ lft x1bar = l + 1/2u; rt x2bar = r - 1/4u;
+ draw z1bar -- z2bar;
+ labels(1bar,2bar);
+ set_ic_tr;
+endchar;
+
+%}}} italic a
+fi
+%}}} a
+%{{{ u
+
+vardef draw_lc.u(expr l, by, r, h, bl, x_ht) =
+ draw_n_arch(r,l); draw (x1, y2) -- (x1, y4); set_ic_tr;
+ x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.u(n_wd#, x_ht#, 0pt#)(n_sp, 1);
+
+iff known code.lc.u.ring:
+ma_char(code.lc.u.ring, n_wd#, lc_mark_t#, 0pt#)(n_sp ,1);
+ "lower case u with ring!";
+ draw_lc.u(l, -d, r, x_ht, 0, x_ht);
+ draw_clear_ring.ring(0.5[l,r], lc_mark_b, 3.5u, lc_mark_ht);
+endchar;
+
+%}}} u
+%{{{ l
+%{{{ versions with a tail
+
+vardef draw_lc.lvar@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#1 = (l, h + o); x@#2 = x@#1;
+ bot z@#3 = (3/4[l,r], by); bot rt z@#4 = (r, by);
+ z@#2 = z@#3 + whatever*se;
+ draw z@#1 --- z@#2 .. z@#3 --- z@#4;
+ labels(@#1,@#2,@#3,@#4);
+enddef;
+
+iff known code.lc.l1:
+b_char(code.lc.l1, 2u# + pn.wd#)(1, -2/3);
+ draw_lc.lvar(l, -d, r, h, 0, x_ht);
+endchar;
+
+iff known code.lc.l.slash1: "variant l.c. l with slash";
+b_char(code.lc.l.slash1, 3u# + pn.wd#)(1/2, -1/2);
+ draw_lc.lvar(l + u, -d, r, h, 0, x_ht);
+ 1/2[x1bar, x2bar] = x1; z2bar = z1bar + whatever*ne xscaled 2;
+ lft x1bar = l; top y2bar = x_ht;
+ draw z1bar -- z2bar; labels(1bar,2bar);
+endchar;
+
+iff known code.lc.l.acute1: "variant l.c. l with acute";
+b_char(code.lc.l.acute1, 2u# + pn.wd#)(1/2, -1/2);
+ draw_lc.lvar(l, -d, r, h - 2v, 0, x_ht);
+ draw_acute_grave.acute(l + 1/2pn.wd, h - 1.5v,
+ acute_wd, 1.5v) false;
+endchar;
+
+iff known code.lc.l.hook1: "variant l.c. l with hook";
+b_char(code.lc.l.hook1, 2u# + pn.wd#)(1/2, -1/2);
+ draw_lc.lvar(l, -d, r, h, 0, x_ht);
+ draw_hook.hook;
+endchar;
+
+
+%}}}
+%{{{ straight stick versions
+
+iff known code.lc.l:
+b_char(code.lc.l, pn.wd#)(l_sp, l_sp);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ draw (1/2w, bot (h + o)) -- (1/2w, top (-d - o)); set_ic_tr;
+endchar;
+
+iff known code.lc.l.slash: "l.c. l with slash";
+b_char(code.lc.l.slash, pn.wd# + 2u#)(1/2,1/2);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ draw (1/2w, bot (h + o)) -- (1/2w, top (-d - o));
+ 1/2[x1bar, x2bar] = 1/2w; z2bar = z1bar + whatever*ne xscaled 2;
+ lft x1bar = l; top y2bar = x_ht;
+ draw z1bar -- z2bar;
+ labels(1bar, 2bar); set_ic (1/2h#);
+endchar;
+
+iff known code.lc.l.hook: "lower-case l with hook";
+b_char(code.lc.l.hook, pn.wd# + hook_wd#)(1,1/2);
+ draw_hook;
+ lft x1stem = lft x2stem = l;
+ top y1stem = h + o; bot y2stem = -d - o;
+ draw z1stem -- z2stem;
+ labels(1stem, 2stem); set_ic_tr;
+endchar;
+
+iff known code.lc.l.acute: "lower-case l with acute mark";
+b_char(code.lc.l.acute, max(pn.wd#, acute_wd# - sp#))(1,1);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ x1stem = x2stem = 1/2w; top y1stem = h - 2v; bot y2stem = -d - o;
+ draw z1stem -- z2stem;
+ labels(1stem, 2stem); set_ic_tr;
+ draw_acute_grave.acute(1/2w, h - 1.5v, acute_wd, 1.5v) false;
+endchar;
+
+%}}}
+%}}}
+%{{{ c
+
+def set_ic_frac expr s = set_ic (s * h#) enddef;
+c_wd# = 6u# + pn.wd#;
+c_k_kern# = c_h_kern# = 0pt#;
+c_rsp = x_sp;
+
+vardef draw_lc.c@#(expr l, by, r, h, bl, x_ht) =
+ draw_C@#(l, h, r, by) 1/15; set_ic_frac 14/15; x.anchor = x2@#;
+enddef;
+
+lc_with_composites.c(c_wd#, x_ht#, 0pt#)(o_sp, c_rsp);
+
+iff known code.lc.c.cedilla:
+ma_char(code.lc.c.cedilla, 6u# + pn.wd#, x_ht#, cedilla_ht#)(o_sp, x_sp);
+ "l.c. c with cedilla";
+ draw_lc.c(l, 0, r, x_ht, 0, x_ht);
+ draw_cedilla.cedilla(x2, 0, cedilla_wd, cedilla_ht);
+endchar;
+
+iff known code.sp.lc.c: "superior l.c. c"; % pdc Tue. 23 Apr. 1991
+ma_char(code.sp.lc.c, 5u#, sup_x_top#, 0v#)(1/3,1/2);
+ draw_C(l, h, r, vround (h - sup_x_ht)) 1/40;
+ pickup pencircle scaled yen.pn.th;
+ top y1bar = top y2bar = bot y4 - v;
+ lft x1bar = l + 1/2u; rt x2bar = r - 1/4u;
+ draw z1bar -- z2bar;
+ labels(1bar,2bar);
+ set_ic_tr;
+endchar;
+
+%}}} c
+%{{{ s
+
+def set_ic_lc_s = set_icc(0.05[r#,l#], h# - v#) 1/3h# enddef;
+
+vardef draw_lc.s@#(expr l, by, r, h, bl, x_ht) =
+ draw_S(h, by)(0.52, 0.05, 0.05);
+ set_ic_lc_s; x.anchor = 0.52[l,r];
+enddef;
+
+lc_with_composites.s(4u# + pn.wd#, x_ht#, 0pt#)(s_sp, s_sp);
+
+iff known code.lc.s.cedilla:
+ma_char(code.lc.s.cedilla, 4u# + pn.wd#, x_ht#, cedilla_ht#)(s_sp, s_sp);
+ "l.c. s with cedilla";
+ draw_lc.s(l, 0, r, x_ht, 0, x_ht);
+ draw_cedilla.cedilla(1/2[l,r], 0, cedilla_wd, cedilla_ht);
+endchar;
+
+%}}}
+%{{{ o
+
+o_wd# := if italic: 7u# else: 8u# fi;
+
+vardef draw_lc.o(expr l, by, r, h, bl, x_ht) =
+ draw_circle(l - ho, h + oo, r + ho, -d - oo);
+ set_ic_o; x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.o(o_wd#, x_ht#, 0pt#)(o_sp, o_sp);
+
+iff known code.lc.o.cdot:
+x_char(code.lc.o.cdot, o_wd#)(o_sp, o_sp);
+ "l.c. o with dot in centre";
+ draw_lc.o(l, -d, r, h, 0, x_ht);
+ z.dot = (x1, y0); draw_dot.dot;
+endchar;
+
+iff known code.ord_masculine: "superior lower-case o";
+ma_char(code.ord_masculine, sup_x_ht#*hratio, sup_x_top#, 0pt#)(1/2,1/2);
+ draw_circle(l, h, r, h - sup_x_ht);
+ set_ic_tr;
+ pickup pencircle scaled yen.pn.th;
+ top y1bar = top y2bar = bot y3 - v;
+ lft x1bar = l + 1/2u; rt x2bar = r - 1/2u;
+ draw z1bar -- z2bar;
+ labels(1bar,2bar);
+endchar;
+
+%}}} o
+%{{{ e
+if italic:
+%{{{ italic e
+
+e_wd# := 6.5u# + 2ho#;
+
+vardef draw_lc.e@#(expr l, by, r, h, bl, x_ht) =
+ numeric rat; rat = 0.9;
+ x@#4 = x@#2 = 0.55[l,r]; top y@#4 = h + o; bot y@#2 = by - o;% top & bot
+ y@#3 = 1/2[y@#2,y@#4]; lft x@#3 = l; % left point
+ y@#5 = 0.25[y@#4,y@#2]; rt x@#5 = r; % right point
+ z@#6 = point rat of (z@#2{left} .. z@#3{up}); % join
+ y@#1 = y@#2 + 1/16(h - by); x@#1 = x@#5 - 1/13(r - l);
+ % terminal
+ draw z@#1 .. z@#2{left} .. z@#3{up} .. z@#4{right} .. {down}z@#5
+% ... z@#6{ (direction rat of (z@#2{left} .. z@#3{up})) rotated 90 };
+ ... z@#6{left};
+ x.anchor = x@#4;
+ labels(1,2,3,4,5,6);
+enddef;
+
+lc_with_composites.e(e_wd#, x_ht#, 0pt#)(o_sp, e_sp);
+
+iff known code.lc.e.ogonek:
+ma_char(code.lc.e.ogonek, e_wd#, x_ht#, ogonek_dp#)(o_sp, e_sp);
+ "lower case e with ogonek";
+ draw_lc.e(l, 0, r, x_ht)(0, x_ht);
+ numeric wd; wd = 2u + 1/2pn.wd;
+ pickup cedilla_pen(wd + 1/2pn.wd, ogonek_dp);
+ z1ogonek = z1;
+ bot rt z3ogonek = (x1ogonek + wd, - ogonek_dp);
+ z2ogonek = 0.75[(x3ogonek, y1ogonek), (x1ogonek, y3ogonek)];
+ draw z1ogonek{down} ... z2ogonek{z3ogonek - z1ogonek}
+ ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+endchar;
+
+
+vardef draw_lc.schwa@#(expr l, by, r, h, bl, x_ht) =
+ numeric rat; rat = 0.9;
+ x@#4 = x@#2 = 0.55[r,l]; bot y@#4 = by - o; top y@#2 = h + o;
+ % top & bot
+ y@#3 = 1/2[y@#2,y@#4]; rt x@#3 = r; % left point
+ y@#5 = 0.25[y@#4,y@#2]; lft x@#5 = l; % right point
+ z@#6 = point rat of (z@#2{right} .. z@#3{down}); % join
+ y@#1 = y@#2 + 1/16(by - h); x@#1 = x@#5 - 1/13(l - r);
+ % terminal
+ draw z@#1 .. z@#2{right} .. z@#3{down} .. z@#4{left} .. {up}z@#5
+ ... z@#6{right};
+ x.anchor = x@#4;
+ labels(1,2,3,4,5,6);
+enddef;
+
+iff known code.lc.e.schwa: "lower case schwa";
+x_char(code.lc.e.schwa, e_wd#)(e_sp, o_sp);
+ draw_lc.schwa(l, 0, r, x_ht, 0, x_ht);
+endchar;
+
+%}}} italic e
+else:
+%{{{ upright e
+
+e_wd# = 7.5u# + 2ho#;
+
+vardef draw_lc.e@#(expr l, by, r, h, bl, x_ht) =
+ x@#1 = l + pn.wd; rt x@#2 = r; lft x@#4 = l;
+ top y@#3 = h + oo; bot y@#5 = by - oo;
+ y@#6 = good.y (y@#5 + 1/16(h - by)); x@#3 = x@#5 = 1/2[l, r];
+ y@#1 = y@#2 = y@#4 = 0.525[by, h]; x@#6 = 0.825[l, r];
+ draw z@#1 -- z@#2{up} .. z@#3 .. z@#4 .. z@#5{right} .. z@#6;
+ labels(@#1,@#2,@#3,@#4,@#5,@#6); set_ic_e; x.anchor = x@#3;
+enddef;
+
+lc_with_composites.e(7.5u# + 2ho#, x_ht#, 0pt#)(o_sp, e_sp);
+
+iff known code.lc.e.ogonek: "lower case e with ogonek";
+ma_char(code.lc.e.ogonek, e_wd#, x_ht#, ogonek_dp#)(o_sp, e_sp);
+ draw_lc.e(l, 0, r, x_ht, 0, x_ht);
+ numeric wd; wd = 2u + 1/2pn.wd;
+ pickup cedilla_pen(wd + 1/2pn.wd, ogonek_dp);
+ z1ogonek = z5;
+ bot rt z3ogonek = (x1ogonek + wd, - ogonek_dp);
+ z2ogonek = 0.75[(x3ogonek, y1ogonek), (x1ogonek, y3ogonek)];
+ draw z1ogonek{down} ... z2ogonek{z3ogonek - z1ogonek}
+ ... z3ogonek{right};
+ labels(1ogonek, 2ogonek, 3ogonek);
+endchar;
+
+
+vardef draw_lc.schwa@#(expr l, by, r, h, bl, x_ht) =
+ x@#1 = r - pn.wd; lft x@#2 = l; rt x@#4 = r;
+ bot y@#3 = by - oo; top y@#5 = h + oo;
+ y@#6 = good.y (y@#5 - 1/16(h - by)); x@#3 = x@#5 = 1/2[l, r];
+ y@#1 = y@#2 = y@#4 = 0.525[h, by]; x@#6 = 0.825[r, l];
+ draw z@#1 -- z@#2{down} .. z@#3 .. z@#4 .. z@#5{left} .. z@#6;
+ labels(@#1,@#2,@#3,@#4,@#5,@#6); set_ic_e; x.anchor = x@#3;
+enddef;
+
+iff known code.lc.schwa:
+x_char(code.lc.schwa, e_wd#)(e_sp, o_sp); "lower case schwa";
+ draw_lc.schwa(l, 0, r, x_ht)(0, x_ht);
+endchar;
+
+%}}} upright e
+fi
+%}}}
+%{{{ n
+
+vardef draw_lc.n@#(expr l, by, r, h, bl, x_wd) =
+ top lft z@#1stem = (l, h + o);
+ bot lft z@#2stem = (l, by - o);
+ draw z@#1stem -- z@#2stem;
+ draw_n_arch@#(l,r); set_ic_n; x.anchor=x@#2
+enddef;
+
+lc_with_composites.n(n_wd#, x_ht#, 0pt#, 1, n_sp);
+
+%}}}
+%{{{ y
+
+vardef draw_lc.y@#(expr l, by, r, h, bl, x_ht) =
+ draw_n_arch@#(r,l); top rt z@#0 = (r, h + o); draw_tail@#0;
+ set_ic_tr; x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.y(n_wd#, x_ht#, desc_dp#, n_sp, 1);
+
+%}}} y
+%{{{ z
+
+vardef draw_lc.z@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#1 = (l, h); top rt z@#2 = (r, h); top z@#3 = z@#2;
+ bot z@#4 = z@#5; bot lft z@#5 = (l, by); bot rt z@#6 = (r, by);
+ draw z@#1 -- z@#2 -- z@#3 -- z@#4 -- z@#5 -- z@#6;
+ labels(@#1, @#2, @#3, @#4, @#5, @#6); x.anchor = 1/2[l,r];
+enddef;
+
+lc_with_composites.z(7u#, x_ht#, 0pt#)(x_sp, x_sp);
+
+%iff known code.lc.z.dot: "lower case z with dot";
+%ma_char(code.lc.z.dot, 7u#, lc_mark_t#, 0pt#)(x_sp, x_sp);
+% draw_lc.z.z(l, 0, r, x_ht, 0, x_ht);
+% draw_dot_mark.dot_mark(1/2[l,r], lc_mark_b, 0, lc_mark_ht);
+%endchar;
+
+%}}}
+%{{{ j
+
+vardef draw_lc.j@#(expr l, by, r, h, bl, x_ht) =
+ rt x@#1 = rt x@#2 = r; lft x@#3 = l;
+ top y@#1 = x_ht + o; bot y@#3 = by - o; bot y@#4 = good.y (bot y@#3 + 1v);
+ z@#2 = z@#3 + whatever*ne;
+ draw z@#1 --- z@#2 .. z@#3{left};
+ labels(@#1,@#2,@#3); set_ic_tr; x.anchor = x@#1;
+enddef;
+
+% There's a slight complication because the composites are
+% formed from a dotless j but are called j.foo not dotless_j.foo:
+
+iff known code.lc.j:
+ma_char(code.lc.j, 3u#,
+ min(body_ht#, 1/2dot_ht# + 1/2[x_ht#, asc_ht#]), desc_dp#)
+ (j_sp,i_sp);
+ draw_lc.j(l, -d, r, h, 0, x_ht); top rt z.dot = (r, h); draw_dot.dot;
+endchar;
+
+iff known code.lc.dotless_j: "l.c. j without dot";
+y_char(code.lc.dotless_j, 3u#)(j_sp,i_sp);
+ draw_lc.j(l, -d, r, h, 0, x_ht);
+endchar;
+
+lc_composites_only.j(3u#, x_ht#, desc_dp#)(j_sp, i_sp);
+
+%}}} j
+
+input malcco
+input malcnc
+%{{{ ligatures
+
+iff known code.lc.c.h:
+ma_char(code.lc.c.h, c_wd# + n_wd# + c_h_kern# + sp#*(c_rsp + 1),
+ asc_ht#, 0pt#)(o_sp, n_sp);
+ "Ligature ch";
+ draw_lc.c.c(l, 0, l + hround(c_wd# * hppp), x_ht, 0, x_ht);
+ draw_lc.h.h(r - hround(n_wd# * hppp), 0, r, h, 0, x_ht);
+endchar;
+
+iff known code.lc.c.k:
+ma_char(code.lc.c.k, c_wd# + k_wd# + c_k_kern# + sp#*(c_rsp + 1),
+ asc_ht#, 0pt#)(o_sp, x_sp);
+ "Ligature ck";
+ draw_lc.c.c(l, 0, l + hround(c_wd# * hppp), x_ht, 0, x_ht);
+ draw_lc.k.k(r - hround(n_wd# * hppp), 0, r, h, 0, x_ht);
+endchar;
+
+%}}} ligatures
+%}}} malc.mf
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/malcco.mf b/fonts/malvern/source/malcco.mf
new file mode 100644
index 0000000000..1cdbdec421
--- /dev/null
+++ b/fonts/malvern/source/malcco.mf
@@ -0,0 +1,112 @@
+% malcco.mf 1.2.0 1994/10/11 -- lower case composite letter glyph programs
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "malcco.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family, for some l.c. composite letters .",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ malcco.mf
+
+if testing: endinput; fi
+
+%{{{ d+hook, d+bar
+
+iff known code.lc.d.hook:
+b_char(code.lc.d.hook)(b_wd# + hook_wd#)(o_sp, 0);
+ "l.c. d with variant hook";
+ draw_b(l, -d, r - hook_wd, h, 0, x_ht) false;
+ draw_hook.hook;
+ set_ic_tr;
+endchar;
+
+iff known code.lc.d.bar:
+b_char(code.lc.d.bar)(b_wd# + u#)(o_sp, 0);
+ "l.c. d with bar";
+ draw_b(l, -d, r - u, h, 0, x_ht) false;
+ y1bar = y2bar = good.y(0.4[x_ht, h]);
+ rt x2bar = r; x1bar = hround (2 * x1stem - x2bar - eps);
+ draw z1bar -- z2bar;
+ labels(1bar, 2bar);
+ set_ic_tr;
+endchar;
+
+%}}} d+hook, d+bar
+%{{{ composite letters based on "i"
+
+iff known code.lc.i.acute: "l.c. i with acute mark";
+ma_char(code.lc.i.acute, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_acute_grave.acute(1/2w, lc_mark_b, 2u, lc_mark_ht) false;
+endchar;
+
+iff known code.lc.i.grave: "l.c. i with grave mark";
+ma_char(code.lc.i.grave, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_acute_grave.grave(1/2w, lc_mark_b, 2u, lc_mark_ht) true;
+endchar;
+
+iff known code.lc.i.circumflex: "l.c. i with circumflex";
+ma_char(code.lc.i.circumflex, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_circumflex.circumflex(1/2w, lc_mark_b, 4u, lc_mark_ht) false;
+endchar;
+
+iff known code.lc.i.twodots: "l.c. i with two dots above";
+ma_char(code.lc.i.twodots, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_twodots.twodots(1/2w, lc_mark_b, u + 2dot_wd, lc_mark_ht);
+endchar;
+
+iff known code.lc.i.dot: "l.c. i with dot";
+ma_char(code.lc.i.dot, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_dot_mark.dot(1/2w, lc_mark_b, 0, lc_mark_ht);
+endchar;
+
+iff known code.lc.i.macron: "l.c. i with macron";
+ma_char(code.lc.i.macron, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_macron.macron(1/2w, lc_mark_b, 2pn.wd + u, lc_mark_ht);
+endchar;
+
+iff known code.lc.i.breve: "l.c. i with breve";
+ma_char(code.lc.i.breve, max(pn.wd#, dot_wd#),
+ lc_mark_t#, 0v#)(i_sp, i_sp);
+ draw_i;
+ draw_breve.breve(1/2w, lc_mark_b, 2pn.wd + 2u, lc_mark_ht);
+endchar;
+
+iff known code.dotless_i: "l.c. i sans dot";
+x_char(code.dotless_i, max(pn.wd#, dot_wd#))(i_sp, i_sp);
+ draw_i;
+endchar;
+
+%}}} composite letters based on "i"
+%}}} malcco.mf
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/malcnc.mf b/fonts/malvern/source/malcnc.mf
new file mode 100644
index 0000000000..02b9f20656
--- /dev/null
+++ b/fonts/malvern/source/malcnc.mf
@@ -0,0 +1,341 @@
+% malcnc.mf 1.2.0 1994/10/11 -- lower case non-composite letter glyph programs
+% Copyright 1991-4 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "malcnc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern font family,
+%%% for non-composite lower case latin letter.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+% Glyph programs for lower case letters that do not generate
+% composite letters.
+% Some composite letters are generated by separate glyph programs.
+% Some letters aren't used in composite letters.
+
+%{{{ malcnc.mf
+
+if testing: endinput; fi
+
+%{{{ d
+
+iff known code.lc.d:
+b_char(code.lc.d)(b_wd#)(o_sp, 1);
+ draw_b(l, -d, r, h, 0, x_ht) false; set_ic_tr;
+endchar;
+%}}} d
+%{{{ i
+
+iff known code.lc.i:
+ma_char(code.lc.i, max(pn.wd#, dot_wd#),
+ min(body_ht#, 1/2dot_ht# + 1/2[x_ht#, asc_ht#]), 0v#)(i_sp, i_sp);
+ draw_i; top z.dot = (1/2w, h); draw_dot.dot; labels(dot);
+endchar;
+
+iff known code.lc.dotless_i:
+ma_char(code.lc.dotless_i, max(pn.wd#, dot_wd#),
+ min(body_ht#, 1/2dot_ht# + 1/2[x_ht#, asc_ht#]), 0v#)(i_sp, i_sp);
+ draw_i;
+endchar;
+
+%}}}
+%{{{ o with slash
+
+iff known code.lc.o.slash: "l.c. o with slash";
+x_char(code.lc.o.slash, if italic: 7u# else: 8u# fi)(o_sp, o_sp);
+ draw_circle(l - ho, h + oo, r + ho, -d - oo);
+ draw_O_slash;
+ set_icc (1/12[r#,l#], 11/12h#) 0.7h#;
+endchar;
+
+%}}}
+%{{{ b, d, p, q, thorn
+
+iff known code.lc.b:
+b_char(code.lc.b, b_wd#)(1, o_sp);
+ draw_b(l, -d, r, h, 0, x_ht) true; set_ic_o;
+endchar;
+
+iff known code.lc.p:
+y_char(code.lc.p, b_wd#)(1, o_sp);
+ draw_b(l, -d, r, h, 0, x_ht) true; set_ic_o;
+endchar;
+
+iff known code.lc.q:
+y_char(code.lc.q, b_wd#)(o_sp, 1);
+ draw_b(l, -d, r, h, 0, x_ht) false; set_ic_tr;
+endchar;
+
+iff known code.lc.thorn: "l.c. thorn";
+ma_char(code.lc.thorn, b_wd#, asc_ht#, desc_dp#)(1, o_sp);
+ draw_b(l, -d, r, h, 0, x_ht) true; set_ic_o;
+endchar;
+
+%}}}
+%{{{ v, x
+
+iff known code.lc.v:
+x_char(code.lc.v, 7u#)(v_sp, v_sp); draw_V; set_ic_tr; endchar;
+
+iff known code.lc.x:
+x_char(code.lc.x, 7u#)(x_sp, x_sp); draw_X 1/20; set_ic(h# - pn.ht#); endchar;
+%}}}
+%{{{ m, eng
+
+iff known code.lc.m:
+x_char(code.lc.m, 10u#)(1,n_sp);
+ if 1/2[l,r] <> good.x 1/2[l,r]: change_width; fi
+ save n_dip; n_dip = if italic: 3v else: 1.5v fi;
+ H_stem.stem; draw_n_arch1(l, rt 1/2[l,r]); draw_n_arch2(lft 1/2[l,r],r);
+ set_ic_n;
+endchar;
+
+iff known code.lc.eng: "Lappish lower case eng";
+y_char(code.lc.eng, n_wd#)(1, n_sp);
+ top lft z1stem = (l, h + o); bot lft z2stem = (l, -o);
+ draw z1stem -- z2stem;
+ draw_n_arch.a(l,r);
+ x1tl = x4a; bot y2tl = bot y3tl - 1/3v = -d - o;
+ lft x3tl = 3/4[r, l]; x2tl = 0.55[x1tl, x3tl];
+ z1tl = z2tl + whatever*ne;
+ draw z4a --- z1tl ... z2tl{left} ... z3tl;
+ labels(1stem, 2stem, 1tl, 2tl, 3tl); set_ic_n;
+endchar;
+
+%}}}
+%{{{ k
+
+k_wd# = 1/2pn.wd# + 5.5u#;
+def set_ic_x_ht = set_ic x_ht# enddef;
+
+vardef draw_lc.k@#(expr l, by, r, h, bl, x_ht) =
+ top lft z@#stem1 = (l, h); bot lft z@#stem2 = (l, by);
+ top rt z@#top1 = (r, x_ht + o);
+ y@#top2 = y@#bot2 = 0.5[y@#top1, y@#bot1];
+ x@#top2 = rt x@#stem1; z@#top2 = z@#bot2;
+ bot rt z@#bot1 = (r, by - o);
+ draw z@#stem1 -- z@#stem2;
+ draw z@#top1 -- z@#top2 ; draw z@#bot1 -- z@#bot2;
+ labels(@#stem1, @#stem2, @#top1, @#top2, @#bot1, @#bot2);
+ set_ic_x_ht; x.anchor := 1/2[rt x@#stem1, r];
+enddef;
+
+iff known code.lc.k:
+b_char(code.lc.k, k_wd#)(1,x_sp);
+ draw_lc.k(l, -d, r, h, 0, x_ht);
+endchar;
+
+%}}}
+%{{{ eszet
+
+if unknown code.lc.longs.s: code.lc.longs.s = code.lc.eszet; fi
+
+iff known code.lc.longs.s: "Ligature longs+s";
+ma_char(code.lc.longs.s, pn.wd# + 7u#, asc_ht#,
+ if italic: desc_dp# else: 0v# fi)(1,o_sp);
+ bot lft z1 = (l, -d); lft x2 = l; top y3 = h + o;
+ rt x8 = r; bot y9 = 0 - o;
+ x7 = x9;
+ y2 = 0.25[x_ht, h]; y4 = 1/2[y3, y5]; y5 = x_ht;
+ y6 = 1/2[y5, y7]; y8 = 1/2[y7, y9];
+ x7 = 0.5[x10, x8];
+ y10 = y9 + 1u; lft x10 = rt x1 + 1u;
+ y7 = 0.6[y9, y5]; x6 - x7 = 0.8(x7 - x8);
+ x4 - x5 = 0.5(x5 - x6);
+ z3 = z4 + whatever * se; z3 = z2 + whatever * ne;
+ draw z1 --- vharc(2, 3) & hvarc(3, 4) .. z5
+ & hvarc(5, 6) ... hvarc(7, 8) & vharc(8, 9) .. z10;
+ labels(range 1 thru 10);
+endchar;
+
+iff known code.lc.eszet1: "Variant German Eszet";
+ma_char(code.lc.eszet1, pn.wd# + 7u#, asc_ht#,
+ if italic: desc_dp# else: 0v# fi)(1,o_sp);
+ lft x1 = lft x2 = l; rt x8 = r;
+ top y3 = h + o; bot y1 = -d -o; bot y9 = bot y10 - 3/4v = -o;
+ top y5 = top y6 + 1/4v - o = top y7 - o = x_ht;
+ lft x6 = good.x(rt x1 + 1/2u); lft x10 = rt x1;
+ z3 - z2 = z4 - z5 = (z3 - z4) xscaled -1 = whatever*ne;
+ z8 - z9 = (z8 - z7) yscaled -1 = whatever*ne;
+ z5' = (1/sqrt2)[(x5,y4), (x4,y5)];
+ draw z1 --- z2 ... z3{right} ... z4 ... z5'{(z5-z4)};
+ draw z6 ... z7{right} ... z8 ... {left}z9 ... z10; % bot bowl
+ labels(range 1 thru 10, 5'); set_ic_o;
+endchar;
+
+%}}}
+%{{{ eth and Anglo-Saxon eth
+
+% This will be a bit tricky.
+
+def ma_eth(expr code) =
+ b_char(code, 8u#)(o_sp, o_sp); % matched by |endchar|
+ draw_circle.circ(l - ho, x_ht + oo, r + ho, -d - oo);
+ z1 = (1/sqrt2)[(x1circ,y0circ), (x0circ,y1circ)];
+ z2 = z1 + whatever*se;
+ y2 = 1/2[x_ht, h]; % junction
+ top y3 = h + o; lft x3 = l + 1/2u; % this just happens to work
+ draw z1 ... z2 ... z3;
+ 1/2[z1a,z1b] = 0[z2,z3];
+ z1b - z1a = whatever*(z3 - z2) xscaled -1;
+ top y1a = h + o; %%%lft x1b = l;
+ draw z1a -- z1b;
+ labels(1,2,3, 1a, 1b); set_ic_o;
+enddef;
+
+iff known code.lc.eth: "Icelandic eth";
+ma_eth(code.lc.eth);
+endchar;
+
+iff known code.lc.eth1:
+ma_eth(code.lc.eth1);
+ "Anglo-Saxon eth";
+ z2b - z1b = z1a - z2a = whatever*se;
+ lft x2b = l - o;
+ draw z1b -- z2b; draw z1a -- z2a;
+ labels(2a, 2b); set_ic_o;
+endchar;
+
+%}}}
+%{{{ ae and oe ligatures
+
+def ma_e_lig(expr code, lsp, rsp) =
+ x_char(code, pn.wd# + 12u#)(lsp, rsp);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ forsuffixes $ = 1, 2, 3, 4, 5: 1/2[z$a, z$e] = z0; endfor
+ x0 = 1/2w; y0 = y5a = good.y 1/2h;
+ top y2a = h + o; bot y3a = -o; lft x4a = l;
+ x2a = x3a = x5a = 0.55[x0, x4a];
+ y4a = 1/2[y3a, y0];
+ x1a = 0.85[x0, x4a]; top y1a = vround(h - 1/3v);
+ y2e := (-d - o) + 1/2pn.ht; y3e := (h + o) - 1/2pn.ht;
+ %% low-resolution hackettes
+ set_ic_e;
+enddef;
+
+iff known code.lc.ae: "lower case ligature ae";
+ma_e_lig(code.lc.ae)(a_sp, e_sp);
+ draw z1a .. z2a{right} .. z0 .. z3a{left} .. z4a{up} .. z5a
+ --- z5e .. z4e{up} .. z3e{left} .. z0 .. z2e{right} .. z1e;
+ labels(1a, 2a, 3a, 4a, 5a, 1e, 2e, 3e, 4e, 5e, 0);
+endchar;
+
+iff known code.lc.oe: "lower case ligature oe";
+ma_e_lig(code.lc.oe)(o_sp, e_sp);
+ draw z0 --- z5e .. z4e{up} .. z3e{left} .. z0 .. z2e{right} .. z1e;
+ draw_circle.o(l - ho, h + oo, rt 1/2w, -d - oo);
+ labels(1e, 2e, 3e, 4e, 5e, 0);
+endchar;
+
+%}}}
+%{{{ f and f-ligatures
+
+longs_adjust# := -1u#;
+longs_rsp:=f_rsp + longs_adjust#/sp#;
+define_whole_pixels(longs_adjust);
+
+iff known code.lc.f:
+f_char(code.lc.f, f_wd#)(f_lsp, f_rsp);
+ draw_f(l + f_bar_left, 0) false; draw_f_bar false;
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.f.f: "ligature ff";
+f_char(code.lc.f.f, 2f_wd# - f_bar_left# + f_join#)(f_lsp, f_rsp);
+ draw_f1(l + f_bar_left, 0) true;
+ draw_f2(l + f_wd + f_join, 0) false;
+ draw_f_bar2 false;
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.f.i: "ligature fi";
+f_char(code.lc.f.i, f_wd# + (f_join# + fi_kern#) + pn.wd#)(f_lsp, i_sp);
+ draw_f(l + f_bar_left, fi_kern) true;
+ draw_f_bar true;
+ bot z1foot = (x1, 0 - o); draw z1foot -- (x1foot, y1bar);
+ rt z2foot = (r, y1foot);
+ labels(1foot, 2foot);
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.f.l: "ligature fl";
+f_char(code.lc.f.l, f_wd# + (f_join# + fi_kern#) + pn.wd#)(f_lsp, l_sp);
+ draw_f(l + f_bar_left, fi_kern) true;
+ draw_f_bar true;
+ bot z1foot = (x1, 0 - o); draw z1foot -- z1;
+ labels(1foot);
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.f.f.i: "ligature ffi";
+f_char(code.lc.f.f.i, 2f_wd# - f_bar_left# + 2f_join# + fi_kern# + pn.wd#)
+ (f_lsp, i_sp);
+ draw_f1(l + f_bar_left, 0) true;
+ draw_f2(l + f_wd + f_join, fi_kern) true;
+ draw_f_bar2 true;
+ bot z1foot = (x[2]1, 0 - o); draw z1foot -- (x1foot, y1bar);
+ labels(1foot);
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.f.f.l: "ligature ffl";
+f_char(code.lc.f.f.l, 2f_wd# - f_bar_left# + 2f_join# + fi_kern# + pn.wd#)
+ (f_lsp, l_sp);
+ draw_f1(l + f_bar_left, 0) true;
+ draw_f2(l + f_wd + f_join, fi_kern) true;
+ draw_f_bar2 true;
+ bot z1foot = (x[2]1, 0 - o); draw z1foot -- z[2]1;
+ labels(1foot);
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.longs: "long s";
+f_char(code.lc.longs, f_wd#)(f_lsp, longs_rsp);
+ draw_f(f_bar_left, 0) false;
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+iff known code.lc.longs.longs: "ligature longs longs";
+f_char(code.lc.longs.longs, 2f_wd# - f_bar_left# + f_join# + longs_adjust#)(f_lsp, longs_rsp);
+ draw_f1(l + f_bar_left, longs_adjust)true;
+ draw_f2(l + f_wd + longs_adjust + f_join, 0)false;
+ set_ic (h# - v# + 1/2pn.ht#);
+endchar;
+
+%}}}
+%{{{ ij ligature
+
+iff known code.lc.ij: "lower-case Dutch ij";
+ma_char(code.lc.ij, 2*max(pn.wd#, dot_wd#) + 2.5u#,
+ min(body_ht#, 1/2dot_ht# + 1/2[x_ht#, asc_ht#]), desc_dp#)(i_sp, i_sp);
+ x1i = w - x1j = l + 1/2max(dot_wd, pn.wd);
+ top y1j = top y1i = x_ht;
+ bot z2i = (x1i, 0);
+ draw z1i -- z2i; draw_tail 1j; draw z1j -- z1tail;
+ y0i = y0j = h; x0i = x1i; x0j = x1j;
+ draw_dot0i; draw_dot0j;
+ labels(0i, 1i, 2i, 0j, 1j);
+ set_ic_tr;
+endchar;
+
+%}\}} ij ligature
+
+%}}} malcnc.mf
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/mamarks.mf b/fonts/malvern/source/mamarks.mf
new file mode 100644
index 0000000000..c355c0a80e
--- /dev/null
+++ b/fonts/malvern/source/mamarks.mf
@@ -0,0 +1,255 @@
+% mamarks.mf 1.2.0 1994/10/11 -- marks program file
+% Copyright 1991-4 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "mamarks.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family -- stand-alone marks (accents).",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ mamarks.mf
+
+%{{{ Set mark_t etc.
+
+if lc_marks:
+ mark_t# := lc_mark_t#; mark_b# := lc_mark_b#;
+else:
+ mark_t# := cap_mark_t# - (mcap_ht# - x_ht#);
+ mark_b# := cap_mark_b# - (mcap_ht# - x_ht#);
+fi
+define_whole_vertical_pixels(mark_t, mark_b);
+
+def ma_mark(expr code) =
+ ma_char(code, 8u#, mark_t#, 0pt#)(0,0);
+ pickup mark_pn;
+enddef;
+
+%}}}
+
+
+if testing: endinput; fi
+
+%{{{ ring
+
+"ring mark";
+ma_mark(code.mk.ring);
+ draw_circle(1/2w + -1.5u, mark_t, 1/2 w + 1.5u,
+ mark_b if not lc_marks: - acc.pn.th + 2o fi);
+endchar;
+
+%}}}
+%{{{ Grave, acute
+
+vardef draw_graveacute@#(expr leftx) =
+ rtlft x2@# = hround leftx;
+ lftrt x1@# = hround (rtlft x2@# minus 3u);
+ x1'@# = x1@# plus (pn.wd - acc.pn.th);
+ top y1@# = top y1'@# = mark_t; bot y2@# = mark_b;
+ draw z2@# -- z1@# -- z1'@# -- z2@#;
+ labels(1@#, 1'@#, 2@#, 3@#)
+enddef;
+
+def do_graveacute(expr code) expr grave_p =
+ b := grave_p;
+ ma_mark(code); draw_graveacute(1/2w plus u); endchar
+enddef;
+
+"grave mark"; do_graveacute(code.mk.grave) true;
+"acute mark"; do_graveacute(code.mk.acute) false;
+
+"Hungarian double acute mark";
+ma_mark(code.mk.hungarian);
+ draw_graveacute1(1/2w - if lc_marks: 2u else: 2.5u fi);
+ draw_graveacute2(1/2w + if lc_marks: u else: 0.5u fi);
+endchar;
+%}}}
+%{{{ circumflex and inverted circumflex
+
+def do_circumflex(expr code) expr inverted_p =
+ b := inverted_p;
+ ma_mark(code);
+ x1 = w - x3 = good.x (1/2w - (if lc_marks: 3u else: 2.5u fi
+ - acc.pn.th + 1/2apex_adjust));
+ x2 = x2' = 1/2[x1,x3];
+ topbot y1 = topbot y3 = if inverted_p: mark_t else: mark_b fi;
+ bottop y2 = bottop y2' minus pn.wd plus acc.pn.th
+ = if inverted_p: mark_b else: mark_t fi;
+ draw z1 -- z2 -- z3 -- z2' -- z1;
+ labels(1,2,2',3);
+ endchar;
+enddef;
+
+"circumflex mark"; do_circumflex(code.mk.circumflex) false;
+"inverted circumflex mark"; do_circumflex(code.mk.hook) true;
+%}}}
+%{{{ breve
+
+"breve mark";
+ma_mark(code.mk.breve);
+ top y1 = top y3 = mark_t;
+ bot y2 = mark_b;
+ top y2' = vround (y2 + (pn.wd - acc.pn.th) + 1/2acc.pn.th);
+ lft x1 = w - rt x3 = hround (1/2w - 2.5u);
+ x2 = x2' = 1/2[x1,x3];
+ draw z1{down} .. z2{right} .. z3{up};
+ % draw z1{down} .. z2'{right} .. z3{up};
+ labels(1,2,2',3);
+endchar;
+
+%}}}
+%{{{ tilde
+
+"tilde";
+ma_mark(code.mk.tilde);
+ z3 = (1/2w, 1/2[mark_t, mark_b]);
+ lft x1 = w - rt x5 = x3 - 3u;
+ x2 = 1/2[x1,x3]; x4 = 1/2[x3,x5];
+ top y2 = mark_t; bot y4 = mark_b;
+ bot y1 = 0.75[mark_t, mark_b];
+ top y5 = 0.75[mark_b, mark_t];
+ save p; path p; p = z1 ... z2{right} ... z3 ... z4{right} ... z5;
+ draw p;
+% penpos3(pn.wd - acc.pn.th, angle(direction 2 of p) + 90);
+% forsuffixes e=l,r: draw z2{right} ... z3e ... z4{right}; endfor
+ labels(1, 2, 3l, 3, 3r, 5);
+endchar;
+
+%}}}
+
+if lc_marks:
+ %{{{ dot, twodots
+
+"two-dots mark";
+ma_mark(code.mk.twodots);
+ 1/2[x1,x2] = 1/2w;
+ y1 = y2 = 1/2[mark_t, mark_b];
+ lft x2 = hround (1/2w - 1.5u - 1/2dot_wd);
+ draw_dot1; draw_dot2;
+ labels(1,2);
+endchar;
+
+"dot mark";
+ma_mark(code.mk.dot)
+ z1 = (1/2w, 1/2[mark_t, mark_b]);
+ draw_dot1;
+endchar;
+%}}}
+ %{{{ macrons
+"macron";
+ma_mark(code.mk.macron);
+ 1/2[x1,x2] = 1/2w; y1 = y2 = 1/2[mark_t, mark_b]; x2 - x1 = 4u;
+ draw z1 -- z2; labels(1,2);
+endchar;
+
+if known code.mk.maacron: "macron for 2-letter vowels";
+ma_mark(code.mk.maacron);
+ 1/2[x1,x2] = 1/2w; y1 = y2 = 1/2[mark_t, mark_b];
+ x2 - x1 = 8u;
+ draw z1 -- z2; labels(1,2);
+endchar;
+fi
+
+%}}}
+ if known code.mk.L_bar:
+ %{{{ bar for l-bar
+
+ma_char(code.mk.L_bar, 2u# + pn.wd#, 0.55cap_ht# + 1/2pn.ht#, 0pt#)(1/2,1)
+ top lft z1 = (l, h); top rt z2 = (r, h);
+ draw z1 -- z2;
+endchar;
+
+%ligtable code.mk.L_bar:
+% "l" kern -1sp# - l_sp*sp# - u# - pn.wd#,
+% "L" kern -2sp# - u# - pn.wd#;
+%}}} bar for l-bar
+ fi
+fi
+
+%{{{ cedilla
+
+ma_char(code.mk.cedilla,
+ if lc_marks: cedilla_wd#, 0pt#, cedilla_ht#
+ else: Cedilla_wd#, 0pt#, Cedilla_ht# fi)(1,1);
+ pickup mark_pn;
+ draw_cedilla(1/2w, 0, if lc_marks: cedilla_wd, cedilla_ht
+ else: Cedilla_wd, Cedilla_ht fi);
+endchar;
+
+%}}}
+%{{{ Cedilla and ogonek
+
+iff known code.mk.ogonek: "ogonek mark";
+ma_char(code.mk.ogonek, 0u#, 0v#, 3v#)(0,0);
+ pickup mark_pn;
+ z1 = (good.x (1/2w + u), h); % overlaps baseline
+ bot y3 - (pn.ht - acc.pn.th) = bot y2 = -d;
+ z2 = z1 + whatever * se; x3 = x2;
+ draw z1{down} ... z2 -- z3 ... z1{up};
+ labels(1,2,3);
+endchar;
+
+%% This version is too complicated
+%"cedilla";
+%ma_char(code.mk.cedilla, 0u#, 0v#,
+% if lc_marks: 3/4 fi desc_dp#)(0,0);
+% pickup mark_pn;
+% x1 = x2 = x4 = good.x (1/2w if not lc_marks: + 1/2u fi);
+% y1 = h; % overlaps baseline
+% top y2 = h - if lc_marks: 2/3v else: v fi;
+% bot y4 = -d; y3 = 1/2[y2,y4]; y5 = 1/6[y4, y2];
+% x5 = x1 - if lc_marks: 1.75u else: 2u fi;
+% x3 = good.x (x1 + if lc_marks: 2u else: 2.5u fi);
+% draw z1 -- z2{right} .. z3{down} .. z4{left} .. z5;
+% z5' = z5 + (pn.wd - acc.pn.th)*up;
+% z4' = z4 + (pn.ht - acc.pn.th)*up;
+% z3' = z3 + (pn.ht - acc.pn.th)*left;
+% draw z2{right} .. z3'{down} .. z4'{left} .. z5';
+% labels(1,2,3,4,5,3',4',5');
+%endchar;
+%}}}
+
+if known code.asper and lc_marks:
+%{{{ Asper and Lenis (they don't belong here)
+
+% pdc Wed. 20 Mar. 1991
+for bb := true, false: b := bb;
+ if b: "Greek asper, Arabic `ain, or Hebrew `ayin";
+ else: "Greek lenis, Arabic hamza, or Hebrew 'aleph";
+ fi
+ ma_char(if b: code.asper else: code.lenis fi
+ if not lc_marks: + 128 fi,
+ acc.pn.th# + 2u#, asc_ht#, 0v#)(0,0);
+ pickup mark_pn;
+ top y1 = mark_t; y2 = min (y1, 0.4[mark_t, mark_b]);
+ y1' = y1 - (pn.wd - acc.pn.th);
+ y2' = y2 - (pn.ht - acc.pn.th);
+ bot y3 = mark_b;
+ lftrt x2 = lftrt x2' = lr;
+ rtlft x1 = rtlft x1' = rtlft x3 plus u = rl;
+ draw z3{(x2' - x3, 0)} ... z2'{up} ... {(x1 - x2, 0)}z1'
+ -- z1{(x2 - x1, 0)} ... z2{down} ... {(x3 - x2, 0)}z3;
+ labels(1,2,3,1');
+ endchar;
+endfor
+%}}}
+fi
+%}}}
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/maparams.mf b/fonts/malvern/source/maparams.mf
new file mode 100644
index 0000000000..b8ca2fca0f
--- /dev/null
+++ b/fonts/malvern/source/maparams.mf
@@ -0,0 +1,219 @@
+% maparams.mf 1.2.0 1994/10/11 -- Set ad-hoc parameters
+% Copyright 1991-4 P. Damian Cugley.
+
+%%% @METAFONT-file {
+%%% filename = "maparams.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Define ad-hoc parameters for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ maparams.mf
+
+%{{{ meta-parameters (should be set before |\input ma|)
+
+boolean italic; % set if |italicness > 0| -- use italic letter-shapes
+
+if unknown italicness:
+ italic := false;
+ italicness := 0;
+elseif italicness > 0:
+ italic := true;
+else:
+ italic := false;
+fi
+% |italicness| is not referred to again
+
+if unknown hratio: hratio := 1; fi
+
+if unknown weight: weight := 1; fi
+
+if unknown slant: slant := 0; fi
+currenttransform := identity
+ if slant <> 0: slanted slant fi
+ if aspect_ratio <> 1.0: yscaled aspect_ratio fi;
+
+% Warning message if selected obliqued font
+if (slant <> 0) and (not italic):
+ message "Please use italic instead of obliqued.";
+ message "(Unless you know what you're doing!)";
+fi
+%}}} meta-paramaters
+%{{{ units of measurement
+v# = 1/16 designsize; % unit of vertical measurement NB 1/16, not 1/18
+
+u# = v# * hratio
+ if italic: * 0.95 fi; % unit of horizontal measurement
+
+sp# = 1.2u#
+ if designsize < 8pt#: * (8pt#/designsize) fi;
+ % unit of inter-charcter spacing
+
+ku# = 1/2[u#,sp#]; % unit of kerning
+%}}} units
+%{{{ heights and widths
+
+
+body_ht# = % height of tallest characters
+brack_ht# = % height of parentheses and other brackets
+asc_ht# = % height of ascenders on l.c.\ letters like d
+cap_ht# = % height of capital letters like X
+fig_ht# = 12v#; % height of ranging figures
+x_ht# = 8v#; % height of lower case letters like x
+axis_ht# = 5v#; % height of maths axis (rarely used)
+brack_dp# = 2v#; % depth of parentheses etc.
+ogonek_dp# = 2.5v#; % depth of Polish ogonek
+desc_dp# = % depth of descenders on letters like p
+body_dp# = 4v#; % depth of deepest characters
+
+% |body_ht + body_dp = 16v = designsize|
+% Large x-height; no built-in leading
+
+mcap_ht# = 7/8cap_ht#; % heigth of medium capitals
+scap_ht# = 3/4cap_ht#; % height of small capitals
+% Adobe's favoured value is |1/3[x_ht#,cap_ht#]|
+
+fig_wd# = 8u# - 2sp#; % width of ranging figures
+sfig_ht# = 9v#; % height of superior figures
+sfig_wd# = 2sfig.pn.wd# + 3.75u#; % width of same
+
+sup_x_ht# = 5.4v#; % x-height of superior letters
+sup_x_top# = 11v#; % superior letters raised so that x-height is here
+
+dot_wd# = 1.25v# * weight;
+dot_ht# = min(1.25v# * max(weight, 1), 3v#);
+
+bullet_wd# = (weight - 1)[4v#,6v#]; % not affected by hratio!
+bullet_ht# = (weight - 1)[4v#,6v#];
+
+ho# = oo# = 1/5v#; % overshoot for letter o
+o# = 2/3oo#; % overshoot for other curves
+apex_o# = 1/2o#; % overshoot for apexes
+apex_adjust# = 1/3u# * weight; % widen apexes by this much
+%}}}
+%{{{ pens
+
+% wd = width ht = height th = thickness
+% pn = pen (pen is a reserved word)
+
+pn.wd# = if italic: 0.8v# else: 0.9v# fi
+ * weight; % the default pen width
+
+% Lores hack:
+if italic and (round(pn.wd# * hppp) < 0.75v# * weight * hppp):
+ pn.wd# := 0.9v# * weight;
+fi
+
+comma.pn.th# = 4/5pn.wd#;
+yen.pn.th# = min(3/4pn.wd#, v#); % bar in yen sign
+ast.pn.th# = min(3/5pn.wd#, v#); % used in drawing asterisk
+dag.pn.th# = min(2/3pn.wd#, v#); % used in drawing dagger
+acc.pn.th# = min(pn.wd#, v#); % used drawing marks
+
+define_blacker_pixels(ast.pn.th, comma.pn.th, acc.pn.th);
+define_whole_vertical_blacker_pixels(dag.pn.th, yen.pn.th);
+pickup pencircle scaled acc.pn.th; mark_pn := savepen;
+% the others are used once each so don't |savepn| them
+
+cap.pn.wd# = pn.wd#; %%%% 1.10*pn.wd#;
+mcap.pn.wd# = pn.wd#; %%%% 1.05*pn.wd#;
+scap.pn.wd# = 1.00*pn.wd#;
+sfig.pn.wd# = 0.90*pn.wd#;
+
+% ht = wd unless this would cause counters to fill up etc.
+forsuffixes $$ = ,cap,mcap,scap:
+ $$pn.ht# = min(2v#, $$pn.wd#);
+endfor
+
+sfig.pn.ht# = min((sfig_ht# - 2v#)/3, sfig.pn.wd#);
+
+forsuffixes $$ = ,cap,mcap,scap,sfig:
+ define_whole_blacker_pixels($$pn.wd);
+ define_whole_vertical_blacker_pixels($$pn.ht);
+endfor
+
+% lowres hacks!
+if cap.pn.wd/pn.wd > 1.2:
+ cap.pn.wd := mcap.pn.wd := scap.pn.wd := pn.wd;
+ cap.pn.ht := mcap.pn.ht := scap.pn.ht := pn.ht;
+fi
+
+pickup pencircle xscaled pn.wd yscaled pn.ht;
+the_pen = savepen;
+
+%}}}
+%{{{ usual sizes of marks
+
+cap_mark_t# = body_ht# + 1.25v#;
+cap_mark_b# = mcap_ht# + 0.75v#;
+lc_mark_t# = body_ht#;
+lc_mark_b# = x_ht# + v#;
+
+% assuming body_ht# = 12v#, mcap_ht# = 10v#, mcap marks go from
+% 11v# to 13.5v# (2.5v#), so are flatter than l.c. marks.
+
+acute_wd# = 3u#;
+hook_wd# := pn.wd# + 1u#; % hook for tall letters like "d" and "t"
+
+% These are all kept unrounded, and rounded later
+
+cedilla_ht# = 3v#; cedilla_wd# = 3u#;
+Cedilla_ht# = 4v#; Cedilla_wd# = 4u#;
+
+%}}}
+%{{{ define_pixels
+
+define_pixels(sp,u,v);
+define_whole_pixels(apex_adjust, acute_wd, hook_wd);
+define_whole_vertical_pixels(brack_ht, body_ht, asc_ht, cap_ht, fig_ht,
+ mcap_ht, scap_ht, x_ht, desc_dp, body_dp, brack_dp, ogonek_dp,
+ sup_x_ht, sup_x_top,
+ sfig_ht, lc_mark_t, lc_mark_b, cap_mark_t, cap_mark_b);
+
+define_whole_blacker_pixels(dot_wd, bullet_wd);
+define_whole_vertical_blacker_pixels(dot_ht, bullet_ht);
+
+define_good_y_pixels(axis_ht);
+
+define_corrected_pixels(o, oo, apex_o);
+define_horizontal_corrected_pixels(ho);
+
+define_pixels(cedilla_ht, cedilla_wd, Cedilla_ht, Cedilla_wd);
+%}}}
+%{{{ Spacing of l.c. letters
+
+a_sp = 0.6;
+e_sp = o_sp;
+f_lsp = 0.35;
+f_rsp = (0.5sp# - 2u#)/sp#;
+i_sp = 1.0;
+j_sp = (1sp# - 1.75u#)/sp#;
+l_sp = 1.0;
+n_sp = 0.9;
+o_sp = 0.5;
+r_sp = 0.4;
+s_sp = 0.6;
+v_sp = 0.4;
+x_sp = 0.5;
+%}}}
+golden_ratio = 0.618034;
+lc_mark_ht = lc_mark_t - lc_mark_b;
+%}}} maparams.mf
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/mapunct.mf b/fonts/malvern/source/mapunct.mf
new file mode 100644
index 0000000000..03c859c8fd
--- /dev/null
+++ b/fonts/malvern/source/mapunct.mf
@@ -0,0 +1,308 @@
+% mapunct.mf 1.2.0 94/10/11 -- punctuation
+% Copyright 1991, 1993 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "mapunct.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Punctuation character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ mapunct.mf
+
+ang_brack_wd# := 1/2 * (brack_ht# + brack_dp# - pn.ht#) * hratio + pn.wd#;
+
+if testing: endinput; fi
+
+%{{{ Hyphen + dashes
+
+dash_ht# := golden_ratio*x_ht# + 1/2pn.ht#;
+
+def do_dash(expr code, w_sharp) =
+ ma_char(code, w_sharp - 2/3sp#, dash_ht#, 0pt#)(1/3,1/3);
+ draw (rt l, bot h) -- (lft r, bot h); set_ic_tr;
+ endchar
+enddef;
+
+if known code.hyphen: "hyphen"; do_dash(code.hyphen, 4u#); fi
+if known code.dup.hyphen: "spare hyphen"; do_dash(code.dup.hyphen, 4u#); fi
+if known code.en_dash: "short dash"; do_dash(code.en_dash, 8u#); fi
+if known code.em_dash: "long dash"; do_dash(code.em_dash, 16u#); fi
+
+%}}}
+%{{{ Dots and commas
+%{{{ How to draw a comma or inverted comma
+
+comma_ht# := 3v#; comma_wd# := 1u#;
+define_whole_vertical_pixels(comma_ht);
+define_whole_pixels(comma_wd);
+
+vardef draw_comma@#(expr up_p) =
+ pickup pencircle scaled comma.pn.th;
+ z@#z = (hround x@#, vround y@#);
+ % this makes z@#c good.x and z@#d good.y, because comma_wd integer
+ if up_p: bot else: top fi z@#d
+ = z@#z + comma_ht * if up_p: down else: up fi;
+ y@#c = 1/2[y@#z, y@#d];
+ if up_p: rt else: lft fi x@#c
+ = if up_p: x@#z + comma_wd else: x@#z - comma_wd fi;
+ 1/2[z@#a, z@#b] = z@#z;
+ z@#b = z@#a + (dot_wd - comma.pn.th)
+ * if up_p: (hratio, 1) else: (-hratio, -1) fi;
+ draw z@#d .. z@#c{if up_p: up else: down fi}
+ .. z@#b{(z@#z - z@#c) xscaled 2} .. z@#a{(z@#c - z@#z) xscaled 2}
+ .. z@#c{if up_p: down else: up fi} .. z@#d;
+ draw z@#d .. z@#c{if up_p: up else: down fi}
+ .. z@#z{(z@#z - z@#c) xscaled 2}; % fill in any hole in middle
+ labels(@#z, @#a, @#b, @#c, @#d)
+enddef;
+
+comma_dp# := comma_ht# - dot_ht# + 2o#;
+%}}}
+%{{{ .,:;
+
+def do_semicolon(expr code, t_p, comma_p) =
+ ma_char(code, if comma_p: comma_wd# + 1/2dot_wd# else: dot_wd# fi,
+ if t_p: x_ht# else: dot_ht# - 2o# fi,
+ if comma_p: comma_dp# else: 0pt# fi)(1,1);
+ z1 = (l + 1/2dot_wd, 1/2dot_ht - o);
+ if comma_p: draw_comma1(true) else: draw_dot1 fi;
+ if t_p: z2 = (x1, h - 1/2dot_ht + o); draw_dot2; fi
+ set_ic_tr;
+ endchar
+enddef;
+
+if known code.full_stop:
+ "full stop"; do_semicolon(code.full_stop, false, false); fi
+if known code.comma:
+ "comma"; do_semicolon(code.comma, false, true); fi
+if known code.comma1:
+ "spare comma"; do_semicolon(code.comma1, false, true); fi
+if known code.colon:
+ "colon"; do_semicolon(code.colon, true, false); fi
+if known code.semicolon:
+ "semicolon"; do_semicolon(code.semicolon, true, true); fi
+if known code.gr.question:
+ "Greek question mark"; do_semicolon(code.gr.question, true, true); fi
+
+%}}}
+%{{{ quotes
+
+iff known code.apostrophe: "apostrophe";
+ma_char(code.apostrophe, comma_wd# + 1/2dot_wd#, asc_ht#, 0pt#)(1,1);
+ z1 = (l + 1/2dot_wd, h - 1/2dot_ht + o); draw_comma1(true); set_ic_tr;
+endchar;
+
+iff known code.inv.comma: "inverted comma";
+ma_char(code.inv.comma, comma_wd# + 1/2dot_wd#, asc_ht#, 0pt#)(1,1);
+ z1 = (r - 1/2dot_wd, h - comma_ht + o); draw_comma1(false); set_ic_tr;
+endchar;
+
+iff known code.dbl.inv.comma: "double inverted comma";
+ma_char(code.dbl.inv.comma, 2comma_wd# + u# + dot_wd#, asc_ht#, 0pt#)(1,1);
+ z1 = (r - 1/2dot_wd, h - comma_ht + o); draw_comma1(false);
+ z2 = (x1 - comma_wd - 1/2dot_wd - u, y1); draw_comma2(false);
+ set_ic_tr;
+endchar;
+
+iff known code.dbl.apostrophe: "double apostrophe";
+ma_char(code.dbl.apostrophe, 2comma_wd# + u# + dot_wd#, asc_ht#, 0pt#)(1,1);
+ z1 = (l + 1/2dot_wd, h - 1/2dot_ht + o); draw_comma1(true);
+ z2 = (x1 + comma_wd + 1/2dot_wd + u, y1); draw_comma2(true);
+ set_ic_tr;
+endchar;
+
+iff known code.dbl.comma: "double comma";
+ma_char(code.dbl.comma, 2comma_wd# + u# + dot_wd#, asc_ht#,
+ comma_ht# - dot_ht# + 2o#)(1,1);
+ z1 = (l + 1/2dot_wd, 1/2dot_ht - o); draw_comma1(true);
+ z2 = (x1 + comma_wd + 1/2dot_wd + u, y1); draw_comma2(true);
+ set_ic_tr;
+endchar;
+
+%}}}
+
+iff known code.cdot: "raised dot";
+ma_char(code.cdot, dot_wd#, axis_ht# + dot_ht# - 2o#, 0pt#)(1,1);
+ z1 = (l + 1/2dot_wd, h - 1/2dot_ht + o);
+ draw_dot1; set_ic_tr;
+endchar;
+
+iff known code.gr.colon: "Greek colon";
+ma_char(code.gr.colon, dot_wd#, axis_ht# + dot_ht# - 2o#, 0pt#)(1,1);
+ z1 = (l + 1/2dot_wd, h - 1/2dot_ht + o);
+ draw_dot1; set_ic_tr;
+endchar;
+
+%}}}
+%{{{ brackets of different sorts
+
+def ma_brack(expr code, edoc, w_sh, lrsp, rlsp) =
+ ma_char(if b: code else: edoc fi, w_sh, brack_ht#, brack_dp#)
+ if b: (lrsp, rlsp) else: (rlsp, lrsp) fi
+enddef;
+
+for i = 0, 1: b := (i = 0);
+%{{{ parenthesis
+
+iff known code.paren.left: leftright "parenthesis";
+ma_brack(code.paren.left, code.paren.right, 4u#)(1,1/3);
+ numeric twist; twist = 3;
+ top rtlft z1 = (rl, h + o); bot rtlft z3 = (rl, -d - o);
+ y2 = 1/2[y1, y3]; lftrt x2 = lr;
+ draw z1{(z2 - z1) xscaled twist} .. z2 .. {(z3 - z2) xscaled twist}z3;
+ labels(1,2,3);
+ if b: set_ic_tr; else: set_ic 0.7charht; fi
+endchar;
+
+%}}}
+%{{{ bracket
+
+iff known code.brack.left: leftright "bracket";
+ma_brack(code.brack.left, code.brack.right, pn.wd# + 2u#)(1,1/3);
+ lftrt x2 = lftrt x3 = lr; rtlft x1 = rtlft x4 = rl;
+ top y1 = top y2 = h; bot y3 = bot y4 = -d;
+ draw z1 -- z2 -- z3 -- z4;
+ labels(1,2,3,4); set_ic_tr;
+endchar;
+
+%}}}
+%{{{ angle bracket
+
+iff known code.anglebr.left: leftright "angle bracket";
+ma_brack(code.anglebr.left, code.anglebr.right, ang_brack_wd#)(1,0);
+ top rtlft z1 = (rl, h);
+ bot rtlft z3 = (rl, -d);
+ lftrt z2 = (lr, 1/2[-d, h]);
+ draw z1 -- z2 -- z3;
+ labels(1,2,3);
+ if b: set_ic_tr; else: set_ic 1/2[brack_ht#, brack_dp#]; fi
+endchar;
+
+%}}}
+%{{{ brace
+
+iff known code.brace.left: leftright "brace";
+ma_brack(code.brace.left, code.brace.right, 6u#)(1/2,1/3);
+ if 1/2[-d,h] <> good.y 1/2[-d,h]: change_depth; fi
+ rtlft x1top = rtlft x1bot = rl;
+ lftrt x1mid = lr; y1mid = y2mid = 1/2[-d, h];
+ top y1top = top y2top = h; bot y1bot = bot y2bot = -d;
+ x3top = x4top = x3bot = x4bot = good.x 0.45[x1mid, x1top];
+ x2top = x2bot = 3/4[x3top, x1top];
+ x2mid = 3/4[x4top, x1mid];
+ z3top = z2top + whatever*(plus hratio,1);
+ z4top = z2mid + whatever*(plus hratio,1);
+ z3bot = z2bot + whatever*(minus hratio,1);
+ z4bot = z2mid + whatever*(minus hratio,1);
+ draw z1top --- z2top .. z3top --- z4top .. z2mid --- z1mid
+ --- z2mid .. z4bot --- z3bot .. z2bot --- z1bot;
+ labels(forsuffixes $=top, bot: 1$, 2$, 3$, 4$, endfor 1mid, 2mid);
+ if b: set_ic_tr; else: set_ic 1/2[brack_ht#, brack_dp#]; fi
+endchar;
+
+%}}}
+endfor
+%}}}
+%{{{ exclam. and question marks
+
+iff known code.exclam: "exclamation mark";
+ma_char(code.exclam, max(pn.wd#, dot_wd#), cap_ht#, 0pt#)(5/4,5/4);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ z1 = (1/2w, 1/2dot_ht - o); draw_dot1;
+ bot y2 = max(dot_ht + 2v, 1/4[-d, h]); top y3 = h + o;
+ x2 = x3 = 1/2w;
+ draw z2 -- z3;
+ labels(1,2,3); set_ic_tr;
+endchar;
+
+iff known code.inv.exclam: "inverted exclamation mark";
+ma_char(code.inv.exclam, max(pn.wd#, dot_wd#), x_ht#, desc_dp#)(5/4,5/4);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ z1 = (1/2w, h - 1/2dot_ht + o); draw_dot1;
+ top y2 = min(h - dot_ht - 2v, 1/4[h, -d]); bot y3 = -d - o;
+ x2 = x3 = 1/2w;
+ draw z2 -- z3;
+ labels(1,2,3); set_ic_tr;
+endchar;
+
+def draw_question expr bb =
+ b := bb;
+ topbot y2 = hd plus o; rtlft x3 = rl; lftrt x1 = lr;
+ x2 = x4 = x6 = 0.55[x3, x1];
+ y6 = y7 = good.y maxmin(dh plus dot_ht plus 2v, 1/4[dh, hd]);
+ y3 = 1/2[y2,y4]; y5 = 1/2[y6,y4];
+ y4 = good.y (2/3[y2,y6]);
+ y1 = hd minus v;
+ x7 = x6 plus u; x5 = good.x (x6 minus 1.5u);
+ draw z1 ... z2{(x3 - x1, 0)}
+ ... z3{(0, y4 - y2)} ... z4
+ ... z5{(0, y6 - y4)} ... z6 --- z7;
+ z0 = (x2, dh plus 1/2dot_ht minus o); draw_dot0;
+ labels(0, 1,2,3,4,5,6,7);
+enddef;
+
+iff known code.question: "question mark";
+ma_char(code.question, 7u#, cap_ht#, 0v#)(1/2,2/3);
+ draw_question true; set_ic 0.9h#;
+endchar;
+
+iff known code.inv.question: "inverted question mark";
+ma_char(code.inv.question, 7u#, x_ht#, desc_dp#)(2/3,1/2);
+ draw_question false; set_ic 0.6h#;
+endchar;
+
+%}}}
+%{{{ Guillemets
+
+guil_wd# := 1/2(x_ht# - pn.ht#)*hratio + pn.wd#;
+guil_adj# := -u#;
+define_whole_pixels(guil_wd, guil_adj);
+
+vardef guil@#(expr leftx) =
+ lftrt x@#2 = good.x leftx plus eps; y@#2 = good.y 1/2[-d, h];
+ z@#1 = z@#2 + whatever * if b: ne else: se fi;
+ z@#3 = z@#2 + whatever * if b: se else: ne fi;
+ x@#1 = x@#3; bot y@#3 = -d;
+ draw z@#1 -- z@#2 -- z@#3;
+ labels(@#1, @#2, @#3);
+enddef;
+
+for i = 0,1: b := (i = 0);
+ iff known code.guillemet.single.left: leftright "single guillemet";
+ ma_char(if b: code.guillemet.single.left
+ else: code.guillemet.single.right fi,
+ guil_wd#, x_ht#, 0v#)
+ if b: (1,1/2) else: (1/2,1) fi;
+ guil(lr);
+ if b: set_ic_tr; else: set_ic 1/2x_ht#; fi
+ endchar;
+
+ iff known code.guillemet.left: leftright "guillemet";
+ ma_char(if b: code.guillemet.left else: code.guillemet.right fi,
+ 2guil_wd# + guil_adj#, x_ht#, 0v#)
+ if b: (1,1/2) else: (1/2,1) fi;
+ guil$(lr); guil#(lr plus guil_wd plus guil_adj);
+ if b: set_ic_tr; else: set_ic 1/2x_ht#; fi
+ endchar;
+endfor
+
+%}}}
+%}}}
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/mascript.mf b/fonts/malvern/source/mascript.mf
new file mode 100644
index 0000000000..5d91b36929
--- /dev/null
+++ b/fonts/malvern/source/mascript.mf
@@ -0,0 +1,39 @@
+%{{{ script caps for Malvern
+%{{{ curly bits
+
+curl_ht# := 5v#; curl_wd# := 2.5u#;
+define_whole_pixels(curl_wd);
+define_whole_vertical_pixels(curl_ht);
+
+vardef curl_pts@#(expr left, bottom) =
+ x2@# - x1@# = x2@# - x3@# = (curl_wd - 1/2pn.wd) if left: * -1 fi;
+ y3@# - y1@# = (curl_ht - pn.ht) if bottom: * -1 fi;
+ y2@# = 1/2[y1@#, y3@#];
+ if left: lft x2@# = l; else: rt x2@# = r; fi
+ if bottom: bot y3@# = -d; else top y3@# = h; fi
+ labels(1@#, 2@#, 3@#);
+enddef;
+
+vardef curl_path@# =
+ z1@#{(x2@# - x1@#, 0)} .. z2@# .. {(x3@# - x2@#, 0)}z3@#
+enddef;
+
+vardef curl_pts_path@#(expr left, bot) =
+ curl_pts@#(left, bot);
+ curl_path@#
+enddef;
+%}}}
+
+"script capital A";
+ma_char("A", 4/5width#, height#, 0v#)(1/2,1);
+ curl_pts(true, true);
+ rt x7 = rt x8 = r; x6 = lft x7;
+ top y6 = top y7 = h; bot y8 = -d;
+ z4 - z3 = z6 - z5 = whatever*(z6 - z3) xscaled 1.2; x4 = x5;
+ if y5 < y4: y5 - eps := y4 + eps := 1/2[y4, y5]; fi
+ x9 = 1/2[x5, x8]; y9 = 0.3[-d, h];
+ y11 = y10 = good.y 0.45[-d, h]; lft x11 = r; lft x10 = 1/4[x1,x4];
+ draw curl_path .. z4 --- z5 .. z6 -- z7 -- z8{up} .. z9 .. z10;
+ labels(4,5,6,7,8,9,10);
+endchar;
+%}}}
diff --git a/fonts/malvern/source/masenc.mf b/fonts/malvern/source/masenc.mf
new file mode 100644
index 0000000000..9ffae45429
--- /dev/null
+++ b/fonts/malvern/source/masenc.mf
@@ -0,0 +1,109 @@
+% masenc.mf 1.2.0 1994/10/11 -- standard TeX encoding
+% Copyright 1994 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "masenc.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Encodign definition for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ masenc.mf 1.2.0 1994/10/11
+%{{{ cap Greek letters
+
+code.gr.cap.gamma = 0;
+code.gr.cap.delta = 1;
+code.gr.cap.theta = 2;
+code.gr.cap.lambda = 3;
+code.gr.cap.xi = 4;
+code.gr.cap.pi = 5;
+code.gr.cap.sigma = 6;
+code.gr.cap.upsilon = 7;
+code.gr.cap.phi = 8;
+code.gr.cap.psi = 9;
+code.gr.cap.omega = 10;
+
+%}}}
+%{{{ ligatures & specials
+
+code.lc.f.f = 11;
+code.lc.f.i = 12;
+code.lc.f.l = 13;
+code.lc.f.f.i = 14;
+code.lc.f.f.l = 15;
+code.lc.dotless_i = 16;
+code.lc.dotless_j = 17;
+code.lc.eszet = 25;
+code.lc.ae = 26;
+code.lc.oe = 27;
+code.lc.o.slash = 28;
+code.cap.ae = 29;
+code.cap.oe = 30;
+code.cap.o.slash = 31;
+
+%}}}
+%{{{ marks for composite letters
+
+code.mk.grave = 18;
+code.mk.acute = 19;
+code.mk.hook = 20;
+code.mk.breve = 21;
+code.mk.macron = 22;
+code.mk.ring = 23;
+code.mk.circumflex= 94;
+code.mk.dot = 95;
+code.mk.hungarian= 125;
+code.mk.tilde = 126;
+code.mk.twodots = 127;
+
+code.mk.cidella = 24;
+code.mk.L_bar = 32;
+
+%}}}
+%{{{ punctuation
+
+input ascii
+code.dbl.apostrophe = 34;
+code.hyphen = ASCII"-";
+code.inv.exclam = 60;
+code.inv.question = 62;
+code.dbl.inv.comma = 92;
+code.en_dash = 123;
+code.em_dash = 124;
+
+%}}}
+
+code.offset.LS = 0;
+
+for i = ASCII"a" step 1 until ASCII"z":
+ scantokens ("code.lc." & char i) = i;
+ scantokens ("code.cap." & char i) = i - 32;
+endfor
+
+if encoding = 26:
+ code.zero.old_style = ASCII "0";
+ font_coding_scheme "TeX text with old-style numerals";
+else:
+ code.zero = ASCII"0";
+ font_coding_scheme "TeX text";
+fi
+
+%}}} standard TeX encoding
+
+% Local variables:
+% fold-folded-p: t
+% End:
diff --git a/fonts/malvern/source/masyms.mf b/fonts/malvern/source/masyms.mf
new file mode 100644
index 0000000000..4e96a4344a
--- /dev/null
+++ b/fonts/malvern/source/masyms.mf
@@ -0,0 +1,779 @@
+% masyms.mf 1.2.0 1994/10/11 -- misc. symbols for the Malvern font
+% Copyright 1991, 1992, 1993 P. Damian Cugley
+
+%%% @METAFONT-file {
+%%% filename = "masyms.mf",
+%%% version = "1.2.0",
+%%% date = "1994/10/11",
+%%% package = "Malvern 1.2",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Miscellaneous character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+%{{{ masyms.mf
+%{{{ Start a symbol char which is symmetrical about axis_ht
+
+def ma_sym(expr code, w_sh, h_sh) =
+ ma_char(code, w_sh, axis_ht# + 1/2 * h_sh,
+ max(0, -(axis_ht# - 1/2 * h_sh)))(1,1);
+ if 1/2[l,r] <> good.x 1/2[l,r]: change_width; fi
+ x.m = 1/2[x.l, x.r]; y.m = 1/2[y.t, y.b];
+ top y.t = axis_ht + (axis_ht - bot y.b) = h;
+ lft x.l = w - rt x.r = l;
+enddef;
+%}}}
+
+if testing: endinput; fi
+
+%{{{ plus, minus
+
+iff known code.plus_sign: "plus sign";
+ma_sym(code.plus_sign, 8u#, 8v#);
+ draw (x.l, axis_ht) -- (x.r, axis_ht);
+ draw (x.m, y.t) -- (x.m, y.b);
+ set_ic axis_ht#;
+endchar;
+
+iff known code.minus_sign: "minus sign";
+ma_sym(code.minus_sign, 8u#, 8v#);
+ draw (x.l, axis_ht) -- (x.r, axis_ht); set_ic axis_ht#;
+endchar;
+
+%}}}
+%{{{ equals sign
+
+iff known code.equals: "equals sign";
+ma_sym("=", 8u#, 4v#);
+ draw_box_t; draw_box_b; set_ic axis_ht# + 2v#;
+endchar;
+
+%}}}
+%{{{ degree sign
+
+iff known code.degree: "degree sign";
+ma_char(code.degree, 4u#, body_ht#, 0pt#)(1/2,1/2);
+ draw_circle(l, h + oo, r, vround(h - 4v + oo));
+ set_ic h# - 1.5v#;
+endchar;
+
+%}}}
+%{{{ Various currency symbols
+
+iff known code.dollar: "dollar sign";
+ma_char("$", 6u#, fig_ht#, 0pt#)(1,1);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ x1bar = x2bar = x3bar = x4bar = 1/2[l, r];
+ top y1bar = h + o; bot y4bar = -d -o;
+ y2bar = vround (1/2[-d, h] + 1/2x_ht);
+ y3bar = vround (1/2[-d, h] - 1/2x_ht);
+ draw_S(y2bar, y3bar)(0.5, 1/16, 1/12);
+ draw z1bar -- z2bar; draw z3bar -- z4bar;
+ set_ic 1/2[-chardp,charht] + 1/2x_ht#; % this is too much
+ charic := max(0, charic - 1/2u#); % fudge
+ labels(1bar, 2bar, 3bar, 4bar);
+endchar;
+
+iff known code.cent: "cent sign";
+ma_sym(code.cent, 6u#, 11v#);
+ x1bar = x2bar = x3bar = x4bar = 0.55[l,r] - eps;
+ y1bar = y.t; y4bar = y.b;
+ y2bar = axis_ht + 3.5v; y3bar = axis_ht - 3.5v;
+ draw z1bar -- z2bar; draw z3bar -- z4bar;
+ draw_C(l, y2bar, r, y3bar) 1/12;
+ set_ic axis_ht# + 3.5v#;
+ charic := max(0, charic - 1/4u#); % fudge
+ labels(1bar, 2bar, 3bar, 4bar)
+endchar;
+
+iff known code.yen: "yen sign";
+ma_char(code.yen, 8u#, fig_ht#, 0pt#)(1,1);
+ draw_Y(0.55[-d, h]);
+ pickup pencircle scaled yen.pn.th;
+ top y5 = top y6 = vround y2;
+ y7 = y8 = good.y (y5 - pn.ht - 1/2v);
+ x6 - x5 = x8 - x7 = 1/2(r - l) + eps;
+ 1/2[x5, x6] = 1/2[x7, x8] = x2;
+ draw z5 -- z6; draw z7 -- z8;
+ labels(5,6,7,8); set_ic_tr;
+endchar;
+
+def ear_pt(suffix $, @) = ((1/sqrt2)[x@,x$], (1/sqrt2)[y$,y@]) enddef;
+
+iff known code.currency: "ISO-646 currency sign";
+ma_char(code.currency, 7u#, 11v#, 0pt#)(1,1);
+ draw_circle(l, vround(1/2[-d,h] + 3.5v), r, vround(1/2[-d,h] - 3.5v));
+ x0ear1 = x3ear1 = x0; x1ear1 = x2ear1 = x2;
+ top y0ear1 = top y1ear1 = h + o;
+ y2ear1 = y3ear1 = 2[y0ear1, 1/2[-d,h]];
+ z0ear2 = ear_pt(0,1); z1ear2 = ear_pt(2,1);
+ z2ear2 = ear_pt(2,3); z3ear2 = ear_pt(0,3);
+ forsuffixes $ = 0,1,2,3: draw z$ear1 -- z$ear2; endfor
+ set_ic_tr;
+ labels(forsuffixes $=0,1,2,3: $ear1, $ear2, endfor, 99)
+endchar;
+
+iff known code.sterling: "pounds sterling sign";
+ma_char(code.sterling, 8u#, asc_ht#,
+ if italic: 1/2desc_dp# else: 0v# fi)(1,1);
+ top y2 = h + o; bot y6 = bot y7 = -d; y5 = y6 + apex_adjust;
+ lft x5 = lft x6 = l; rt x7 = r;
+ rt x1 = 0.875[l,r]; x2 = 0.55[x3, x1]; x3 = x4 = good.x 0.25[l,r];
+ z2 = z3 + whatever*(hratio,1);
+ y4 = 0.3[-d, h]; y1 = 0.25[y2, y3];
+ draw z1 .. z2{left} .. z3 --- z4 .. z5 -- z6 -- z7;
+ y1bar = y2bar = good.y 0.48[-d, h];
+ x1bar = 0.4[x5, x4]; x2bar = 0.4[x2,x1];
+ draw z1bar -- z2bar;
+ labels(1,2,3,4,5,6,7, 1bar, 2bar);
+ set_ic_tr;
+ charic := max(0, charic - u#); % fudge
+endchar;
+
+%}}}
+%{{{ (C) and (R)
+
+width# := 12u#; height# := 12v#; % for set_ic_O
+
+iff known code.copyright: "copyright sign";
+ma_char(code.copyright, 12u#, 12v#, 0pt#)(1/2,1/2);
+ draw_C(hround (1/2w - 3.6u), vround (1/2[-d,h] + 3.5v),
+ hround (1/2w + 2.4u), vround (1/2[-d,h] - 3.5v)) 1/12;
+ draw_circle.circle(l - ho, h + oo, r + ho, -d - oo);
+ set_ic_O;
+endchar;
+
+iff known code.registered: "registered trademark sign";
+ma_char(code.registered, 12u#, 12v#, 0v#)(1/2,1/2);
+ draw_circle.circle(l - ho, h + oo, r + ho, -d - oo);
+ z0 = 1/2[(l, h), (r, -d)];
+ lft x1stem = lft x2stem = lft x3stem = hround (x0 - 3u);
+ rt x2bowl = x2tail = hround (x0 + 3u);
+ top y1stem = top y1bowl = vround (y0 + 3.5v);
+ bot y3stem = bot y2tail = vround (y0 - 3.5v);
+ y3bowl = y2stem = y1tail = good.y (y0 - 1/2v);
+ y2bowl = 1/2[y1bowl, y3bowl];
+ z1bowl = z2bowl + whatever*(-hratio, 1);
+ z3bowl = z2bowl + whatever*(hratio, 1);
+ z1tail = z2tail + whatever*(-hratio,1);
+ draw z3stem -- z1stem --- z1bowl .. z2bowl .. z3bowl --- z2stem;
+ draw z1tail -- z2tail;
+ labels(1stem, 2stem, 3stem, 1bowl, 2bowl, 3bowl, 1tail, 2tail);
+ set_ic_O;
+endchar;
+
+%}}}
+%{{{ hash mark
+
+iff known code.hash: "hash mark"; % or number sign etc.
+ma_char(code.hash, 8u#, fig_ht#, if italic: 1/2desc_dp# else: 0v# fi)(1,1);
+ top y1a = top y2b = h + o; bot y2a = bot y1b = -d - o;
+ lft x1d = l; rt x2c = r;
+ x1a = w - x1b = good.x 0.35[l,r]; x2b = w - x2a = good.x 0.775[l,r];
+ y1c = y2c = good.y 0.3[h, -d];
+ y1d = y2d = h - y1c - d;
+ z1c = z1d + whatever*(z1a - z2a); z2c = z2d + whatever*(z1a - z2a);
+ forsuffixes $ = a,b,c,d: draw z1$ -- z2$; labels(1$, 2$); endfor
+ set_ic 0.3[charht, -chardp];
+endchar;
+
+%}}}
+%{{{ ampersand
+
+iff known code.ampersand: "ampersand";
+ma_char(code.ampersand, 8u#, asc_ht#, 0v#)(2/3,1/2);
+ top y2a = h + o; lft x2b = l; bot y3b = -d - o; bot rt z5a = (r, -d - o);
+ x1a = x3a + 3u; y1a = y2a - 1/2v;
+ x2a = 0.55[x3a, x1a];
+ x3a = good.x 1/6[l,r]; y3a = 1/2[x_ht, h];
+ z4a - (x2a, y3a) = (1/sqrt2)*(x3a - x2a, y3a - y2a);
+ % z4a is tangent to circle through z2a and z3a
+ draw z1a ... z2a{left} ... z3a{down} ... z4a --- z5a;
+ z1b = whatever[z4a, z5a]; top y1b = x_ht;
+ x3b = 0.45[l,r]; z3b = z2b + whatever*se;
+ z4b = (9/10[l,r], 1/2[-d, h]);
+ draw z1b ... z2b{down} ... z3b{right} ... z4b{up};
+ labels(1a, 2a, 3a, 4a, 5a, 1b, 2b, 3b, 4b);
+ set_ic 1/2h#;
+endchar;
+
+%}}}
+%{{{ asterisk(s)
+
+for nlobes = 5,6,7,8,9:
+ if known code.asterisk[nlobes]:
+ decimal nlobes & "-lobed asterisk";
+ ma_char(code.asterisk[nlobes], 6u#, body_ht#, 0v#)(1/2,1/2);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ z.m = (1/2w, good.y (h - 3v));
+ pickup pencircle scaled ast.pn.th;
+ top z0 = (x.m, h + o);
+ for i = 1 upto nlobes - 1:
+ z[i] = z.m + (y0 - y.m) * dir(360*i/nlobes + 90)
+ xscaled hratio;
+ endfor
+ for i = 0 upto nlobes - 1:
+ penpos[i](pn.wd - ast.pn.th, 360*i/nlobes);
+ draw z.m --- z[i]l ... z[i]r --- z.m;
+ penlabels([i]);
+ endfor
+ set_ic h# - 2v#;
+ endchar;
+ fi
+endfor
+
+%}}}
+%{{{ slash and backslash
+
+iff known code.slash: "slash";
+ma_char(code.slash, 7u#, brack_ht#, brack_dp#)(1/3,1/3);
+ draw top rt (l, -d - o) -- bot lft (r, h + o);
+ set_ic_tr;
+endchar;
+
+iff known code.fraction: "slash for fractions";
+ma_char(code.fraction, 7u#, brack_ht#, brack_dp#)(-1,-1);
+ draw top rt (l, -d - o) -- bot lft (r, h + o);
+ set_ic_tr;
+endchar;
+
+iff known code.backslash: "backslash";
+ma_char(code.backslash, 7u#, brack_ht#, brack_dp#)(1/3,1/3);
+ draw top lft (r, -d - o) -- bot rt (l, h + o);
+ set_ic chardp;
+endchar;
+
+%}}}
+%{{{ daggers
+
+vardef dagger_bar@#(expr midy) =
+ pickup pencircle scaled dag.pn.th;
+ y1@# = y2@# = vround (midy + 1/2dot_wd) - 1/2dot_wd;
+ x1@# = w - x2@# = hround (l + 1/2dot_wd) + 1/2dag.pn.th;
+ penpos1@#(dot_wd - dag.pn.th, 90); penpos2@#(dot_wd - dag.pn.th, -90);
+ draw z1@#l --- z2@#l ... z2@#r --- z1@#r ... cycle;
+ draw z1@# -- z2@#;
+ penlabels(1@#,2@#);
+enddef;
+
+def ma_dagger(expr code) expr bot_bar_p =
+ ma_char(code, 6u#, asc_ht#, 1/2desc_dp#)(1/2,1/2);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ draw (1/2w, h - 1/2pn.ht + o) -- (1/2w, -d + 1/2pn.ht - o);
+ if bot_bar_p:
+ dagger_bar.top(1/4[h, -d]);
+ dagger_bar.bot(1/4[-d, h]);
+ set_ic 1/4[charht, chardp];
+ else:
+ dagger_bar(0.3[h, -d]);
+ set_ic 0.3[charht, chardp];
+ fi
+ endchar
+enddef;
+
+if known code.dagger: "dagger"; ma_dagger(code.dagger) false; fi
+if known code.dbl.dagger: "double dagger"; ma_dagger(code.dbl.dagger) true; fi
+
+%}}}
+%{{{ at sign (@)
+
+iff known code.at_sign: "at sign";
+ma_char(code.at_sign, 12u#, cap_ht#, 0v#)(1/2,1/2);
+ lft z2 = (l - o, 1/2[-d, h]); rt z4 = (r + o, y2);
+ top z3 = (1/2[l,r], h + o); bot y1 = -d - o;
+ y10 = y6 = good.y 0.275[-d, h]; % bot of `a' part
+ x1 = x8 = x10 = x3;
+ rt x6 = 1/12[r, l];
+ y9 = y7 = 1/2[-d, h];
+ y8 = good.y 2[y10, y9];
+ x9 = w - x7 = good.x max(0.275[l, r],
+ rt x2 + 1/4(r - l - 4pn.wd) + 1/2pn.wd);
+ bot z0 = (good.x 0.85[l,r], good.y 1/24[-d, h]);
+ draw z0 ... z1{left} ... z2{up} ... z3{right} ... z4{down}
+ ... z6{left}
+ ... z7{up} ... z8{left} ... z9{down} ... z10{right} ... z7{up};
+ labels(range 0 thru 10);
+ set_ic 0.7h#;
+endchar;
+
+%}}}
+%{{{ Paragraph sign (\P)
+
+iff known code.paragraph: "paragraph sign";
+ma_char(code.paragraph,
+ 2.5pn.wd# + if italic: 5.5u# else: 5u# fi,
+ cap_ht#,
+ if italic: 1/2desc_dp# else: 0v# fi)(1/2,1);
+ top rt z1c = (r, h); y1a = y1b = y2c = y1c; % points at top
+ bot y2a = bot y2b = -d - o; % points at bot
+ x1a = x2a = good.x (r - 1/2pn.wd - u);
+ x1b = x2b = x2c = x4c = good.x (x1a - pn.wd - 1.5u);
+ lft x3c = l; y3c = 1/2[y2c, y4c]; z3c = z2c + whatever*ne;
+ if y4c < 1/2[-d,h]:
+ y4c := (vround 1/2[-d,h]); y3c := 1/2[y2c, y4c];
+ fi
+ draw z2a -- z1a -- z1b -- z2b; draw z1c -- z2c;
+ if false: filldraw else: draw fi
+ z2c{left} ... z3c{down} ... z4c{right} -- cycle;
+ labels(1a, 1b, 2a, 2b, 1c, 2c, 3c, 4c);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ Section sign (\S)
+
+iff known code.section: "section sign";
+ma_char(code.section, 6u#, cap_ht#,
+ if italic: 1/2desc_dp# else: 0v# fi)(1,1);
+ z0 = 1/2[(l,h), (r,-d)]; % centre
+ draw_circle.o(l, vround (y0 + 3v), r, vround (y0 - 3v));
+ rt x1a = w - lft x1b = hround 0.9[l,r];
+ lft x3a = l + ho; rt x3b = r - ho;
+ top y2a = top y1a + 1/2v = h + o;
+ bot y2b = bot y1b - 1/2v = -d - o;
+ if italic:
+ z4a = z1o; z4b = z3o;
+ y3a = 1/2[y2a, y4a]; y3b = 1/2[y2b, y4b];
+ else:
+ y3a = 2/3[y2a, y1o]; y3b = 2/3[y2b, y3o];
+ z4a = (1/sqrt2)[z0, (x2o, y1o)];
+ z4b = (1/sqrt2)[z0, (x0o, y3o)];
+ fi
+ forsuffixes $ = a,b:
+ x2$ = x0;
+ draw z1$ ... z2${(x2$ - x1$, 0)} ... z3${(0, y3$ - y2$)} ... z4$;
+ labels(1$, 2$, 3$, 4$);
+ endfor;
+ set_ic_tr;
+ charic := max(0, charic - 1/2u#); %% fudge city
+endchar;
+
+%}}}
+%{{{ Trade mark sign
+
+iff known code.trademark: "trade mark sign";
+ma_char(code.trademark, 3pn.wd# + sp# + 7u#, body_ht#, 0v#)(1/3,1/2);
+ bot y4t = bot y1m = bot y5m = vround (h - 6u);
+ top y1t = top y2t = top y3t = h;
+ top y2m = top y4m = h + o;
+ lft x1t = l; rt x4m = rt x5m = r;
+ x2m = x1m = good.x 1/2[l,r];
+ rt x2t = hround (lft x2m - sp);
+ if 1/2[x1t, x2t] <> good.x 1/2[x1t, x2t]: x2t := x2t + 1; fi
+ x3t = x4t = 1/2[x1t, x2t];
+ z3m = z2m + whatever*se; z3m = z4m + whatever*ne;
+ if y3m < y1m: y3m := y1m; fi
+ draw z1t -- z2t; draw z3t -- z4t;
+ draw z1m -- z2m -- z3m -- z4m -- z5m;
+ labels(1t, 2t, 3t, 4t, 1m, 2m, 3m, 4m, 5m);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ florin
+
+% I can't get anyone to tell me one way or the other whether
+% the florin sign is usually simply an italic `f' or is a special
+% symbol unto itself.
+% All the times I've seen it in print, it's simply been an italic `f'.
+% But since it is now a feature of the standard PostScript encoding
+% is is appearing more and more often in `real' fonts.
+% So, what the hey, here's another character
+% slot used up...
+
+iff known code.florin: "florin sign";
+ma_char(code.florin, 3pn.wd# + 4u#, fig_ht#, desc_dp#)(1/2,1/2);
+ if 1/2[l,r] <> good.x 1/2[l,r]: change_width; fi
+ top y2 = h + oo; bot y5 = -d - oo;
+ lft x6 = lft x7 = l; rt x0 = rt x1 = r;
+ x3 = x4 = 1/2[l,r]; x2 = 1/2[x1,x3]; x5 = 1/2[x4,x6];
+ h - y1 = h - y3 = y4 - (-d) = y6 - (-d); z2 = z1 + whatever*se;
+ h - bot y0 = top y7 - (-d) = max(h - bot y1, vround 1/16(h + d));
+ draw z0 --- z1 .. z2 .. z3 --- z4 .. z5 .. z6 --- z7;
+ top y1bar = top y2bar = hround (golden_ratio[-d,h] + 1/2pn.ht);
+ lft x1bar = good.x (lft x3 - 3/2u);
+ rt x2bar = good.x (rt x3 + 2u);
+ draw z1bar -- z2bar;
+ labels(range 0 thru 7, 1bar, 2bar);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ multiplication sign
+
+iff known code.multiply: "multiplication sign";
+ma_char(code.multiply, 8u#/sqrt2, axis_ht# + 4v#/sqrt2,
+ -min(0, axis_ht# - 4v#/sqrt2))(x_sp,x_sp);
+ box_points;
+ 1/2[z1,z2] = 1/2[z3,z4] = (1/2w, axis_ht);
+ z2 = z1 + whatever*se; z3 = z4 + whatever*ne;
+ top y1 = top y3 = h;
+ draw z1 -- z2; draw z3 -- z4;
+ labels(1,2,3,4); set_ic_tr;
+endchar;
+
+%}}}
+%{{{ per cent sign and similar
+
+ring_wd# := 5u#; ring_wd'# := 5.25u#;
+ring_ht# := 5v#; ring_ht'# := 5.25v#;
+define_whole_pixels(ring_wd, ring_wd');
+define_whole_vertical_pixels(ring_ht, ring_ht');
+lowres_fix(ring_wd, ring_wd') 1.2;
+lowres_fix(ring_ht, ring_ht') 1.2;
+
+iff known code.percent: "per cent sign";
+ma_char(code.percent, 8u#, asc_ht#, if italic: 1/2desc_dp# else: 0v# fi)(1,1);
+ draw_circle.top(l - ho, h + oo,
+ l + ring_wd + ho, h - ring_ht - oo);
+ draw_circle.bot(r - ring_wd' - ho, -d + ring_ht' + oo,
+ r + ho, -d - oo);
+ z4top = 1/2[z0top, z2top]; z4bot = 1/2[z0bot, z2bot];
+ 1/2[z1, z2] = 1/2[z4top, z4bot];
+ z1 - z2 = whatever*(y4bot - y4top, x4top - x4bot)
+ if italic: yscaled 2 fi;
+ % line is at rt angles to line joining circles
+ lft x1 = l; draw z1 -- z2;
+ labels(1,2);
+ set_ic 1/2[charht, chardp] + if italic: 2 else: 1 fi * 4v#;
+endchar;
+
+iff known code.per_thousand_zero:
+ "ring to stick on per-cent to make per-mille";
+ma_char(code.per_thousand_zero, ring_wd#,
+ if italic: ring_ht# - 1/2desc_dp# else: ring_ht# fi,
+ if italic: 1/2desc_dp# else: 0v# fi)(0, 1);
+ draw_circle(r - ring_wd' - ho, -d + ring_ht' + oo,
+ r + ho, -d - oo);
+endchar;
+
+%{{{ c/o sign
+
+iff known code.care_of: "care of sign";
+ma_char(code.care_of, 8u#, asc_ht#,
+ if italic: 1/2desc_dp# else: 0v# fi)(1,1);
+ draw_C.top(l - ho, h + oo,
+ l + 7/8ring_wd + ho, h - ring_ht - oo) 1/20;
+ draw_circle.bot(r - ring_wd' - ho, -d + ring_ht' + oo,
+ r + ho, -d - oo);
+ z.cent.top = 1/2[z2top, z4top]; z.cent.bot = 1/2[z0bot, z2bot];
+ 1/2[z1, z2] = 1/2[z.cent.top, z.cent.bot];
+ z1 - z2 = whatever*(y.cent.bot - y.cent.top, x.cent.top - x.cent.bot)
+ if italic: yscaled 2 fi;
+ % line is at rt angles to line joining circles
+ lft x1 = l; draw z1 -- z2;
+ labels(1,2);
+ set_ic 1/2[charht, chardp] + if italic: 2 else: 1 fi * 4v#;
+endchar;
+
+%}}}
+%{{{ Draw per-mille in the same was as per-cent but with smaller rings
+
+ring_wd# := 4.5u#; ring_ht# := 4.5v#;
+ring_wd'# := 4.6u#; ring_ht'# := 4.6v#;
+define_whole_pixels(ring_wd, ring_wd');
+define_whole_vertical_pixels(ring_ht, ring_ht');
+lowres_fix(ring_wd, ring_wd') 1.2;
+lowres_fix(ring_ht, ring_ht') 1.2;
+
+iff known code.per_thousand: "per thousand sign";
+ma_char(code.per_thousand, ring_wd# + 2ring_wd'# + sp# - 3/4u#,
+ asc_ht#, if italic: 1/2desc_dp# else: 0v# fi)(1/2,1/2);
+ draw_circle.top(l - ho, h + oo, l + ring_wd + ho, h - ring_ht - oo);
+ draw_circle.rt(r - ring_wd' - ho, -d + ring_ht' + oo,
+ r + ho, -d - oo);
+ draw_circle.mid(r - 2ring_wd' - sp - ho, -d + ring_ht' + oo,
+ r - ring_wd' - sp + ho, -d - oo);
+ 1/2[z1bar, z2bar] = 1/2[z1top, z3mid];
+ y1bar = 1/4[y0top,y1top]; x1bar = 0.6[x1mid, x0mid];
+ draw z1bar -- z2bar;
+ labels(1bar, 2bar); set_ic chardp + 3/4ring_ht#;
+endchar;
+
+%}}}
+
+%}}}
+%{{{ Bullet & ballot box
+
+iff known code.bullet: "bullet";
+ma_char(code.bullet, bullet_wd#, 1/2bullet_ht# + golden_ratio*x_ht#,
+ -(golden_ratio*x_ht# - 1/2bullet_ht#))(1,1);
+ fill fullcircle xscaled bullet_wd yscaled bullet_ht
+ shifted (1/2w, h - 1/2bullet_ht);
+endchar;
+
+iff known code.ballotbox: "ballot box";
+ma_char(code.ballotbox, 12u#, 12v#, 0v#)(1,1);
+ box_points; draw_box; set_ic_tr;
+endchar;
+
+%}}}
+%{{{ NULL character, `Compound Word Mark'
+
+iff known code.null: "null glyph";
+ma_char(code.null, 0pt#, 0pt#, 0pt#)(0,0);
+endchar;
+
+iff known code.cwm: "compound word mark";
+ma_char(code.cwm, 0pt#, 0pt#, 0pt#)(0,0);
+endchar;
+
+%}}}
+%{{{ Visible space (Cork again)
+
+iff known code.ascii.visible_space: "visible symbol for ASCII space character";
+ma_char(code.ascii.visible_space, 6u#, 1/2pn.ht#, 3v#)(1/2,1/2);
+ if 1/2[l,r] <> good.x 1/2[l,r]: change_width; fi
+ lft z1 = (l - eps, 0); rt z2 = (r, 0); bot z3 = (1/2[l,r], -d - eps);
+ draw z1 -- z2 -- z3 -- cycle;
+ labels(1,2,3);
+endchar;
+
+%}}}
+%{{{ Greater-than and less-than symbols
+
+iff known code.greater:
+ma_sym(code.greater, hratio * sqrt3 * (4v# - 1/2pn.ht#) + 2pn.wd#, 8v#)
+ draw (x.l, y.t) -- (x.r, y.m) -- (x.l, y.b);
+endchar;
+
+iff known code.less:
+ma_sym(code.less, hratio * sqrt3 * (4v# - 1/2pn.ht#) + 2pn.wd#, 8v#)
+ draw (x.r, y.t) -- (x.l, y.m) -- (x.r, y.b);
+endchar;
+
+%}}}
+%{{{ Trypetiper quote marks -- ack! ppht!
+
+iff known code.tick.dbl: "typewriter double quotation marks";
+ma_char(code.tick.dbl, pn.wd# + 5u#, cap_ht#, 0pt#)(2/3,1/3);
+ top y1a = top y1b = h;
+ bot y2a = bot y2b = x_ht;
+ lft x1a - 2u = lft x2a = l;
+ rt x1b = rt x2b + 2u = r;
+ draw z1a -- z2a; draw z1b -- z2b;
+ labels(1a, 1b, 2a, 2b);
+ set_ic_tr;
+endchar;
+
+iff known code.tick: "small tick mark";
+ma_char(code.tick, pn.wd# + 3u#, cap_ht#, 0pt#)(2/3,1/3);
+ top rt z1 = (r, h);
+ bot lft z2 = (l, x_ht);
+ draw z1--z2;
+ labels(1,2);
+ set_ic_tr;
+endchar;
+
+iff known code.backtick: "reversed small tick mark";
+ma_char(code.backtick, pn.wd# + 3u#, cap_ht#, 0pt#)(2/3,1/3);
+ top lft z1 = (l, h);
+ bot rt z2 = (r, x_ht);
+ draw z1--z2;
+ labels(1,2);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ ASCII circumflex symbol
+
+iff known code.ascii.circumflex: "ASCII circumflex";
+ma_sym(code.ascii.circumflex, pn.wd# + 5u#, 1/2pn.ht# + 4v#);
+ draw (x.l, y.b) -- (x.m, y.t) -- (x.r, y.b);
+endchar;
+
+%}}}
+%{{{ ASCII underscore character
+
+iff known code.ascii.underscore: "ASCII underscore";
+ma_char(code.ascii.underscore, 6u#, pn.ht#, 0pt#)(1,1);
+ bot lft z1 = (l, 0); bot rt z2 = (r, 0);
+ draw z1 -- z2;
+ labels(1,2);
+endchar;
+
+%}}}
+%{{{ Vertical bar
+
+iff known code.vert: "vertical bar";
+ma_char(code.vert, pn.wd#, asc_ht#, 1/2brack_dp#)(1,1);
+ if 1/2w <> good.x 1/2w: change_width; fi
+ top z1 = (1/2w, h); bot z2 = (1/2w, -d);
+ draw z1 -- z2;
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ Swung dash/ASCII tilde
+
+if known code.ascii.tilde and unknown code.swung_dash:
+ code.swung_dash = code.ascii.tilde;
+fi
+
+iff known code.swung_dash:
+ma_sym(code.swung_dash, 8u#, 4v#);
+ top z1 = (x.l, y.m);
+ bot z5 = (x.r, y.m);
+ z3 = 1/2[z1,z5];
+ x2 = 1/2[x1,x3]; x4 = 1/2[x3,x5];
+ y2 = y.t; y4 = y.b;
+ draw z1{up} ... z2{right} ... z3 ... z4{right} ... {up}z5;
+ labels(1,2,3,4,5);
+ set_ic_tr;
+endchar;
+
+%}}}
+%{{{ arrows
+%{{{ generic arrow macro
+
+% Arrows in Malvern are deliberately simplified shapes
+
+numeric arrow_wd#, arrow_ht#;
+arrow_wd# = 6u#; arrow_ht# = 6v#;
+define_pixels(arrow_wd, arrow_ht);
+
+vardef draw_arrow@#(expr hbarp, vbarp, lheadp, rheadp, uheadp, dheadp) =
+ if hbarp:
+ lft x1@#h = l; rt x2@#h = r;
+ y1@#h = y2@#h = good.y (golden_ratio*x_ht);
+ draw z1@#h -- z2@#h; labels(1@#h, 2@#h);
+ if lheadp:
+ z1@#l = z1@#h + whatever*ne;
+ z2@#l = z1@#h + whatever*se;
+ top y1@#l = vround (y1@#h + 1/2arrow_ht);
+ bot y2@#l = vround (y1@#h - 1/2arrow_ht);
+ draw z1@#l -- z1@#h -- z2@#l;
+ labels(1@#l, 2@#l);
+ fi
+ if rheadp:
+ z1@#r = z2@#h + whatever*se;
+ z2@#r = z2@#h + whatever*ne;
+ top y1@#r = vround (y2@#h + 1/2arrow_ht);
+ bot y2@#r = vround (y2@#h - 1/2arrow_ht);
+ draw z1@#r -- z2@#h -- z2@#r;
+ labels(1@#r, 2@#r);
+ fi
+ fi
+ if vbarp:
+ top y1@#v = h; bot y2@#v = -d;
+ x1@#v = x2@#v = good.x 1/2[l,r];
+ draw z1@#v -- z2@#v; labels(1@#v, 2@#v);
+ if uheadp:
+ z1@#u = z1@#v + whatever*ne;
+ z2@#u = z1@#v + whatever*se;
+ lft x1@#u = hround (x1@#v - 1/2arrow_wd);
+ rt x2@#u = hround (x1@#v + 1/2arrow_wd);
+ draw z1@#u -- z1@#v -- z2@#u;
+ labels(1@#u, 2@#u);
+ fi
+ if dheadp:
+ z1@#d = z2@#v + whatever*se;
+ z2@#d = z2@#v + whatever*ne;
+ lft x1@#d = hround (x2@#v - 1/2arrow_wd);
+ rt x2@#d = hround (x2@#v + 1/2arrow_wd);
+ draw z1@#d -- z2@#v -- z2@#d;
+ labels(1@#d, 2@#d);
+ fi
+ fi
+enddef;
+
+%}}} generic arrow macros
+
+iff known code.arrow.left:
+ma_sym(code.arrow.left, 12u#, arrow_ht#);
+ draw_arrow(true, false, true, false, false, false);
+endchar;
+
+iff known code.arrow.right:
+ma_sym(code.arrow.right, 12u#, arrow_ht#);
+ draw_arrow(true, false, false, true, false, false);
+endchar;
+
+iff known code.arrow.left_right:
+ma_sym(code.arrow.left_right, 12u#, arrow_ht#);
+ draw_arrow(true, false, true, true, false, false);
+endchar;
+
+iff known code.arrow.down:
+ma_sym(code.arrow.down, arrow_wd#, 12v#);
+ draw_arrow(false, true, false, false, false, true);
+endchar;
+
+iff known code.arrow.up:
+ma_sym(code.arrow.up, arrow_wd#, 12v#);
+ draw_arrow(false, true, false, false, true, false);
+endchar;
+
+iff known code.arrow.up_down:
+ma_sym(code.arrow.up_down, arrow_wd#, 12v#);
+ draw_arrow(false, true, false, false, true, true);
+endchar;
+
+iff known code.arrow.all:
+ma_sym(code.arrow.all, 12u#, 12v#);
+ draw_arrow(true, true, true, true, true, true);
+endchar;
+
+% These sextension segments need some work...
+
+iff known code.arrow.horiz_ex:
+ma_sym(code.arrow.horiz_ex, 5u#, arrow_ht#);
+ rt z1 = (l, axis_ht); lft z2 = (r, axis_ht);
+ draw z1--z2; labels(1,2); set_ic axis_ht#;
+endchar;
+
+iff known code.arrow.vert_ex:
+ma_sym(code.arrow.vert_ex, arrow_wd#, 5v#);
+ draw_arrow(false, true, false, false, false, false);
+endchar;
+
+%}}} arrows
+%{{{ blank space
+
+% Note that the blank space has 3 properties that distinguish it from
+% a simple space as genberated by TeX:
+% -- it has height and depth
+% -- it has an italic correction
+% -- it is (approx) 1/3em rather than approx 1/4em
+
+iff known code.blank_space:
+ma_char(code.blank_space, 5u#, body_ht#, body_dp#)(0,0)
+ set_ic_tr;
+endchar;
+
+%}}} blank space
+%{{{ division sign
+
+iff known code.divide: "division sign";
+ma_sym(code.divide, 8u#, 8v#);
+ draw (x.l, axis_ht) -- (x.r, axis_ht);
+ z1dot = (x.m, y.t); z2dot = (x.m, y.b);
+ draw_dot1dot; draw_dot2dot;
+ labels(1ot, 2dot); set_ic axis_ht#;
+endchar;
+%}}} division sign
+%{{{ logical negation
+
+iff known code.logical_not: "logical negation sign";
+ma_sym(code.logical_not, 8u#, 6v#);
+ draw (x.l, y.t) -- (x.r, y.t) -- (x.r, y.b);
+ set_ic_tr;
+endchar;
+%}}} logical negation
+%}}} masyms.mf
+
+
+%Local variables:
+%fold-folded-p: t
+%End:
diff --git a/fonts/malvern/source/mff.rc b/fonts/malvern/source/mff.rc
new file mode 100644
index 0000000000..cdeaa5091d
--- /dev/null
+++ b/fonts/malvern/source/mff.rc
@@ -0,0 +1,95 @@
+# mff.rc 1.2.0 1994/10/11 -- mff startup file for Malvern 1.2
+# Copyright 1994 P. Damian Cugley
+
+### @mff-startup-file {
+### filename = "mff.rc",
+### version = "1.2.0",
+### date = "1994/10/11",
+### package = "Malvern 1.2",
+### author = "P. Damian Cugley",
+### email = "damian.cugley@comlab.ox.ac.uk",
+### address = "Oxford University Computing Laboratory,
+### Parks Road, Oxford OX1 3QD, UK",
+### codetable = "USASCII",
+### keywords = "Malvern, METAFONT, font, typefont, TeX",
+### supported = "Maybe",
+### abstract = "mff startup file for the Malvern
+### font family.",
+### dependencies = "other program files",
+### }
+
+# See the Malvern Handbook (maman.tex) for more info about Malvern.
+# This software is available freely but without warranty.
+# See the file COPYING for details.
+
+# This file describes the translation of font names into assignments to
+# METAFONT variables (see the file INSTALL for more info).
+# It is used by programs like mff that run METAFONT automatically.
+
+########################################################################
+#
+# The font name is of the form
+#
+# maXXx## my nonstandard font names
+#
+# where XX is 2 digits giving a style in the tradition of Univers
+# x is a suffix describing the character set of the font
+# ## is the design size, in points (with p as decimal point)
+#
+# Examples:
+#
+# ma55a10 Malvern 55 10-pt
+# ma65a10 Malvern 65 demibold 10-pt
+# ma74a18 Malvern 74 bold extended italic 18-pt
+# ma58a7 Malvern 58 condensed italic 7-pt
+#
+# Use "mff -ffmv ..." to get Karl Berry's style of names.
+#
+########################################################################
+
+# The following sets the W table.
+
++W
+-W "1= weight = 1/4" # ultra-light
+-W "2= weight = 1/2" # extra-light
+-W "3= weight = 3/4" # light
+-W "4= weight = 7/8" # book
+-W "5= weight = 1" # medium
+-W "6= weight = 1.3" # demi
+-W "7= weight = 1.6" # bold
+-W "8= weight = 2" # extra
+-W "9= weight = 3" # ultra
+
+# The table of widths.
+
++C
+-C "9= hratio = 0.50"
+-C "0= hratio = 0.50; slant = 1/8; italicness = 1"
+-C "7= hratio = 0.80"
+-C "8= hratio = 0.80; slant = 1/8; italicness = 1"
+-C "5= hratio = 1.00"
+-C "6= hratio = 1.00; slant = 1/8; italicness = 1"
+-C "3= hratio = 1.15"
+-C "4= hratio = 1.15; slant = 1/8; italicness = 1"
+-C "1= hratio = 1.30"
+-C "2= hratio = 1.30; slant = 1/8; italicness = 1"
+
+
++I
+# "j" is a hack to prevent the programs from using features new
+# to METAFONT 2.0 -- such as the |=: ligature step, which is used
+# to fake an "fj" ligature.
+-I "j= no_new_mf = 1" # use when using METAFONT 1.x
+
+# Malvern encodings:
++J
+-J "a= encoding = 1" # Malvern A (Latin text)
+-J "b= encoding = 2" # Malvern B (symbols)
+-J "c= encoding = 3" # Malvern C (Cyrillic)
+-J "d= encoding = 4" # Malvern D
+-J "e= encoding = 5" # Malvern E
+-J "f= encoding = 6" # Malvern F
+-J "g= encoding = 7" # Malvern G (Greek letters)
+
+-J "s= encoding =19" # Standard TeX text (like cmr)
+-J "az=encoding =26" # TeX text, old-style figs
diff --git a/fonts/malvern/source/testfont.tex b/fonts/malvern/source/testfont.tex
new file mode 100644
index 0000000000..65031ed68e
--- /dev/null
+++ b/fonts/malvern/source/testfont.tex
@@ -0,0 +1,495 @@
+% A testbed for font evaluation (see The METAFONTbook, Appendix H)
+
+% Modified by pdc to add uppercase text. 29-Nov-89
+% Modified some more by me again for testing Malvern.
+
+% ************************************************************************
+%
+% This file should NOT, repeat * N * O * T * be installed in the
+% standard TeX macro file area. Instead you should leave it in
+% the same directory as the Malvern program files. It customizes
+% testfont for the Malvern encoding conventions.
+%
+% ************************************************************************
+
+\input malvern
+\errorcontextlines=20
+
+\tracinglostchars=0
+\tolerance=1000
+\raggedbottom
+\nopagenumbers
+\parindent=0pt
+\newlinechar=`@
+\hyphenpenalty=200
+\doublehyphendemerits=30000
+
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\hours{\n=\time \divide\n 60
+ \m=-\n \multiply\m 60 \advance\m \time
+ \twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+\def\init{\message{@Name of the font to test = }
+ \read-1 to\fontname \startfont
+ \message{Now type a test command (\string\help\space for help):}}
+\def\startfont{\font\testfont=\fontname
+ \leftline{\sevenrm Test of \fontname\unskip\ on \today\ at \hours}
+ \medskip
+ \testfont \setbaselineskip
+ \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt
+ \else\rightskip=0pt plus 2em \fi
+ \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont}
+
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|help{|message{%
+\init switches to another font;@%
+\end or \bye finishes the run;@%
+\text prints a sample text, assuming TeX text font conventions;@%
+\TEXT prints the sample text in uppercase;@%
+\display prints all the characters in the font in a nice order;@%
+\sample combines \display and \text;@%
+\table prints the font layout in tabular format;@%
+\mixture mixes a background character with a series of others;@%
+\alternation interleaves a background character with a series;@%
+\alphabet prints all lowercase letters within a given background;@%
+\ALPHABET prints all uppercase letters within a given background;@%
+\series prints a series of letters within a given background;@%
+\lowers prints a comprehensive test of lowercase;@%
+\uppers prints a comprehensive test of uppercase;@%
+\digits prints a comprehensive test of numerals;@%
+\math prints a comprehensive test of TeX math italic;@%
+\names prints a text that mixes upper and lower case;@%
+\punct prints a punctuation test;@%
+\bigtest combines many of the above routines;@%
+\help repeats this message;@%
+and you can use ordinary TeX commands (e.g., to \input a file).}}}
+
+\def\setbaselineskip{\setbox0=\hbox{\n=0
+\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
+\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
+
+\def\setchar#1{{\escapechar-1\message{\string#1 character = }%
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \read-1 to\next
+ \expandafter\finsetchar\next\next#1}}
+\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
+ \ifnum #3=`\# \global\chardef#3=#2 \fi}
+\def\promptthree{\setchar\background
+ \setchar\starting \setchar\ending}
+
+\def\mixture{\promptthree \domix\mixpattern}
+\def\alternation{\promptthree \domix\altpattern}
+\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
+\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
+\def\domix#1{\par\chardef\0=\background \n=\starting
+ \loop \chardef\1=\n #1\endgraf
+ \ifnum \n<\ending \advance\n 1 \repeat}
+
+\def\!{\discretionary{\background}{\background}{\background}}
+\def\series{\promptthree \!\doseries\starting\ending\par}
+\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat}
+\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par}
+\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par}
+\def\compdigs{\!\doseries{`0}{`9}\par}
+\def\alphabet{\setchar\background\complower}
+\def\ALPHABET{\setchar\background\compupper}
+
+\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}}
+\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}}
+\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}}
+\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2
+ \loop{#1} \ifnum\background<#3\m=\background\advance\m 1
+ \chardef\background=\m \repeat \chardef\background=#4
+ \loop{#1} \ifnum\background<#5\m=\background\advance\m 1
+ \chardef\background=\m \repeat}
+
+\def\names{ {\AA}ngel\aa\ Beatrice Claire
+ Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
+ Jackie K\=aren {\L}a\u{u}\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave
+ O\^ctavia\~n
+ Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula
+ Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par}
+\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid}
+ \dopunct{HIE}\dopunct{TIP}\dopunct{fluff}
+ \$1,234\cdot56 + 7/8 = 9\% = 90\permille\ @ \#0 2\times4 \S3 \P4
+ 57\degrees\ = 57\thinspace\degrees C\par}
+\def\dopunct#1%
+{
+ #1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ \langle#1\rangle\
+ <#1>\ <<#1>>\ <<\thinspace#1\thinspace>>\
+ #1*\ #1\dag\ #1\ddag\ #1.\par
+}
+
+\def\bigtest{\sample
+ hamburgefonstiv HAMBURGEFONSTIV\par
+ \names \punct \lowers \uppers \digits \table}
+
+\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial
+ \mathchardef\Gamma="100 \mathchardef\Delta="101
+ \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104
+ \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107
+ \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A
+ \def\ii{i} \def\jj{j}
+ \def\\##1{|##1|+}\mathtrial
+ \def\\##1{##1_2+}\mathtrial
+ \def\\##1{##1^2+}\mathtrial
+ \def\\##1{##1/2+}\mathtrial
+ \def\\##1{2/##1+}\mathtrial
+ \def\\##1{##1,{}+}\mathtrial
+ \def\\##1{d##1+}\mathtrial
+ \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial}
+\newcount\skewtrial \skewtrial='177
+\def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L \\M \\N \\O
+ \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z \\a \\b \\c \\d \\e \\f \\g
+ \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w \\x \\y
+ \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta
+ \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi \\\rho \\\sigma \\\tau
+ \\\upsilon \\\phi \\\chi \\\psi \\\omega \\\vartheta \\\varpi \\\varphi
+ \\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon
+ \\\Phi \\\Psi \\\Omega \\\partial \\\ell \\\wp$\par}
+\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests
+ \def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L
+ \\M \\N \\O \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z$\par}
+ \math\endgroup}
+
+
+\newcount\whichtext
+\newif\ifuppercase
+
+\def\text
+{{\advance\baselineskip-4pt
+ \setbox0=\hbox{abcdefghijklmnopqrstuvwxyz}
+ \ifdim\hsize>2\wd0 \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0
+ \fi\fi
+ \parindent = 0.1\hsize \parskip = 1ex plus 2pt
+ \ifuppercase \uppercase \fi {
+ \ifcase\whichtext
+ It isn't easy to explain what attracts some people to letterforms
+ with such joy and fury. Most people can't tell typing from printing
+ and the latest figures on illiteracy suggest that we should be
+ grateful, while we can, that they can read at all.
+
+ In comparison to the details of such other callings as, say, keeping
+ rabbits, small particulars of the alphabet can easily become an
+ obsession. I often think of Thomas Codben-Sanderson, a remarkable
+ man and a bookbinder of distinction, as he stood on
+ Hammersmith Bridge in the dark, throwing the printing type of the
+ Doves Press into the Thames. This was a crime of passion and has a
+ comical side that the decades often give to such things. But I can
+ see him, heart pounding, full of earnest purpose, as he puts his
+ beloved type to rest. He was not about to wonder, as the song
+ wonders about the lady, who might be kissing her now.
+
+ I could name a few things I'd like to throw into the Thames
+ myself in the shadow of the night. But my reasons would not be as
+ pure has his. My motive wouldn't be love.
+
+ \or
+ Lettering people disagree over everything. They argue about the
+ very purpose of the alphabet, which is as good a point for a fight
+ as any.
+
+ Some people say that letters exist to be read and therefore the
+ things that interfere with legibility should be discouraged. (This
+ is a bit like saying that the purpose of liquor is to get you drunk.
+ If they were right, people would swig metal polish, and the farmers
+ of Cognac, Burgundy and Champagne grow potatoes.)
+
+ The alphabet, the argument goes, should be a well-mannered
+ servant who quietly carries messages from author to reader. This is
+ sometimes true: it is just what we need in a telephone directory.
+ Fortunately, the world still has some other uses for letters as
+ well. We celebrate the alphabet for other reasons than legibility.
+ We enjoy all the passions and the fury and could hardly have more
+ fun without breaking the furniture.
+
+ \or
+ The alphabet as a style for every need. For dignity, the style of
+ Roman inscriptions is unsurpassed. To attempt the limits of human
+ skill, people have decorated letters almost beyond recognition in
+ some of the world's greatest manuscript books. More than a code for
+ text, the alphabet has developed throught the centuries into a
+ splendid medium of expression. Even the greeting card with pink
+ pigs from your friend Henry had a printed message that was made to
+ look silly expressly to match his sense of humour. I think it's
+ marvellous and I don't think any permanent damage was done to our
+ heritage.
+
+ As long as people seem to like letters made of soap bubbles, the
+ world can't be all bad. A few colleagues of mine have been driven
+ to despair over some lovely letters with snow on top that are used
+ in winter advertising. These things disd not come about by
+ accident. No designer consciously decided to forfeit his reputation
+ and go down in history wearing a fool's cap. They were made because
+ people wanted them and it is because people still do that they are
+ used every year as the waether gets cold.
+
+ \or
+ Even if we agree that expression is a part of the alphabet, and agree
+ again that it sometimes comes before legibility, we still have many
+ things to disagree over. One thing that divides people is apprach.
+ They ask what kind of lettering is permissible in polite society. What
+ kind of expression can the common man be trusted with?
+
+ One view, especially liked by amateurs, is that the only legitimate way
+ of using the alphabet for expression is to imitate medieval methods.
+ This means that you should write with a feather. You should work on
+ vellum if you can afford it, on hand-made paper if not (even if it only
+ differs comparably from machine-made paper in the direction of the
+ fibres). You should approach the job with reverence and possibly make
+ your own ink. All this is said to be justified by regarding writing,
+ illuminating, and lettering as medieval crafts.
+
+ \null\hfill Gunnlaugur S. E. Briem\par
+
+ \whichtext = -1
+ \fi
+ }
+\global\advance\whichtext by 1
+\moretext
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}}
+\def\moretext{?`But are{\ng}'t Kafka's Schlo{\ss}
+and {\AE}sop's {\OE}uvres
+often na{\"\i}ve vis-\`a-vis the {\dh}{\ae}monic {\th}h{\oe}nix's official
+r\^ole in fluffy souffl\'es? }
+\def\omitaccents{\let\moretext=\relax}
+
+\def\TEXT{{\uppercasetrue\text}}
+
+\def\,{\kern 0.1667em }
+
+\def\display
+{{\par \rightskip = 0pt plus 0.25\hsize
+ \displayloop{65}{91}
+ \displayloop{97}{123}
+ \displayloop{48}{58}
+ ,.;: ` ' `` '' ()[]*+=/?!@\$\%\& - -- ---
+ \displayloop{0}{16}
+ \displayloop{16}{32}
+ \char32\char`\" \char`\<\char`\>
+ \char`\\\char`\^\char`\_
+ \char`\|\char`\~\char127
+ \par{\sevenrm 128+:}
+ \displayloop{128}{144}
+ \displayloop{144}{160}
+ \displayloop{160}{176}
+ \displayloop{176}{192}
+ \displayloop{192}{208}
+ \displayloop{208}{224}
+ \displayloop{224}{240}
+ \displayloop{240}{256}
+ \par
+}}
+
+\def\displayloop#1#2%
+{%
+ \n=#1
+ \loop
+ \ifnum\n<#2
+ \char\n
+ \advance\n+1
+ \repeat
+}
+
+\def\grecoroman
+{{\rightskip = 0pt plus 0.25\hsize
+ AB%
+ \char0 C% Gamma
+ \char1 D% Delta
+ EFZGH\char2 % Theta
+ IJK%
+ \char3 L% Lambda
+ MN\char4 % Xi
+ O\char5 P% Pi
+ QR%
+ \char6 S% Sigma
+ T\char7 % Upsilon
+ UVW%
+ \char8 X\char9% Phi, Psi
+ Y\char10
+ \par
+}}
+
+\def\liggy
+{{\def\\{\kern0pt}%
+ ff, f\\f; fi, f\\i; fl, f\\l; ffi, f\\f\\i; ffl, f\\f\\l.
+ \par Kafka often fluffy souffle official fife.
+ \par Kaf\\ka of\\ten f\\luf\\fy souf\\f\\le of\\f\\icial f\\if\\e.
+ \par
+}}
+
+\def\sample{\display\TEXT\text\names}
+
+\newcount\hexcount
+\def\hexdigit#1{\ifcase#1\relax 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}
+
+\def\tablecr
+{%
+ \cr
+ \noalign{\nointerlineskip}
+ \multispan2\hfill &\multispan{33}\hrulefill
+ \cr
+ \noalign{\nointerlineskip}
+}
+\def\table
+{
+ \def\\{\char\n \global\advance\n 1}
+ \def\0##1{&\omit&\sevenrm##1}
+ \halign to \hsize
+ {%
+ \chartstrut\hss##\tabskip=0pt plus 10pt &
+ &\hss##\hss&##\vrule\cr
+ \lower 6.5pt\null
+ &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F
+ \tablecr
+ \global\n=0
+ \tablelines
+ }
+ \bigbreak
+}
+
+\def\tablelines
+{
+ \ifnum\n<256
+ & \hexcount=\n \divide\hexcount16 \sevenrm\hexdigit\hexcount
+ &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&
+ \tablecr \noalign{\penalty5000 }
+ \tablelines
+ \fi
+}
+\def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}}
+
+\def\oneaccent#1%
+{
+ O \'#1 \`#1 \^#1 \~#1 \"#1 \v #1 \u #1 \H #1 \.#1 \=#1 \accent9 #1
+ O \par
+}
+
+\def\currencies
+{
+ \pounds19\cdot66 = 99\cents\ = \$1\cdot00 = \currency66\cdot66 =
+ 123456\yen = \florin358 (or is that 358\florin\ or what?\par
+ \pounds\char"B1\char"B9\cdot\char"B6\char"B6\ = \char"B9\char"B9\cents\
+ = \$\char"B1\cdot\char"B0\char"B0\ =
+ \currency\char"B6\char"B6\cdot\char"B6\char"B6\ =
+ \char"B1\char"B2\char"B3\char"B4\char"B5\char"B6\yen
+ = \florin\char"B3\char"B5\char"B8\ (or is that
+ \char"B3\char"B5\char"B8\florin\ or what?\par
+}
+
+\ifx\noinit!\else\init\fi
+
+% insane smallcaps hacks
+
+\newcount\alphaone \newcount\alphatwo \newcount\alphathr
+\def\doalphabet#1#2#3%
+{%
+ \alphaone=#2\relax \alphatwo=#3\relax \alphathr=26
+ \loop
+ \advance\alphathr-1
+ \ifnum\alphathr>0
+ #1\alphaone\alphatwo
+ \advance\alphaone+1
+ \advance\alphatwo+1
+ \repeat
+}
+
+\def\sctext{{\doalphabet\uccode{`a}{"E1}\uc\text}}
+\def\lc#1{\lowercase{#1}}
+\def\mctext{{\doalphabet\lccode{`A}{"C1}\lc\text}}
+
+\def\scnames{{\doalphabet\uccode{`a}{"E1}\uppercase\expandafter{\names}}}
+\def\mcnames{{\doalphabet\lccode{`A}{"C1}\lowercase\expandafter{\names}}}
+
+\def\accents
+{{
+ \leftskip=1em \parindent=-1em \def\\##1:{\par{\tenrm ##1:}}
+ {\tenrm Accents according to HART'S:}
+ \\Anglo-Saxon: \TH\th\ \DH\dh (not quite right) \ \AE\ae\ \OE\oe\
+ \=A\=a \=E\=e \=I \=\i\ \=O\=o \=U\=u \AAEE\aaee\ \OOEE\ooee\
+ {\tenrm wyn, yogh}
+ {\tenrm and in textbooks:} \dotG\.g \dotC\dotc
+ \\Arabic: {\arabic \`alim, mu\`allim, \.d^a\`. \'am^ir, mu\'allim,
+ \.d^a\'. taw^ar^i_{kh} ma\`l^um}
+ \\Cyrllic languages: \'C\'c \'E\'e \"E\"e \'{} \u{I}o\u{\i} \=Y\=y
+ \v{Z}\v{z}
+ \\Czech: \'A\'a \hacekC\hacekc\ {\hacekD}d' \'E\'e \v{E}\v{e} \'I\'\i\
+ \v{N}\v{n} \'O\'o \v{R}\v{r} \v{S}\v{s} \v{T}t' \'U\'u \@U\@u
+ \'Y\'y \v{Z}\v{z}
+ \\Danish: \AE\ae\ \O\o\ \AA\aa
+ \\English: \'E\'e \"I \"\i\
+ \\Esperanto: {\esperanto ^Cu ^ci tia ^Genevulo ^guas ^Hano^h ^Jones
+ kaj la ^jipo de ^Sim^son kiu ^Uaas kaj ba^umas?}
+ \\Finnish: \"A\"a \"O\"o \AA\aa
+ \\French: \OE\oe\ \`A\`a \^A\^a \c{C}\c{c} \'E\'e \`E\`e \^E\^e
+ \"E\"e \^I \^\i\ \"I \"\i\ \^O\^o \`U\`u \^U\^u \"U\"u
+ \\Gaelic (Irish): \'A\'a \'E\'e \'I\'\i\ \'O\'o \'U\'u
+ \\Gaelic (Scots): \`A\`a \`E\`e \'E\'e \'I\'\i\ \`O\`o \'O\'o \'U\'u
+ \\German: {\german "S"s "A"a "O"o "U"u}
+ \\Hungarian: \'A\'a \'E\'e \'I\'\i\ \'O\'o \"O\"o \H{O}\H{o} \'U\'u
+ \"U\"u \H{U}\H{u}
+ \\Icelandic: \TH\th\ \DH\dh\ \AE\ae\ \OE\oe\ \'A\'a \'E\'e
+ \'I\'\i\ \'O\'o \"O\"o \'U\'u \'Y\'y
+ \\Norwegian: \AE\ae\ \O\o\ \AA\aa
+ \\Polish: \ogonek{A}\ogonek{a} \'C\'c \ogonek{E}\ogonek{e}
+ \L\l\ \'N\'n \'O\'o \'S\'s \'Z\'z \.Z\.z
+ \\Portuguese: \`A\`a \'A\'a \^A\^a \~A\~a \c{C}\c{c} \`E\`e \'E\'e
+ \^E\^e \`Io\`\i\ \'Io\'\i\ \`O\`o \'O\'o \^O\^o \~O\~o \'U\'u
+ \`U\`u
+ \\Romanian: \`A\`a \^A\^a \u{A}\u{a} \`E\`e \`Io\`\i\ \^Io\^\i\
+ \c{S}\c{s} \c{T}\c{t} \`U\`u
+ \\Spanish: \'A\'a \'E\'e \'Io\'\i\ \~N\~n \'O\'o \'U\'u
+ \\Swedish: \AA\aa\ \"A\"a \"O\"o
+ \\Turkish: \^A\^a \c{C}\c{c} \u{G}\u{g} \.Ii I\i\ \^Io\^\i\ \"O\"o
+ \c{S}\c{s} \"U\"u \^U\^u
+ \\Welsh: \^A\^a \'A\'a \^E\^e \"E\"e \^Io\^\i\ \^O\^o \"O\"o \^U\^u
+ \^W\^w \^Y\^y
+ \par
+}}
+
+
+\def\greekaccents
+{
+ \n=12
+ \loop \ifnum \n<32
+ \accent\n a\accent\n e\accent\n i%
+ \char\n A\char\n E\char\n I%
+ \space
+ \advance\n1
+ \repeat
+}
+
+
+\def\corkquote#1#2{#1min#2 #1pig#2 #1hid#2 #1HIE#2 #1TIP#2 #1fluff#2 \par}
+\def\corkpunct
+{
+ \corkquote{\char34 }{\char34 }
+ \corkquote{`}{'} \corkquote{``}{''}
+ \corkquote{,}{`} \corkquote{,,}{``}
+ \corkquote{\char14 }{\char15 } \corkquote{<<}{>>}
+ \corkquote{\char15 }{\char14 } \corkquote{>>}{<<}
+ \corkquote{\char123 }{\char125 }
+}
+\def\corkascii % various computer language symbols using ASCII chars
+{{
+ \let\\=\corkbinary f(x) a[i] p.q !x \ \char`\~a \ a++ \ b--\/-- \
+ \&a \ \\* \\/ \\\% \\< \\{<\/<} \\{<=} \\> \\{>\/>} \\{>=}
+ \\{==} \\{!=} \\{\char`\~=} \\{/=} \\{<>} \\{\#} \\{@} \\{+}
+ \\{\char`\\}
+ \\{--} \\{=} \\{\&} \\{\&\&} \\| \\{||} \\{\char`\^} \\{\char`\^.}
+ \\{\char`\~} \\{+=} \\{--=} \\{*=} \\{/=} \\{\%=} \\{\&=} \\{:=}
+ \\{::=} \\{:==} \\{<--} \\{-->} \\{\char`\^=} \\{|=} \\{<\/<=}
+ \\{>\/>=} \par
+}}
+\def\corkbinary#1{x #1\ y \ x#1y \ }
+
+\def\corkstuff{\corkpunct \corkascii}
diff --git a/fonts/malvern/tex/OT1fmv.fd b/fonts/malvern/tex/OT1fmv.fd
new file mode 100644
index 0000000000..45d4660b03
--- /dev/null
+++ b/fonts/malvern/tex/OT1fmv.fd
@@ -0,0 +1,75 @@
+% .fd -- font family description for NFSS 2
+% generated 1994.10.12 by fdcvt
+% Created from: T1fmv.fd
+%Created by: tex mkfd
+%Created using fontinst v1.335
+
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+
+\ProvidesFile{OT1fmv.fd}
+ [1994/10/12 Fontinst v1.335 font definitions for OT1/fmv.]
+
+\DeclareFontFamily{OT1}{fmv}{}
+
+\DeclareFontShape{OT1}{fmv}{m}{n}{
+ <5-8> ma55s7
+ <8-11> ma55s10
+ <11-13> ma55s12
+ <13-16> ma55s14
+ <16-21> ma55s18
+ <21-> ma55s24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{m}{it}{
+ <5-8> ma56s7
+ <8-11> ma56s10
+ <11-13> ma56s12
+ <13-16> ma56s14
+ <16-21> ma56s18
+ <21-> ma56s24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{b}{n}{
+ <5-8> ma75s7
+ <8-11> ma75s10
+ <11-13> ma75s12
+ <13-16> ma75s14
+ <16-21> ma75s18
+ <21-> ma75s24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{b}{it}{
+ <5-8> ma76s7
+ <8-11> ma76s10
+ <11-13> ma76s12
+ <13-16> ma76s14
+ <16-21> ma76s18
+ <21-> ma76s24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{m}{sc}{
+ <5-8> ma55aa7
+ <8-11> ma55aa10
+ <11-13> ma55aa12
+ <13-16> ma55aa14
+ <16-21> ma55aa18
+ <21-> ma55aa24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{b}{sc}{
+ <5-8> ma75aa7
+ <8-11> ma75aa10
+ <11-13> ma75aa12
+ <13-16> ma75aa14
+ <16-21> ma75aa18
+ <21-> ma75aa24
+}{}
+
+\DeclareFontShape{OT1}{fmv}{m}{ui}{<->sub * fmv/m/it}{}
+\DeclareFontShape{OT1}{fmv}{bx}{n}{<->ssub * fmv/b/n}{}
+\DeclareFontShape{OT1}{fmv}{bx}{it}{<->ssub * fmv/b/it}{}
+\DeclareFontShape{OT1}{fmv}{b}{ui}{<->sub * fmv/b/it}{}
+\DeclareFontShape{OT1}{fmv}{bx}{ui}{<->ssub * fmv/b/ui}{}
+\DeclareFontShape{OT1}{fmv}{bx}{sc}{<->ssub * fmv/b/sc}{}
+
+\endinput
diff --git a/fonts/malvern/tex/OT1fmv9.fd b/fonts/malvern/tex/OT1fmv9.fd
new file mode 100644
index 0000000000..94a389b289
--- /dev/null
+++ b/fonts/malvern/tex/OT1fmv9.fd
@@ -0,0 +1,75 @@
+% .fd -- font family description for NFSS 2
+% generated 1994.10.12 by fdcvt
+% Created from: T1fmv9.fd
+%Created by: tex mkfd
+%Created using fontinst v1.335
+
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+
+\ProvidesFile{OT1fmv9.fd}
+ [1994/10/12 Fontinst v1.335 font definitions for OT1/fmv9.]
+
+\DeclareFontFamily{OT1}{fmv9}{}
+
+\DeclareFontShape{OT1}{fmv9}{m}{n}{
+ <5-8> ma55az7
+ <8-11> ma55az10
+ <11-13> ma55az12
+ <13-16> ma55az14
+ <16-21> ma55az18
+ <21-> ma55az24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{m}{it}{
+ <5-8> ma56az7
+ <8-11> ma56az10
+ <11-13> ma56az12
+ <13-16> ma56az14
+ <16-21> ma56az18
+ <21-> ma56az24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{b}{n}{
+ <5-8> ma75az7
+ <8-11> ma75az10
+ <11-13> ma75az12
+ <13-16> ma75az14
+ <16-21> ma75az18
+ <21-> ma75az24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{b}{it}{
+ <5-8> ma76az7
+ <8-11> ma76az10
+ <11-13> ma76az12
+ <13-16> ma76az14
+ <16-21> ma76az18
+ <21-> ma76az24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{m}{sc}{
+ <5-8> ma55ab7
+ <8-11> ma55ab10
+ <11-13> ma55ab12
+ <13-16> ma55ab14
+ <16-21> ma55ab18
+ <21-> ma55ab24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{b}{sc}{
+ <5-8> ma75ab7
+ <8-11> ma75ab10
+ <11-13> ma75ab12
+ <13-16> ma75ab14
+ <16-21> ma75ab18
+ <21-> ma75ab24
+}{}
+
+\DeclareFontShape{OT1}{fmv9}{m}{ui}{<->sub * fmv9/m/it}{}
+\DeclareFontShape{OT1}{fmv9}{bx}{n}{<->ssub * fmv9/b/n}{}
+\DeclareFontShape{OT1}{fmv9}{bx}{it}{<->ssub * fmv9/b/it}{}
+\DeclareFontShape{OT1}{fmv9}{b}{ui}{<->sub * fmv9/b/it}{}
+\DeclareFontShape{OT1}{fmv9}{bx}{ui}{<->ssub * fmv9/b/ui}{}
+\DeclareFontShape{OT1}{fmv9}{bx}{sc}{<->ssub * fmv9/b/sc}{}
+
+\endinput
diff --git a/fonts/malvern/tex/T1fmv.fd b/fonts/malvern/tex/T1fmv.fd
new file mode 100644
index 0000000000..e6c7b2d1b7
--- /dev/null
+++ b/fonts/malvern/tex/T1fmv.fd
@@ -0,0 +1,73 @@
+%Filename: T1fmv.fd
+%Created by: tex mkfd
+%Created using fontinst v1.335
+
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+
+\ProvidesFile{T1fmv.fd}
+ [1994/10/12 Fontinst v1.335 font definitions for T1/fmv.]
+
+\DeclareFontFamily{T1}{fmv}{}
+
+\DeclareFontShape{T1}{fmv}{m}{n}{
+ <5-8> ma55ar7
+ <8-11> ma55ar10
+ <11-13> ma55ar12
+ <13-16> ma55ar14
+ <16-21> ma55ar18
+ <21-> ma55ar24
+}{}
+
+\DeclareFontShape{T1}{fmv}{m}{it}{
+ <5-8> ma56ar7
+ <8-11> ma56ar10
+ <11-13> ma56ar12
+ <13-16> ma56ar14
+ <16-21> ma56ar18
+ <21-> ma56ar24
+}{}
+
+\DeclareFontShape{T1}{fmv}{b}{n}{
+ <5-8> ma75ar7
+ <8-11> ma75ar10
+ <11-13> ma75ar12
+ <13-16> ma75ar14
+ <16-21> ma75ar18
+ <21-> ma75ar24
+}{}
+
+\DeclareFontShape{T1}{fmv}{b}{it}{
+ <5-8> ma76ar7
+ <8-11> ma76ar10
+ <11-13> ma76ar12
+ <13-16> ma76ar14
+ <16-21> ma76ar18
+ <21-> ma76ar24
+}{}
+
+\DeclareFontShape{T1}{fmv}{m}{sc}{
+ <5-8> ma55at7
+ <8-11> ma55at10
+ <11-13> ma55at12
+ <13-16> ma55at14
+ <16-21> ma55at18
+ <21-> ma55at24
+}{}
+
+\DeclareFontShape{T1}{fmv}{b}{sc}{
+ <5-8> ma75at7
+ <8-11> ma75at10
+ <11-13> ma75at12
+ <13-16> ma75at14
+ <16-21> ma75at18
+ <21-> ma75at24
+}{}
+
+\DeclareFontShape{T1}{fmv}{m}{ui}{<->sub * fmv/m/it}{}
+\DeclareFontShape{T1}{fmv}{bx}{n}{<->ssub * fmv/b/n}{}
+\DeclareFontShape{T1}{fmv}{bx}{it}{<->ssub * fmv/b/it}{}
+\DeclareFontShape{T1}{fmv}{b}{ui}{<->sub * fmv/b/it}{}
+\DeclareFontShape{T1}{fmv}{bx}{ui}{<->ssub * fmv/b/ui}{}
+\DeclareFontShape{T1}{fmv}{bx}{sc}{<->ssub * fmv/b/sc}{}
+
+\endinput
diff --git a/fonts/malvern/tex/T1fmv9.fd b/fonts/malvern/tex/T1fmv9.fd
new file mode 100644
index 0000000000..4270f7b6e8
--- /dev/null
+++ b/fonts/malvern/tex/T1fmv9.fd
@@ -0,0 +1,73 @@
+%Filename: T1fmv9.fd
+%Created by: tex mkfd
+%Created using fontinst v1.335
+
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+
+\ProvidesFile{T1fmv9.fd}
+ [1994/10/12 Fontinst v1.335 font definitions for T1/fmv9.]
+
+\DeclareFontFamily{T1}{fmv9}{}
+
+\DeclareFontShape{T1}{fmv9}{m}{n}{
+ <5-8> ma55as7
+ <8-11> ma55as10
+ <11-13> ma55as12
+ <13-16> ma55as14
+ <16-21> ma55as18
+ <21-> ma55as24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{m}{it}{
+ <5-8> ma56as7
+ <8-11> ma56as10
+ <11-13> ma56as12
+ <13-16> ma56as14
+ <16-21> ma56as18
+ <21-> ma56as24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{b}{n}{
+ <5-8> ma75as7
+ <8-11> ma75as10
+ <11-13> ma75as12
+ <13-16> ma75as14
+ <16-21> ma75as18
+ <21-> ma75as24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{b}{it}{
+ <5-8> ma76as7
+ <8-11> ma76as10
+ <11-13> ma76as12
+ <13-16> ma76as14
+ <16-21> ma76as18
+ <21-> ma76as24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{m}{sc}{
+ <5-8> ma55au7
+ <8-11> ma55au10
+ <11-13> ma55au12
+ <13-16> ma55au14
+ <16-21> ma55au18
+ <21-> ma55au24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{b}{sc}{
+ <5-8> ma75au7
+ <8-11> ma75au10
+ <11-13> ma75au12
+ <13-16> ma75au14
+ <16-21> ma75au18
+ <21-> ma75au24
+}{}
+
+\DeclareFontShape{T1}{fmv9}{m}{ui}{<->sub * fmv9/m/it}{}
+\DeclareFontShape{T1}{fmv9}{bx}{n}{<->ssub * fmv9/b/n}{}
+\DeclareFontShape{T1}{fmv9}{bx}{it}{<->ssub * fmv9/b/it}{}
+\DeclareFontShape{T1}{fmv9}{b}{ui}{<->sub * fmv9/b/it}{}
+\DeclareFontShape{T1}{fmv9}{bx}{ui}{<->ssub * fmv9/b/ui}{}
+\DeclareFontShape{T1}{fmv9}{bx}{sc}{<->ssub * fmv9/b/sc}{}
+
+\endinput
diff --git a/fonts/malvern/tex/maamac.tex b/fonts/malvern/tex/maamac.tex
new file mode 100644
index 0000000000..02e40689c0
--- /dev/null
+++ b/fonts/malvern/tex/maamac.tex
@@ -0,0 +1,290 @@
+% maamac.tex 1.1.8 94/07/20 -- the Malvern-A font conventions
+% Copyright (c) 1991, 1992, 1993, 1994 P. Damian Cugley.
+
+%%% @TeX-macro-file {
+%%% filename = "maamac.tex",
+%%% version = "1.1.8",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "Malvern, METAFONT, font, typefont, TeX",
+%%% supported = "Maybe",
+%%% abstract = "Macros for using the Malvern-A font coding
+%%% scheme in plain TeX documents.",
+%%% dependencies = "pdcutil.tex",
+%%% }
+
+% See the Malvern Handbook (maman.tex) for more info about Malvern.
+% This software is available freely but without warranty.
+% See the file COPYING for details.
+
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \gdef\maaversion{1.1.8} \gdef\lastedit{pdc 1994/07/20}
+}\the\toks0
+\message{\maaversion\space \lastedit}
+\ifx\utilsversion\UNDEFINED \input pdcutil \fi
+
+% If #1 is letter or "other character", or is <chardef token>,
+% then return its ASCII code:
+\def\code#1%
+{%
+ \ifcat#1a% letter?
+ `#1
+ \else \ifcat#1+% <otherchar>?
+ `#1
+ \else \ifx\char#1
+ % assume \char followed by number
+ \else
+ #1% Assume it is chardef name
+ \fi \fi \fi
+}
+
+% #1 <character> to test
+% #2 TRUE text
+% #3 FALSE text
+\def\Ifcap#1#2#3{\ifnum\lccode\code{#1}=\code{#1}#3\else #2\fi}
+\def\Iflower#1#2#3{\ifnum\uccode\code{#1}=\code{#1}#3\else #2\fi}
+
+
+% Place text #3 at displacement (#1,#2) from current position:
+\def\putxy#1#2#3{\rlap{\hskip#1\raise#2\hbox{#3}}}
+
+% Strip the "pt" from the result of \the applied to a dimen:
+{ \catcode`p=12 \catcode`t=12
+ \gdef\\#1pt{#1}
+}
+\let\stripPT=\\
+
+% Find desimal string representing slant of font #1
+\def\fontslant#1{\expandafter\stripPT\the\fontdimen1#1}
+
+% Place a mark \char#2 over #3
+% #1 -- <decimal constant> in range 0-1, gives optical centre of #4
+% #2 -- TeX code that calculates the amount mark must be raised
+% (assuming \box0 contains #3 and putting result in \dimen0)
+% #3 -- <8-bit number> -- character code of mark
+% #4 -- TeX text -- the thing to be marked
+\def\xyaccent#1#2#3#4%
+{{%
+ \setbox0=\hbox{#4}%
+ #2\relax% must calc. dy into \dimen0
+ \dimen1=#1\wd0 \advance\dimen1 \fontslant\font\dimen0
+ \leavevmode
+ \putxy{\dimen1}{\dimen0}{\hbox to 0pt{\hss\char#3\hss}}%
+ \box0
+}}
+\def\yaccent{\xyaccent{0.5}}
+
+% Place Type I mark (\char#1) over character #2:
+\def\typeImark#1#2%
+{{%
+ \setbox1=\hbox{#2}%
+ \ifdim \ht1=1ex
+ \accent#1\relax#2%
+ \else
+ \counta=\code{#2}%
+ \ifnum \counta>64 \ifnum \counta<96
+ \advance\counta 128
+ \fi \fi
+ \yaccent{\dimen0=0.5\ht0 \advance\dimen0-0.5ex}
+ {#1}{\char\counta}%
+ \fi
+}}
+
+% Place Type II mark (#1) over character #2
+%\def\typeIImark#1#2%
+%{{%
+% \counta=#1\relax \countb=\code{#2}%
+% \ifnum \countb<224 \ifnum \countb>127
+% \ifnum \counta<128 \advance\counta 128 \fi
+% \else \ifnum \countb<96 \ifnum \countb>64
+% \advance\countb 128
+% \ifnum \counta<128 \advance\counta 128 \fi
+% \fi \fi \fi \fi
+% \accent\counta \char\countb
+%}}
+
+\def\typeIImark#1#2%
+{{%
+ \counta=#1\relax \countb=\code{#2}%
+ \Ifcap{#2}{%
+ \ifnum \counta<128 \advance\counta 128 \fi
+ \ifnum \countb<128 \advance\countb 128 \fi
+ }{}%
+ \accent\counta \char\countb
+}}
+
+
+\def\.{\typeImark{22}}
+\def\"{\typeImark{23}}
+\def\={\typeImark{150}}
+
+\def\'{\typeIImark8}
+\def\`{\typeIImark9}
+\def\^{\typeIImark{10}}
+\def\~{\typeIImark{11}}
+\def\ringmark{\typeIImark{12}}% ring for Scandinavian a
+\def\v{\typeIImark{13}}
+\def\u{\typeIImark{14}}
+\def\H{\typeIImark{15}}
+
+\def\c{\cidellalike{6}{134}}
+\def\ogonek{\cidellalike{7}{135}}
+\def\cidellalike#1#2#3%
+{%
+ \setbox0=\hbox{#3}%
+ \ifdim\ht0>1ex
+ {\ooalign{\hidewidth\char#2\relax\hidewidth\crcr\unhbox0 }}%
+ \else
+ \accent#1 #3%
+ \fi
+}
+
+\chardef\TH="00 \chardef\th="10 % Icelandic thorn
+\chardef\A ="01 \chardef\a ="11 % Polish A-ogonek
+\chardef\NG="02 \chardef\ng="12 % Lappish eng
+\chardef\L ="03 \chardef\l ="13 % Polish l with bar
+\chardef\DH="04 \chardef\dh="14 % Icelandic eth/D with bar
+\chardef\E ="05 \chardef\e ="15 % Polish E-ogonek
+
+\chardef\ss= "18
+\chardef\i = "19
+\chardef\j = "1A
+\chardef\vd= "9C
+\chardef\vt= "9D
+\chardef\h = "9E
+\chardef\vl= "9F
+
+\chardef\O ="5C \chardef\o ="7C % o with slash
+\chardef\AE="5E \chardef\ae="7E % ae ligature
+\chardef\OE="5F \chardef\oe="7F % oe ligature
+
+\def\aa{\ringmark a}
+\def\AA{\ringmark A}
+\def\Mc{M\char"9B } % as in {\Mc}Donald
+\def\No{N\char"99 } % short for number, numero, etc.
+\def\Na{N\char"98 } % is this correct?
+
+\chardef\bullet = "20
+\mathchardef\spot = "3020 % bullet as relation
+\chardef\trademark = "22
+\chardef\orda = "98
+\chardef\ordo = "99
+\chardef\careof = "9A
+\chardef\Box = "A0
+\chardef\cents = "A2
+\chardef\pounds = "A3
+\chardef\currency = "A4
+\chardef\permille = "A5
+\chardef\times = "A6
+\chardef\yen = "A8
+\chardef\florin = "A9
+\chardef\dag = "AA
+\chardef\ddag = "AB
+\chardef\brdecimal = "AE
+ \def\cdot{\ifmmode\mathchar"00AE \else\brdecimal\fi}
+\chardef\minus = "AF
+\chardef\S = "BA
+\chardef\P = "BB
+\chardef\degrees = "C0
+\let\mathlangle=\langle \def\langle{\ifmmode\mathlangle\else\char"DB \fi}
+\let\mathrangle=\rangle \def\rangle{\ifmmode\mathrangle\else\char"DD \fi}
+\chardef\copyright = "FB
+\chardef\registered = "FD
+
+\def\{{\ifmmode \delimiter"407B308 \else \char123 \fi} \let\lbrace=\{
+\def\}{\ifmmode \delimiter"507C309 \else \char125 \fi} \let\rbrace=\}
+
+\uccode\th=\TH \lccode\TH=\th \uccode\TH=\TH \lccode\th=\th
+\uccode\a =\A \lccode\A =\a \uccode\A =\A \lccode\a =\a
+\uccode\ng=\NG \lccode\NG=\ng \uccode\NG=\NG \lccode\ng=\ng
+\uccode\l =\L \lccode\L =\l \uccode\L =\L \lccode\l =\l
+\uccode\dh=\DH \lccode\DH=\dh \uccode\DH=\DH \lccode\dh=\dh
+\uccode\e =\E \lccode\E =\e \uccode\E =\E \lccode\e =\e
+\uccode\o =\O \lccode\O =\o \uccode\O =\O \lccode\o =\o
+\uccode\ae=\AE \lccode\AE=\ae \uccode\AE=\AE \lccode\ae=\ae
+\uccode\oe=\OE \lccode\OE=\oe \uccode\OE=\OE \lccode\oe=\oe
+
+\uccode\i=`I \uccode\j=`J \lccode\i=\i \lccode\j=\j
+\uccode"9B=`C % McDonald -> MCDONALD
+
+
+\newcount\chcdA \newcount\chcdC \newcount\chcdN
+
+\def\changecodes#1#2#3#4%
+{%
+ \chcdA=#2\relax \chcdC=#3\relax \chcdN=#4\relax
+ \loop
+ \ifnum\chcdN>0
+ #1\chcdA\chcdC
+ \advance\chcdA 1
+ \advance\chcdC 1
+ \advance\chcdN-1
+ \repeat
+}
+
+\changecodes\uccode{"E1}{`A}{26} % \uppercase{scap} = cap
+\changecodes\uccode{"C1}{"C1}{26} % \uppercase{mcap} = mcap
+\changecodes\lccode{"E1}{"E1}{26} % \lowercase{scap} = scap
+\changecodes\lccode{"C1}{`a}{26} % \lowercase{mcap} = lc
+
+\changecodes\lccode{"B0}{`0}{10}
+\changecodes\uccode{`0}{"B0}{10}
+\changecodes\mathcode{`0}{"70B0}{10}
+
+% for \sc and \mc, arg should be all-capitals (lowercase deliberately
+% left untouched -- useful occasionally for odd effects)
+
+\def\capspecials#1#2% #1,#2 hex digits
+{%
+ \chardef\TH="#10 \chardef\A ="#11 \chardef\NG="#12
+ \chardef\L ="#13 \chardef\DH="#14 \chardef\E ="#15
+ \chardef\O ="#2C \chardef\AE="#2E \chardef\OE="#2F
+}
+
+\def\lcspecials#1#2#3%
+{%
+ \chardef\th="#10 \chardef\a ="#11 \chardef\ng="#12
+ \chardef\l ="#13 \chardef\dh="#14 \chardef\e ="#15
+ \chardef\o ="#2C \chardef\ae="#2E \chardef\oe="#2F
+ \def\ss{\char"#23 \char"#23 }% \ss -> ss
+ \chardef\i = "#39 % \i -> I
+ \chardef\j = "#3A % \j -> J
+}
+
+\def\sc#1%
+{{%
+ \changecodes\lccode{`A}{"E1}{26}%
+ \capspecials9F%
+ \lowercase{#1}%
+}}
+
+\def\mc#1%
+{{%
+ \changecodes\lccode{`A}{"C1}{26}%
+ \capspecials8D%
+ \lowercase{#1}%
+}}
+
+\def\csc#1%
+{{%
+ \changecodes\uccode{`a}{"E1}{26}%
+ \lcspecials9FE%
+ \uppercase{#1}%
+}}
+
+\def\caps#1%
+{{%
+ \lcspecials054%
+ \uppercase{#1}%
+}}
+
+\def\lc#1%
+{{%
+ \capspecials17%
+ \lowercase{#1}%
+}}
diff --git a/fonts/malvern/tex/pdcutil.tex b/fonts/malvern/tex/pdcutil.tex
new file mode 100644
index 0000000000..e2133c2928
--- /dev/null
+++ b/fonts/malvern/tex/pdcutil.tex
@@ -0,0 +1,217 @@
+% pdcutil.tex 1.1.7 1994/07/20 -- various ``utility'' macros
+% Copyright 1994 P. Damian Cugley
+
+%%% @TeX-macro-file {
+%%% filename = "pdcutil.tex",
+%%% version = "1.1.7",
+%%% date = "1994/07/20",
+%%% package = "Malvern 1.1",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "A few useful macros used by other macro files",
+%%% supported = "Maybe",
+%%% abstract = "Character programs for the Malvern
+%%% font family.",
+%%% dependencies = "other program files",
+%%% }
+
+%{{{ pdcutil.tex
+% Copyright (c) 1991, 1992, 1993 Damian Cugley.
+
+\ifx\utilsversion\UNDEFINED
+ \let\next\relax
+\else
+ \message{Warning: pdcutil.tex \string\input\space more than once.}
+ \let\next=\endinput
+\fi
+\next
+
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \gdef\utilsversion{1.1.7} \gdef\lastedit{pdc 1994/07/20}
+}\the\toks0
+\message{\utilsversion\space \lastedit}
+
+%{{{ List macros
+
+% TeXbook pp.378-9
+% Note -- parameters in different order!
+
+\toksdef\toksa=0
+\toksdef\toksb=1
+\toksdef\toksc=2
+
+\long\def\prepend#1#2% #1 := <#2> + #1
+{%
+ \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ \edef#1{\the\toksa\the\toksb}%
+}
+
+\long\def\gprepend#1#2% #1 := <#2> + #1
+{%
+ \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ \xdef#1{\the\toksa\the\toksb}%
+}
+
+\long\def\append#1#2% #1 := #1 + <#2>
+{%
+ \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ \edef#1{\the\toksb\the\toksa}%
+}
+
+\long\def\gappend#1#2% #1 := #1 + <#2>
+{%
+ \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ \xdef#1{\the\toksb\the\toksa}%
+}
+
+\def\catenate#1#2#3% #1 := #2 + #3
+{%
+ \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+ \edef#1{\the\toksa\the\toksb}%
+}
+
+\def\gcatenate#1#2#3% #1 := #2 + #3
+{%
+ \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+ \xdef#1{\the\toksa\the\toksb}%
+}
+
+\def\lop#1#2% #1, #2 := hd #2, tl #2
+{%
+ \expandafter\lopoff#2\lopoff#1#2%
+}
+\long\def\lopoff\\#1#2\lopoff#3#4% #3, #4 := #1, #2
+{%
+ \def#3{#1}\def#4{#2}%
+}
+
+\def\glop#1#2%
+{%
+ \expandafter\glopoff#2\glopoff#1#2%
+}
+\long\def\glopoff\\#1#2\glopoff#3#4% #3, #4 := #1, #2
+{%
+ \gdef#3{#1}\gdef#4{#2}%
+}
+
+\def\length#1#2% #1 := length(#2)
+{%
+ #1=0 \long\def\\##1{\advance#1 1}#2%
+}
+%}}}
+%{{{ Macro expansion
+
+% \expcs\def{foo}... is like \def\foo...
+% #1 a single token
+% #2 a token string
+\def\expcs#1#2{\expandafter#1\csname#2\endcsname}
+
+% \noexpcs{foo} -> \noexpand\foo (for in \edefs)
+\def\noexpcs{\expcs\noexpand}
+
+% \letcs\tok{foo} is like \let\tok=\fo
+% #1 is a single token
+% #2 is a token string
+\def\letcs#1#2{\expandafter\let\expandafter#1\csname#2\endcsname}
+
+% Append to a macro definition
+% #1 is the name of a macro
+% #2 is a token string (it is not expanded)
+\def\macappend#1#2%
+{%
+ \toksa=\expandafter{#1}\toksb={#2}%
+ \edef#1{\the\toksa\the\toksb}%
+}
+
+%}}}
+%{{{ Numbers
+
+% Convert <dimen> to pure number in TeX's mouth:
+% the following is likely to be used on \fontdimen1
+% to find the slant expressed as a pure number:
+
+% #1 -- <internal dimen>
+\def\dimentonumber#1{\expandafter\stripPT\the#1 }
+{ \catcode`p=12 \catcode`t=12
+ \gdef\\#1pt{#1}
+}
+\let\stripPT=\\
+
+% Convert <chardef token> to hexadecimal in TeX's mouth:
+
+\def\chardeftohex#1{\expandafter\stripCHAR\meaning#1}
+\def\stripCHAR#1"{}
+
+%}}} Numbers
+%{{{ Arithmetic
+
+\newcount\counta
+\newcount\countb
+\newcount\countc
+\newcount\countd
+\newcount\counte
+
+\newcount\tmodulus
+\def\modulus#1#2% #1 := #1 MOD #2
+{%
+ \tmodulus=#1%
+ \divide\tmodulus by#2\relax
+ \multiply\tmodulus by#2\relax
+ \advance#1-\tmodulus
+}
+%}}}
+%{{{ \begin foo ...\end foo is like {\foo ... \endfoo}.
+
+\let\END=\end
+\outer\def\bye{\par\vfill\supereject\END}
+
+% TeXbook Ex.7.7, Ex.5.7:
+\def\begin #1 %
+{%
+ \expcs\ifx{#1}\relax % is \#1 undefined?
+ \errhelp{Give up and type X now, that's my advice to you.
+ (I will carry on as if \char`\\#1 was def'd to {}.)}%
+ \errmessage{Don't understand #1 environment}%
+ \fi
+ \def\curenvironment{#1}%
+ \begingroup
+ \csname#1\endcsname % if \#1 undefined this does nothing
+}
+
+\def\end #1 %
+{%
+ \csname end#1\endcsname % if \end#1 undefined this does nothing
+ \endgroup
+ \def\temp{#1}%
+ \ifx\temp\curenvironment \else
+ \errhelp={Argh. Why not just type X and get it over with?}%
+ \errmessage{Expecting \string\end \curenvironment\space
+ but got \string\end #1}%
+ \fi
+}
+%}}}
+%{{{ include file iff it exists
+
+\newread\inputifexistsfile
+
+\def\inputifexists#1%
+{%
+ \openin\inputifexistsfile=#1
+ \ifeof\inputifexistsfile
+ \message{Note: no file #1.}%
+ \else
+ \input #1
+ \fi
+ \closein\inputifexistsfile
+}
+
+%}}} include file iff it exists
+%}}} pdcutil.tex
+
+%Local variables:
+%fold-folded-p:t
+%tex-macros-p: t
+%End:
diff --git a/fonts/malvern/tfm/ma53a12.tfm b/fonts/malvern/tfm/ma53a12.tfm
new file mode 100644
index 0000000000..c3f96dd12c
--- /dev/null
+++ b/fonts/malvern/tfm/ma53a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a10.tfm b/fonts/malvern/tfm/ma55a10.tfm
new file mode 100644
index 0000000000..b03f38079e
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a12.tfm b/fonts/malvern/tfm/ma55a12.tfm
new file mode 100644
index 0000000000..309617da77
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a14.tfm b/fonts/malvern/tfm/ma55a14.tfm
new file mode 100644
index 0000000000..d15a2e3ad7
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a18.tfm b/fonts/malvern/tfm/ma55a18.tfm
new file mode 100644
index 0000000000..37cc1bd004
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a24.tfm b/fonts/malvern/tfm/ma55a24.tfm
new file mode 100644
index 0000000000..53847dfbd4
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a48.tfm b/fonts/malvern/tfm/ma55a48.tfm
new file mode 100644
index 0000000000..48949366bb
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a48.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a7.tfm b/fonts/malvern/tfm/ma55a7.tfm
new file mode 100644
index 0000000000..9c60a6d5a5
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55a9.tfm b/fonts/malvern/tfm/ma55a9.tfm
new file mode 100644
index 0000000000..f6edecea9b
--- /dev/null
+++ b/fonts/malvern/tfm/ma55a9.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa10.tfm b/fonts/malvern/tfm/ma55aa10.tfm
new file mode 100644
index 0000000000..2de7c6a3d4
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa12.tfm b/fonts/malvern/tfm/ma55aa12.tfm
new file mode 100644
index 0000000000..919a38126b
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa14.tfm b/fonts/malvern/tfm/ma55aa14.tfm
new file mode 100644
index 0000000000..5deef9458b
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa18.tfm b/fonts/malvern/tfm/ma55aa18.tfm
new file mode 100644
index 0000000000..fd46ee05a0
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa24.tfm b/fonts/malvern/tfm/ma55aa24.tfm
new file mode 100644
index 0000000000..eccda830e5
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55aa7.tfm b/fonts/malvern/tfm/ma55aa7.tfm
new file mode 100644
index 0000000000..fe5eb4a5cf
--- /dev/null
+++ b/fonts/malvern/tfm/ma55aa7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab10.tfm b/fonts/malvern/tfm/ma55ab10.tfm
new file mode 100644
index 0000000000..a4d82e9826
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab12.tfm b/fonts/malvern/tfm/ma55ab12.tfm
new file mode 100644
index 0000000000..50755d41a3
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab14.tfm b/fonts/malvern/tfm/ma55ab14.tfm
new file mode 100644
index 0000000000..237230bfaa
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab18.tfm b/fonts/malvern/tfm/ma55ab18.tfm
new file mode 100644
index 0000000000..80f214c12d
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab24.tfm b/fonts/malvern/tfm/ma55ab24.tfm
new file mode 100644
index 0000000000..fa19161310
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ab7.tfm b/fonts/malvern/tfm/ma55ab7.tfm
new file mode 100644
index 0000000000..f5edbb9fc9
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ab7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar10.tfm b/fonts/malvern/tfm/ma55ar10.tfm
new file mode 100644
index 0000000000..41368fccef
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar12.tfm b/fonts/malvern/tfm/ma55ar12.tfm
new file mode 100644
index 0000000000..632bd250df
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar14.tfm b/fonts/malvern/tfm/ma55ar14.tfm
new file mode 100644
index 0000000000..cd06d838fe
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar18.tfm b/fonts/malvern/tfm/ma55ar18.tfm
new file mode 100644
index 0000000000..d3d2763940
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar24.tfm b/fonts/malvern/tfm/ma55ar24.tfm
new file mode 100644
index 0000000000..61905cd6c3
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55ar7.tfm b/fonts/malvern/tfm/ma55ar7.tfm
new file mode 100644
index 0000000000..0819d4deec
--- /dev/null
+++ b/fonts/malvern/tfm/ma55ar7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as10.tfm b/fonts/malvern/tfm/ma55as10.tfm
new file mode 100644
index 0000000000..c089883f40
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as12.tfm b/fonts/malvern/tfm/ma55as12.tfm
new file mode 100644
index 0000000000..fc36573385
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as14.tfm b/fonts/malvern/tfm/ma55as14.tfm
new file mode 100644
index 0000000000..2ab88a1ee6
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as18.tfm b/fonts/malvern/tfm/ma55as18.tfm
new file mode 100644
index 0000000000..4f66ffb2c5
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as24.tfm b/fonts/malvern/tfm/ma55as24.tfm
new file mode 100644
index 0000000000..fae9f45290
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55as7.tfm b/fonts/malvern/tfm/ma55as7.tfm
new file mode 100644
index 0000000000..586ac70797
--- /dev/null
+++ b/fonts/malvern/tfm/ma55as7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at10.tfm b/fonts/malvern/tfm/ma55at10.tfm
new file mode 100644
index 0000000000..e6667f2526
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at12.tfm b/fonts/malvern/tfm/ma55at12.tfm
new file mode 100644
index 0000000000..28e6df3ce1
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at14.tfm b/fonts/malvern/tfm/ma55at14.tfm
new file mode 100644
index 0000000000..d026e34f80
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at18.tfm b/fonts/malvern/tfm/ma55at18.tfm
new file mode 100644
index 0000000000..c499baacc8
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at24.tfm b/fonts/malvern/tfm/ma55at24.tfm
new file mode 100644
index 0000000000..ec3e143203
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55at7.tfm b/fonts/malvern/tfm/ma55at7.tfm
new file mode 100644
index 0000000000..578ef41de0
--- /dev/null
+++ b/fonts/malvern/tfm/ma55at7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au10.tfm b/fonts/malvern/tfm/ma55au10.tfm
new file mode 100644
index 0000000000..758177cf6c
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au12.tfm b/fonts/malvern/tfm/ma55au12.tfm
new file mode 100644
index 0000000000..206f4f8e8e
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au14.tfm b/fonts/malvern/tfm/ma55au14.tfm
new file mode 100644
index 0000000000..c686ec216d
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au18.tfm b/fonts/malvern/tfm/ma55au18.tfm
new file mode 100644
index 0000000000..0df72a2be8
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au24.tfm b/fonts/malvern/tfm/ma55au24.tfm
new file mode 100644
index 0000000000..783d688e49
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55au7.tfm b/fonts/malvern/tfm/ma55au7.tfm
new file mode 100644
index 0000000000..1f567bbd3a
--- /dev/null
+++ b/fonts/malvern/tfm/ma55au7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az10.tfm b/fonts/malvern/tfm/ma55az10.tfm
new file mode 100644
index 0000000000..ba7c1b223a
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az12.tfm b/fonts/malvern/tfm/ma55az12.tfm
new file mode 100644
index 0000000000..c7197bcdf7
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az14.tfm b/fonts/malvern/tfm/ma55az14.tfm
new file mode 100644
index 0000000000..6b349d7cff
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az18.tfm b/fonts/malvern/tfm/ma55az18.tfm
new file mode 100644
index 0000000000..560c465083
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az24.tfm b/fonts/malvern/tfm/ma55az24.tfm
new file mode 100644
index 0000000000..aecf2c35db
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55az7.tfm b/fonts/malvern/tfm/ma55az7.tfm
new file mode 100644
index 0000000000..129b35ca93
--- /dev/null
+++ b/fonts/malvern/tfm/ma55az7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b10.tfm b/fonts/malvern/tfm/ma55b10.tfm
new file mode 100644
index 0000000000..39ab9accca
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b12.tfm b/fonts/malvern/tfm/ma55b12.tfm
new file mode 100644
index 0000000000..2d799a0491
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b14.tfm b/fonts/malvern/tfm/ma55b14.tfm
new file mode 100644
index 0000000000..d87eecc56d
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b18.tfm b/fonts/malvern/tfm/ma55b18.tfm
new file mode 100644
index 0000000000..f0c2b6d3a1
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b24.tfm b/fonts/malvern/tfm/ma55b24.tfm
new file mode 100644
index 0000000000..33bb0f7333
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55b7.tfm b/fonts/malvern/tfm/ma55b7.tfm
new file mode 100644
index 0000000000..3568e0e04c
--- /dev/null
+++ b/fonts/malvern/tfm/ma55b7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55c12.tfm b/fonts/malvern/tfm/ma55c12.tfm
new file mode 100644
index 0000000000..c6111b5e67
--- /dev/null
+++ b/fonts/malvern/tfm/ma55c12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55g10.tfm b/fonts/malvern/tfm/ma55g10.tfm
new file mode 100644
index 0000000000..0662908859
--- /dev/null
+++ b/fonts/malvern/tfm/ma55g10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55g11.tfm b/fonts/malvern/tfm/ma55g11.tfm
new file mode 100644
index 0000000000..8cd62dfe32
--- /dev/null
+++ b/fonts/malvern/tfm/ma55g11.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55g12.tfm b/fonts/malvern/tfm/ma55g12.tfm
new file mode 100644
index 0000000000..81fa8ca773
--- /dev/null
+++ b/fonts/malvern/tfm/ma55g12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55g24.tfm b/fonts/malvern/tfm/ma55g24.tfm
new file mode 100644
index 0000000000..774c188203
--- /dev/null
+++ b/fonts/malvern/tfm/ma55g24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55g9.tfm b/fonts/malvern/tfm/ma55g9.tfm
new file mode 100644
index 0000000000..54bad76e8c
--- /dev/null
+++ b/fonts/malvern/tfm/ma55g9.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s10.tfm b/fonts/malvern/tfm/ma55s10.tfm
new file mode 100644
index 0000000000..4b8653ab21
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s12.tfm b/fonts/malvern/tfm/ma55s12.tfm
new file mode 100644
index 0000000000..199e6eddec
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s14.tfm b/fonts/malvern/tfm/ma55s14.tfm
new file mode 100644
index 0000000000..148dfb3ead
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s18.tfm b/fonts/malvern/tfm/ma55s18.tfm
new file mode 100644
index 0000000000..470d7ea861
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s24.tfm b/fonts/malvern/tfm/ma55s24.tfm
new file mode 100644
index 0000000000..ee357f9413
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma55s7.tfm b/fonts/malvern/tfm/ma55s7.tfm
new file mode 100644
index 0000000000..edf7c925c9
--- /dev/null
+++ b/fonts/malvern/tfm/ma55s7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a10.tfm b/fonts/malvern/tfm/ma56a10.tfm
new file mode 100644
index 0000000000..b5b18108a4
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a12.tfm b/fonts/malvern/tfm/ma56a12.tfm
new file mode 100644
index 0000000000..f0c4af8820
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a14.tfm b/fonts/malvern/tfm/ma56a14.tfm
new file mode 100644
index 0000000000..7b71c47970
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a18.tfm b/fonts/malvern/tfm/ma56a18.tfm
new file mode 100644
index 0000000000..8d13aa00f9
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a24.tfm b/fonts/malvern/tfm/ma56a24.tfm
new file mode 100644
index 0000000000..af8fa40a8f
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a7.tfm b/fonts/malvern/tfm/ma56a7.tfm
new file mode 100644
index 0000000000..c971790333
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56a9.tfm b/fonts/malvern/tfm/ma56a9.tfm
new file mode 100644
index 0000000000..7009f7e97d
--- /dev/null
+++ b/fonts/malvern/tfm/ma56a9.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar10.tfm b/fonts/malvern/tfm/ma56ar10.tfm
new file mode 100644
index 0000000000..a57f225819
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar12.tfm b/fonts/malvern/tfm/ma56ar12.tfm
new file mode 100644
index 0000000000..a95d218456
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar14.tfm b/fonts/malvern/tfm/ma56ar14.tfm
new file mode 100644
index 0000000000..abba44a3c3
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar18.tfm b/fonts/malvern/tfm/ma56ar18.tfm
new file mode 100644
index 0000000000..2e92cb595e
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar24.tfm b/fonts/malvern/tfm/ma56ar24.tfm
new file mode 100644
index 0000000000..23ea29c214
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56ar7.tfm b/fonts/malvern/tfm/ma56ar7.tfm
new file mode 100644
index 0000000000..ff1e63de51
--- /dev/null
+++ b/fonts/malvern/tfm/ma56ar7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as10.tfm b/fonts/malvern/tfm/ma56as10.tfm
new file mode 100644
index 0000000000..9b07daf4e5
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as12.tfm b/fonts/malvern/tfm/ma56as12.tfm
new file mode 100644
index 0000000000..410077d907
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as14.tfm b/fonts/malvern/tfm/ma56as14.tfm
new file mode 100644
index 0000000000..3edb9fb376
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as18.tfm b/fonts/malvern/tfm/ma56as18.tfm
new file mode 100644
index 0000000000..089f3d9e1d
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as24.tfm b/fonts/malvern/tfm/ma56as24.tfm
new file mode 100644
index 0000000000..7d4b584516
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56as7.tfm b/fonts/malvern/tfm/ma56as7.tfm
new file mode 100644
index 0000000000..2c2bc953f3
--- /dev/null
+++ b/fonts/malvern/tfm/ma56as7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az10.tfm b/fonts/malvern/tfm/ma56az10.tfm
new file mode 100644
index 0000000000..248d7f8cda
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az12.tfm b/fonts/malvern/tfm/ma56az12.tfm
new file mode 100644
index 0000000000..2424444421
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az14.tfm b/fonts/malvern/tfm/ma56az14.tfm
new file mode 100644
index 0000000000..24e78daaae
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az18.tfm b/fonts/malvern/tfm/ma56az18.tfm
new file mode 100644
index 0000000000..d5634e9dfa
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az24.tfm b/fonts/malvern/tfm/ma56az24.tfm
new file mode 100644
index 0000000000..690355aa77
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56az7.tfm b/fonts/malvern/tfm/ma56az7.tfm
new file mode 100644
index 0000000000..e68c0187cf
--- /dev/null
+++ b/fonts/malvern/tfm/ma56az7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b10.tfm b/fonts/malvern/tfm/ma56b10.tfm
new file mode 100644
index 0000000000..9f5efbcac1
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b12.tfm b/fonts/malvern/tfm/ma56b12.tfm
new file mode 100644
index 0000000000..889b9bffeb
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b14.tfm b/fonts/malvern/tfm/ma56b14.tfm
new file mode 100644
index 0000000000..aeaf576911
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b18.tfm b/fonts/malvern/tfm/ma56b18.tfm
new file mode 100644
index 0000000000..5e8e9c5eaf
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b24.tfm b/fonts/malvern/tfm/ma56b24.tfm
new file mode 100644
index 0000000000..62b5de8b2d
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56b7.tfm b/fonts/malvern/tfm/ma56b7.tfm
new file mode 100644
index 0000000000..12737fbd35
--- /dev/null
+++ b/fonts/malvern/tfm/ma56b7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56g11.tfm b/fonts/malvern/tfm/ma56g11.tfm
new file mode 100644
index 0000000000..22e98c75b3
--- /dev/null
+++ b/fonts/malvern/tfm/ma56g11.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s10.tfm b/fonts/malvern/tfm/ma56s10.tfm
new file mode 100644
index 0000000000..2b5e440271
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s12.tfm b/fonts/malvern/tfm/ma56s12.tfm
new file mode 100644
index 0000000000..92d2c0c3aa
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s14.tfm b/fonts/malvern/tfm/ma56s14.tfm
new file mode 100644
index 0000000000..f74370891e
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s18.tfm b/fonts/malvern/tfm/ma56s18.tfm
new file mode 100644
index 0000000000..a024661911
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s24.tfm b/fonts/malvern/tfm/ma56s24.tfm
new file mode 100644
index 0000000000..911f303acf
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma56s7.tfm b/fonts/malvern/tfm/ma56s7.tfm
new file mode 100644
index 0000000000..1a7b293e53
--- /dev/null
+++ b/fonts/malvern/tfm/ma56s7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma57a12.tfm b/fonts/malvern/tfm/ma57a12.tfm
new file mode 100644
index 0000000000..f40263e1a4
--- /dev/null
+++ b/fonts/malvern/tfm/ma57a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a10.tfm b/fonts/malvern/tfm/ma75a10.tfm
new file mode 100644
index 0000000000..fbb56446a2
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a12.tfm b/fonts/malvern/tfm/ma75a12.tfm
new file mode 100644
index 0000000000..de33a8b838
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a14.tfm b/fonts/malvern/tfm/ma75a14.tfm
new file mode 100644
index 0000000000..289229223e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a18.tfm b/fonts/malvern/tfm/ma75a18.tfm
new file mode 100644
index 0000000000..f71d62b7b6
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a24.tfm b/fonts/malvern/tfm/ma75a24.tfm
new file mode 100644
index 0000000000..3c589c042a
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a7.tfm b/fonts/malvern/tfm/ma75a7.tfm
new file mode 100644
index 0000000000..b2fee335ee
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a72.tfm b/fonts/malvern/tfm/ma75a72.tfm
new file mode 100644
index 0000000000..fdf362795f
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a72.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75a9.tfm b/fonts/malvern/tfm/ma75a9.tfm
new file mode 100644
index 0000000000..691ef85a68
--- /dev/null
+++ b/fonts/malvern/tfm/ma75a9.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa10.tfm b/fonts/malvern/tfm/ma75aa10.tfm
new file mode 100644
index 0000000000..eb8a805308
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa12.tfm b/fonts/malvern/tfm/ma75aa12.tfm
new file mode 100644
index 0000000000..06263240a8
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa14.tfm b/fonts/malvern/tfm/ma75aa14.tfm
new file mode 100644
index 0000000000..832e71d0ee
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa18.tfm b/fonts/malvern/tfm/ma75aa18.tfm
new file mode 100644
index 0000000000..0ea577212e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa24.tfm b/fonts/malvern/tfm/ma75aa24.tfm
new file mode 100644
index 0000000000..1e6c915779
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75aa7.tfm b/fonts/malvern/tfm/ma75aa7.tfm
new file mode 100644
index 0000000000..382cbc7dd6
--- /dev/null
+++ b/fonts/malvern/tfm/ma75aa7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab10.tfm b/fonts/malvern/tfm/ma75ab10.tfm
new file mode 100644
index 0000000000..8e5583927c
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab12.tfm b/fonts/malvern/tfm/ma75ab12.tfm
new file mode 100644
index 0000000000..85ce03ff6b
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab14.tfm b/fonts/malvern/tfm/ma75ab14.tfm
new file mode 100644
index 0000000000..baf8e1e81f
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab18.tfm b/fonts/malvern/tfm/ma75ab18.tfm
new file mode 100644
index 0000000000..90af08b3e3
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab24.tfm b/fonts/malvern/tfm/ma75ab24.tfm
new file mode 100644
index 0000000000..97705dcb9e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ab7.tfm b/fonts/malvern/tfm/ma75ab7.tfm
new file mode 100644
index 0000000000..ddcdcf965f
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ab7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar10.tfm b/fonts/malvern/tfm/ma75ar10.tfm
new file mode 100644
index 0000000000..0efba6f8c5
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar12.tfm b/fonts/malvern/tfm/ma75ar12.tfm
new file mode 100644
index 0000000000..1e13210dfc
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar14.tfm b/fonts/malvern/tfm/ma75ar14.tfm
new file mode 100644
index 0000000000..2ad8bfcc7f
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar18.tfm b/fonts/malvern/tfm/ma75ar18.tfm
new file mode 100644
index 0000000000..1e0998c20c
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar24.tfm b/fonts/malvern/tfm/ma75ar24.tfm
new file mode 100644
index 0000000000..be3e466908
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75ar7.tfm b/fonts/malvern/tfm/ma75ar7.tfm
new file mode 100644
index 0000000000..555dc2f1b2
--- /dev/null
+++ b/fonts/malvern/tfm/ma75ar7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as10.tfm b/fonts/malvern/tfm/ma75as10.tfm
new file mode 100644
index 0000000000..dc44b6b051
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as12.tfm b/fonts/malvern/tfm/ma75as12.tfm
new file mode 100644
index 0000000000..9271b28474
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as14.tfm b/fonts/malvern/tfm/ma75as14.tfm
new file mode 100644
index 0000000000..9c59489e27
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as18.tfm b/fonts/malvern/tfm/ma75as18.tfm
new file mode 100644
index 0000000000..17f0b5637d
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as24.tfm b/fonts/malvern/tfm/ma75as24.tfm
new file mode 100644
index 0000000000..d9c5715a8a
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75as7.tfm b/fonts/malvern/tfm/ma75as7.tfm
new file mode 100644
index 0000000000..c7465d5c48
--- /dev/null
+++ b/fonts/malvern/tfm/ma75as7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at10.tfm b/fonts/malvern/tfm/ma75at10.tfm
new file mode 100644
index 0000000000..ad4f0cee28
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at12.tfm b/fonts/malvern/tfm/ma75at12.tfm
new file mode 100644
index 0000000000..4a8000788a
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at14.tfm b/fonts/malvern/tfm/ma75at14.tfm
new file mode 100644
index 0000000000..ade1162e8e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at18.tfm b/fonts/malvern/tfm/ma75at18.tfm
new file mode 100644
index 0000000000..7091b40648
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at24.tfm b/fonts/malvern/tfm/ma75at24.tfm
new file mode 100644
index 0000000000..26facda998
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75at7.tfm b/fonts/malvern/tfm/ma75at7.tfm
new file mode 100644
index 0000000000..7a3a67a0a6
--- /dev/null
+++ b/fonts/malvern/tfm/ma75at7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au10.tfm b/fonts/malvern/tfm/ma75au10.tfm
new file mode 100644
index 0000000000..8877e16c80
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au12.tfm b/fonts/malvern/tfm/ma75au12.tfm
new file mode 100644
index 0000000000..c7dce7cd72
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au14.tfm b/fonts/malvern/tfm/ma75au14.tfm
new file mode 100644
index 0000000000..82d5f740ba
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au18.tfm b/fonts/malvern/tfm/ma75au18.tfm
new file mode 100644
index 0000000000..9886229dc7
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au24.tfm b/fonts/malvern/tfm/ma75au24.tfm
new file mode 100644
index 0000000000..c8899008ad
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75au7.tfm b/fonts/malvern/tfm/ma75au7.tfm
new file mode 100644
index 0000000000..9979371041
--- /dev/null
+++ b/fonts/malvern/tfm/ma75au7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az10.tfm b/fonts/malvern/tfm/ma75az10.tfm
new file mode 100644
index 0000000000..38371aac74
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az12.tfm b/fonts/malvern/tfm/ma75az12.tfm
new file mode 100644
index 0000000000..5dc2dcd428
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az14.tfm b/fonts/malvern/tfm/ma75az14.tfm
new file mode 100644
index 0000000000..0756930eee
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az18.tfm b/fonts/malvern/tfm/ma75az18.tfm
new file mode 100644
index 0000000000..6e2e0022db
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az24.tfm b/fonts/malvern/tfm/ma75az24.tfm
new file mode 100644
index 0000000000..12df015ee6
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75az7.tfm b/fonts/malvern/tfm/ma75az7.tfm
new file mode 100644
index 0000000000..5e45c25fe2
--- /dev/null
+++ b/fonts/malvern/tfm/ma75az7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b10.tfm b/fonts/malvern/tfm/ma75b10.tfm
new file mode 100644
index 0000000000..7c88a923be
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b12.tfm b/fonts/malvern/tfm/ma75b12.tfm
new file mode 100644
index 0000000000..160c85f134
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b14.tfm b/fonts/malvern/tfm/ma75b14.tfm
new file mode 100644
index 0000000000..4d247cdd27
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b18.tfm b/fonts/malvern/tfm/ma75b18.tfm
new file mode 100644
index 0000000000..e0ceabbd21
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b24.tfm b/fonts/malvern/tfm/ma75b24.tfm
new file mode 100644
index 0000000000..210ccfc23a
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75b7.tfm b/fonts/malvern/tfm/ma75b7.tfm
new file mode 100644
index 0000000000..778dd6568e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75b7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s10.tfm b/fonts/malvern/tfm/ma75s10.tfm
new file mode 100644
index 0000000000..37464027d4
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s12.tfm b/fonts/malvern/tfm/ma75s12.tfm
new file mode 100644
index 0000000000..a656e038a8
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s14.tfm b/fonts/malvern/tfm/ma75s14.tfm
new file mode 100644
index 0000000000..2dfaa0335a
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s18.tfm b/fonts/malvern/tfm/ma75s18.tfm
new file mode 100644
index 0000000000..cf1a708a2e
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s24.tfm b/fonts/malvern/tfm/ma75s24.tfm
new file mode 100644
index 0000000000..884010c88b
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma75s7.tfm b/fonts/malvern/tfm/ma75s7.tfm
new file mode 100644
index 0000000000..8afc33e668
--- /dev/null
+++ b/fonts/malvern/tfm/ma75s7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a10.tfm b/fonts/malvern/tfm/ma76a10.tfm
new file mode 100644
index 0000000000..125f47e917
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a12.tfm b/fonts/malvern/tfm/ma76a12.tfm
new file mode 100644
index 0000000000..b0876b2b4c
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a14.tfm b/fonts/malvern/tfm/ma76a14.tfm
new file mode 100644
index 0000000000..a3fa52e829
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a18.tfm b/fonts/malvern/tfm/ma76a18.tfm
new file mode 100644
index 0000000000..cd342431c8
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a24.tfm b/fonts/malvern/tfm/ma76a24.tfm
new file mode 100644
index 0000000000..12292c4bae
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76a7.tfm b/fonts/malvern/tfm/ma76a7.tfm
new file mode 100644
index 0000000000..d8d8d64094
--- /dev/null
+++ b/fonts/malvern/tfm/ma76a7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar10.tfm b/fonts/malvern/tfm/ma76ar10.tfm
new file mode 100644
index 0000000000..aa16ab125d
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar12.tfm b/fonts/malvern/tfm/ma76ar12.tfm
new file mode 100644
index 0000000000..1559b62190
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar14.tfm b/fonts/malvern/tfm/ma76ar14.tfm
new file mode 100644
index 0000000000..a7ead80a88
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar18.tfm b/fonts/malvern/tfm/ma76ar18.tfm
new file mode 100644
index 0000000000..7a192c0ee4
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar24.tfm b/fonts/malvern/tfm/ma76ar24.tfm
new file mode 100644
index 0000000000..20c6c21964
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76ar7.tfm b/fonts/malvern/tfm/ma76ar7.tfm
new file mode 100644
index 0000000000..121d02e5bc
--- /dev/null
+++ b/fonts/malvern/tfm/ma76ar7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as10.tfm b/fonts/malvern/tfm/ma76as10.tfm
new file mode 100644
index 0000000000..b7a20ca8b8
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as12.tfm b/fonts/malvern/tfm/ma76as12.tfm
new file mode 100644
index 0000000000..2ccf4f94d9
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as14.tfm b/fonts/malvern/tfm/ma76as14.tfm
new file mode 100644
index 0000000000..7b0464a5c5
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as18.tfm b/fonts/malvern/tfm/ma76as18.tfm
new file mode 100644
index 0000000000..42e931b867
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as24.tfm b/fonts/malvern/tfm/ma76as24.tfm
new file mode 100644
index 0000000000..7351f8312e
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76as7.tfm b/fonts/malvern/tfm/ma76as7.tfm
new file mode 100644
index 0000000000..ed4a8ad689
--- /dev/null
+++ b/fonts/malvern/tfm/ma76as7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az10.tfm b/fonts/malvern/tfm/ma76az10.tfm
new file mode 100644
index 0000000000..e93eeb50d2
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az12.tfm b/fonts/malvern/tfm/ma76az12.tfm
new file mode 100644
index 0000000000..fca6f99cad
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az14.tfm b/fonts/malvern/tfm/ma76az14.tfm
new file mode 100644
index 0000000000..c083addaf5
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az18.tfm b/fonts/malvern/tfm/ma76az18.tfm
new file mode 100644
index 0000000000..4930db45ff
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az24.tfm b/fonts/malvern/tfm/ma76az24.tfm
new file mode 100644
index 0000000000..dad52ef6ad
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76az7.tfm b/fonts/malvern/tfm/ma76az7.tfm
new file mode 100644
index 0000000000..a7efdf3a6e
--- /dev/null
+++ b/fonts/malvern/tfm/ma76az7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b10.tfm b/fonts/malvern/tfm/ma76b10.tfm
new file mode 100644
index 0000000000..5167f365dd
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b12.tfm b/fonts/malvern/tfm/ma76b12.tfm
new file mode 100644
index 0000000000..e5f9f7781b
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b14.tfm b/fonts/malvern/tfm/ma76b14.tfm
new file mode 100644
index 0000000000..94aac314c3
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b18.tfm b/fonts/malvern/tfm/ma76b18.tfm
new file mode 100644
index 0000000000..5cd76b1105
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b24.tfm b/fonts/malvern/tfm/ma76b24.tfm
new file mode 100644
index 0000000000..8e8761a3ca
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76b7.tfm b/fonts/malvern/tfm/ma76b7.tfm
new file mode 100644
index 0000000000..0230659719
--- /dev/null
+++ b/fonts/malvern/tfm/ma76b7.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s10.tfm b/fonts/malvern/tfm/ma76s10.tfm
new file mode 100644
index 0000000000..085e7b7c59
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s10.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s12.tfm b/fonts/malvern/tfm/ma76s12.tfm
new file mode 100644
index 0000000000..25691fa580
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s12.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s14.tfm b/fonts/malvern/tfm/ma76s14.tfm
new file mode 100644
index 0000000000..bb0c0d2be7
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s14.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s18.tfm b/fonts/malvern/tfm/ma76s18.tfm
new file mode 100644
index 0000000000..8169b8d624
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s18.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s24.tfm b/fonts/malvern/tfm/ma76s24.tfm
new file mode 100644
index 0000000000..167962935f
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s24.tfm
Binary files differ
diff --git a/fonts/malvern/tfm/ma76s7.tfm b/fonts/malvern/tfm/ma76s7.tfm
new file mode 100644
index 0000000000..599aa4fa15
--- /dev/null
+++ b/fonts/malvern/tfm/ma76s7.tfm
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa10.vf b/fonts/malvern/vf/ma55aa10.vf
new file mode 100644
index 0000000000..73eda0f4f3
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa12.vf b/fonts/malvern/vf/ma55aa12.vf
new file mode 100644
index 0000000000..38809e9787
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa14.vf b/fonts/malvern/vf/ma55aa14.vf
new file mode 100644
index 0000000000..a20dd0e48b
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa18.vf b/fonts/malvern/vf/ma55aa18.vf
new file mode 100644
index 0000000000..7b99c70dba
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa24.vf b/fonts/malvern/vf/ma55aa24.vf
new file mode 100644
index 0000000000..7d793f2db1
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55aa7.vf b/fonts/malvern/vf/ma55aa7.vf
new file mode 100644
index 0000000000..ecd72d52cb
--- /dev/null
+++ b/fonts/malvern/vf/ma55aa7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab10.vf b/fonts/malvern/vf/ma55ab10.vf
new file mode 100644
index 0000000000..58b1867746
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab12.vf b/fonts/malvern/vf/ma55ab12.vf
new file mode 100644
index 0000000000..c09e595b63
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab14.vf b/fonts/malvern/vf/ma55ab14.vf
new file mode 100644
index 0000000000..4066910cf8
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab18.vf b/fonts/malvern/vf/ma55ab18.vf
new file mode 100644
index 0000000000..faea8c29f1
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab24.vf b/fonts/malvern/vf/ma55ab24.vf
new file mode 100644
index 0000000000..a4d53ee080
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ab7.vf b/fonts/malvern/vf/ma55ab7.vf
new file mode 100644
index 0000000000..60e937a922
--- /dev/null
+++ b/fonts/malvern/vf/ma55ab7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar10.vf b/fonts/malvern/vf/ma55ar10.vf
new file mode 100644
index 0000000000..f870663e14
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar12.vf b/fonts/malvern/vf/ma55ar12.vf
new file mode 100644
index 0000000000..87e0614fc0
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar14.vf b/fonts/malvern/vf/ma55ar14.vf
new file mode 100644
index 0000000000..b6e26693d5
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar18.vf b/fonts/malvern/vf/ma55ar18.vf
new file mode 100644
index 0000000000..5ab841f187
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar24.vf b/fonts/malvern/vf/ma55ar24.vf
new file mode 100644
index 0000000000..6d613bb283
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55ar7.vf b/fonts/malvern/vf/ma55ar7.vf
new file mode 100644
index 0000000000..687253dce3
--- /dev/null
+++ b/fonts/malvern/vf/ma55ar7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as10.vf b/fonts/malvern/vf/ma55as10.vf
new file mode 100644
index 0000000000..d1d5ca42e5
--- /dev/null
+++ b/fonts/malvern/vf/ma55as10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as12.vf b/fonts/malvern/vf/ma55as12.vf
new file mode 100644
index 0000000000..d9649788c7
--- /dev/null
+++ b/fonts/malvern/vf/ma55as12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as14.vf b/fonts/malvern/vf/ma55as14.vf
new file mode 100644
index 0000000000..419aa45dd9
--- /dev/null
+++ b/fonts/malvern/vf/ma55as14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as18.vf b/fonts/malvern/vf/ma55as18.vf
new file mode 100644
index 0000000000..ee49f5f563
--- /dev/null
+++ b/fonts/malvern/vf/ma55as18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as24.vf b/fonts/malvern/vf/ma55as24.vf
new file mode 100644
index 0000000000..a73d769946
--- /dev/null
+++ b/fonts/malvern/vf/ma55as24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55as7.vf b/fonts/malvern/vf/ma55as7.vf
new file mode 100644
index 0000000000..e544738f38
--- /dev/null
+++ b/fonts/malvern/vf/ma55as7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at10.vf b/fonts/malvern/vf/ma55at10.vf
new file mode 100644
index 0000000000..e56b6c792f
--- /dev/null
+++ b/fonts/malvern/vf/ma55at10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at12.vf b/fonts/malvern/vf/ma55at12.vf
new file mode 100644
index 0000000000..4970e1d11d
--- /dev/null
+++ b/fonts/malvern/vf/ma55at12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at14.vf b/fonts/malvern/vf/ma55at14.vf
new file mode 100644
index 0000000000..980ed96341
--- /dev/null
+++ b/fonts/malvern/vf/ma55at14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at18.vf b/fonts/malvern/vf/ma55at18.vf
new file mode 100644
index 0000000000..35ce554975
--- /dev/null
+++ b/fonts/malvern/vf/ma55at18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at24.vf b/fonts/malvern/vf/ma55at24.vf
new file mode 100644
index 0000000000..c29441cd1f
--- /dev/null
+++ b/fonts/malvern/vf/ma55at24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55at7.vf b/fonts/malvern/vf/ma55at7.vf
new file mode 100644
index 0000000000..59fb43ed7b
--- /dev/null
+++ b/fonts/malvern/vf/ma55at7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au10.vf b/fonts/malvern/vf/ma55au10.vf
new file mode 100644
index 0000000000..b41ab85c64
--- /dev/null
+++ b/fonts/malvern/vf/ma55au10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au12.vf b/fonts/malvern/vf/ma55au12.vf
new file mode 100644
index 0000000000..c743946d17
--- /dev/null
+++ b/fonts/malvern/vf/ma55au12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au14.vf b/fonts/malvern/vf/ma55au14.vf
new file mode 100644
index 0000000000..3011bd3067
--- /dev/null
+++ b/fonts/malvern/vf/ma55au14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au18.vf b/fonts/malvern/vf/ma55au18.vf
new file mode 100644
index 0000000000..0d2cc5de98
--- /dev/null
+++ b/fonts/malvern/vf/ma55au18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au24.vf b/fonts/malvern/vf/ma55au24.vf
new file mode 100644
index 0000000000..4e7ee1babd
--- /dev/null
+++ b/fonts/malvern/vf/ma55au24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma55au7.vf b/fonts/malvern/vf/ma55au7.vf
new file mode 100644
index 0000000000..0af70fd5bf
--- /dev/null
+++ b/fonts/malvern/vf/ma55au7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar10.vf b/fonts/malvern/vf/ma56ar10.vf
new file mode 100644
index 0000000000..8585a3bd7b
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar12.vf b/fonts/malvern/vf/ma56ar12.vf
new file mode 100644
index 0000000000..d7727680e2
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar14.vf b/fonts/malvern/vf/ma56ar14.vf
new file mode 100644
index 0000000000..b2d9a6585d
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar18.vf b/fonts/malvern/vf/ma56ar18.vf
new file mode 100644
index 0000000000..8282b62fac
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar24.vf b/fonts/malvern/vf/ma56ar24.vf
new file mode 100644
index 0000000000..6a5ff02586
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56ar7.vf b/fonts/malvern/vf/ma56ar7.vf
new file mode 100644
index 0000000000..7b0e8f743a
--- /dev/null
+++ b/fonts/malvern/vf/ma56ar7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as10.vf b/fonts/malvern/vf/ma56as10.vf
new file mode 100644
index 0000000000..4e976e89ac
--- /dev/null
+++ b/fonts/malvern/vf/ma56as10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as12.vf b/fonts/malvern/vf/ma56as12.vf
new file mode 100644
index 0000000000..2ea9635529
--- /dev/null
+++ b/fonts/malvern/vf/ma56as12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as14.vf b/fonts/malvern/vf/ma56as14.vf
new file mode 100644
index 0000000000..e30ca03774
--- /dev/null
+++ b/fonts/malvern/vf/ma56as14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as18.vf b/fonts/malvern/vf/ma56as18.vf
new file mode 100644
index 0000000000..97603cbc67
--- /dev/null
+++ b/fonts/malvern/vf/ma56as18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as24.vf b/fonts/malvern/vf/ma56as24.vf
new file mode 100644
index 0000000000..3a03f77ea9
--- /dev/null
+++ b/fonts/malvern/vf/ma56as24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma56as7.vf b/fonts/malvern/vf/ma56as7.vf
new file mode 100644
index 0000000000..e24b408084
--- /dev/null
+++ b/fonts/malvern/vf/ma56as7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa10.vf b/fonts/malvern/vf/ma75aa10.vf
new file mode 100644
index 0000000000..379548251f
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa12.vf b/fonts/malvern/vf/ma75aa12.vf
new file mode 100644
index 0000000000..f458fa7f70
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa14.vf b/fonts/malvern/vf/ma75aa14.vf
new file mode 100644
index 0000000000..8d19b5d8a9
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa18.vf b/fonts/malvern/vf/ma75aa18.vf
new file mode 100644
index 0000000000..99e3a9b935
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa24.vf b/fonts/malvern/vf/ma75aa24.vf
new file mode 100644
index 0000000000..3fe3d284f3
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75aa7.vf b/fonts/malvern/vf/ma75aa7.vf
new file mode 100644
index 0000000000..26af2b6f3f
--- /dev/null
+++ b/fonts/malvern/vf/ma75aa7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab10.vf b/fonts/malvern/vf/ma75ab10.vf
new file mode 100644
index 0000000000..0461104453
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab12.vf b/fonts/malvern/vf/ma75ab12.vf
new file mode 100644
index 0000000000..f196a4ba19
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab14.vf b/fonts/malvern/vf/ma75ab14.vf
new file mode 100644
index 0000000000..f310bd0744
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab18.vf b/fonts/malvern/vf/ma75ab18.vf
new file mode 100644
index 0000000000..b18a018400
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab24.vf b/fonts/malvern/vf/ma75ab24.vf
new file mode 100644
index 0000000000..0cc0f14584
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ab7.vf b/fonts/malvern/vf/ma75ab7.vf
new file mode 100644
index 0000000000..c14481623e
--- /dev/null
+++ b/fonts/malvern/vf/ma75ab7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar10.vf b/fonts/malvern/vf/ma75ar10.vf
new file mode 100644
index 0000000000..6490e18cdd
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar12.vf b/fonts/malvern/vf/ma75ar12.vf
new file mode 100644
index 0000000000..8248f77b38
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar14.vf b/fonts/malvern/vf/ma75ar14.vf
new file mode 100644
index 0000000000..0efdd45609
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar18.vf b/fonts/malvern/vf/ma75ar18.vf
new file mode 100644
index 0000000000..29f989810b
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar24.vf b/fonts/malvern/vf/ma75ar24.vf
new file mode 100644
index 0000000000..76532cd767
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75ar7.vf b/fonts/malvern/vf/ma75ar7.vf
new file mode 100644
index 0000000000..cfe8adac3a
--- /dev/null
+++ b/fonts/malvern/vf/ma75ar7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as10.vf b/fonts/malvern/vf/ma75as10.vf
new file mode 100644
index 0000000000..b15bc48824
--- /dev/null
+++ b/fonts/malvern/vf/ma75as10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as12.vf b/fonts/malvern/vf/ma75as12.vf
new file mode 100644
index 0000000000..ffccee930c
--- /dev/null
+++ b/fonts/malvern/vf/ma75as12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as14.vf b/fonts/malvern/vf/ma75as14.vf
new file mode 100644
index 0000000000..457263ba98
--- /dev/null
+++ b/fonts/malvern/vf/ma75as14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as18.vf b/fonts/malvern/vf/ma75as18.vf
new file mode 100644
index 0000000000..0b95ebd331
--- /dev/null
+++ b/fonts/malvern/vf/ma75as18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as24.vf b/fonts/malvern/vf/ma75as24.vf
new file mode 100644
index 0000000000..696f71260c
--- /dev/null
+++ b/fonts/malvern/vf/ma75as24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75as7.vf b/fonts/malvern/vf/ma75as7.vf
new file mode 100644
index 0000000000..25471c6b12
--- /dev/null
+++ b/fonts/malvern/vf/ma75as7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at10.vf b/fonts/malvern/vf/ma75at10.vf
new file mode 100644
index 0000000000..a1e69a9adc
--- /dev/null
+++ b/fonts/malvern/vf/ma75at10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at12.vf b/fonts/malvern/vf/ma75at12.vf
new file mode 100644
index 0000000000..b563c1f7b5
--- /dev/null
+++ b/fonts/malvern/vf/ma75at12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at14.vf b/fonts/malvern/vf/ma75at14.vf
new file mode 100644
index 0000000000..23855dc6a8
--- /dev/null
+++ b/fonts/malvern/vf/ma75at14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at18.vf b/fonts/malvern/vf/ma75at18.vf
new file mode 100644
index 0000000000..1cb43ff335
--- /dev/null
+++ b/fonts/malvern/vf/ma75at18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at24.vf b/fonts/malvern/vf/ma75at24.vf
new file mode 100644
index 0000000000..a5b4f7812c
--- /dev/null
+++ b/fonts/malvern/vf/ma75at24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75at7.vf b/fonts/malvern/vf/ma75at7.vf
new file mode 100644
index 0000000000..ca1e2fe301
--- /dev/null
+++ b/fonts/malvern/vf/ma75at7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au10.vf b/fonts/malvern/vf/ma75au10.vf
new file mode 100644
index 0000000000..bd2c3cd158
--- /dev/null
+++ b/fonts/malvern/vf/ma75au10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au12.vf b/fonts/malvern/vf/ma75au12.vf
new file mode 100644
index 0000000000..25042bca6b
--- /dev/null
+++ b/fonts/malvern/vf/ma75au12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au14.vf b/fonts/malvern/vf/ma75au14.vf
new file mode 100644
index 0000000000..489f9e66de
--- /dev/null
+++ b/fonts/malvern/vf/ma75au14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au18.vf b/fonts/malvern/vf/ma75au18.vf
new file mode 100644
index 0000000000..992f801937
--- /dev/null
+++ b/fonts/malvern/vf/ma75au18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au24.vf b/fonts/malvern/vf/ma75au24.vf
new file mode 100644
index 0000000000..cc467ad87b
--- /dev/null
+++ b/fonts/malvern/vf/ma75au24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma75au7.vf b/fonts/malvern/vf/ma75au7.vf
new file mode 100644
index 0000000000..e947bd665d
--- /dev/null
+++ b/fonts/malvern/vf/ma75au7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar10.vf b/fonts/malvern/vf/ma76ar10.vf
new file mode 100644
index 0000000000..3dd1401b99
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar12.vf b/fonts/malvern/vf/ma76ar12.vf
new file mode 100644
index 0000000000..1d7d3db32c
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar14.vf b/fonts/malvern/vf/ma76ar14.vf
new file mode 100644
index 0000000000..d75c387eac
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar18.vf b/fonts/malvern/vf/ma76ar18.vf
new file mode 100644
index 0000000000..9d7214572d
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar24.vf b/fonts/malvern/vf/ma76ar24.vf
new file mode 100644
index 0000000000..bea00f88f2
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76ar7.vf b/fonts/malvern/vf/ma76ar7.vf
new file mode 100644
index 0000000000..6213dd1c30
--- /dev/null
+++ b/fonts/malvern/vf/ma76ar7.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as10.vf b/fonts/malvern/vf/ma76as10.vf
new file mode 100644
index 0000000000..70024ffeb5
--- /dev/null
+++ b/fonts/malvern/vf/ma76as10.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as12.vf b/fonts/malvern/vf/ma76as12.vf
new file mode 100644
index 0000000000..48d7a1bb3e
--- /dev/null
+++ b/fonts/malvern/vf/ma76as12.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as14.vf b/fonts/malvern/vf/ma76as14.vf
new file mode 100644
index 0000000000..9f6c68c60d
--- /dev/null
+++ b/fonts/malvern/vf/ma76as14.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as18.vf b/fonts/malvern/vf/ma76as18.vf
new file mode 100644
index 0000000000..1fffc37eb4
--- /dev/null
+++ b/fonts/malvern/vf/ma76as18.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as24.vf b/fonts/malvern/vf/ma76as24.vf
new file mode 100644
index 0000000000..3f63bec903
--- /dev/null
+++ b/fonts/malvern/vf/ma76as24.vf
Binary files differ
diff --git a/fonts/malvern/vf/ma76as7.vf b/fonts/malvern/vf/ma76as7.vf
new file mode 100644
index 0000000000..771b2fde85
--- /dev/null
+++ b/fonts/malvern/vf/ma76as7.vf
Binary files differ